diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 000000000..9c6d3af73
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+custom: ["https://littlevgl.com/donate"]
diff --git a/README.md b/README.md
index 2881caf85..9d1708875 100644
--- a/README.md
+++ b/README.md
@@ -83,7 +83,7 @@ Choose a project with your favourite IDE:
| Eclipse | CodeBlocks | Visual Studio | PlatformIO | Qt Creator |
|-------------|-------------|---------------|-----------|------------|
| [![Eclipse](https://littlevgl.com/logo/ide/eclipse.jpg)](https://github.com/littlevgl/pc_simulator_sdl_eclipse) | [![CodeBlocks](https://littlevgl.com/logo/ide/codeblocks.jpg)](https://github.com/littlevgl/pc_simulator_win_codeblocks) | [![VisualStudio](https://littlevgl.com/logo/ide/visualstudio.jpg)](https://github.com/littlevgl/visual_studio_2017_sdl_x64) | [![PlatformIO](https://littlevgl.com/logo/ide/platformio.jpg)](https://github.com/littlevgl/pc_simulator_sdl_platformio) | [![QtCreator](https://littlevgl.com/logo/ide/qtcreator.jpg)](https://blog.littlevgl.com/2019-01-03/qt-creator) |
-| Cross-platform
with SDL | Native Windows | Cross-platform
with SDL | Cross-platform
with SDL | Cross-platform
with SDL |
+| Cross-platform
with SDL
(Recommended on
Linux and Mac) | Native Windows | Windows
with SDL | Cross-platform
with SDL | Cross-platform
with SDL |
## Add LittlevGL to your project
@@ -188,8 +188,8 @@ Styles can be assigned to the objects to changed their appearance. A style descr
You can create a new style like this:
```c
-static lv_style_t style1; /*Declare a new style. Should be `static`*/
-lv_style_copy(&style1, &lv_style_plain); /*Copy a buil-in style*/
+static lv_style_t style1; /*Declare a new style. Should be `static`*/
+lv_style_copy(&style1, &lv_style_plain); /*Copy a built-in style*/
style1.body.main_color = LV_COLOR_RED; /*Main color*/
style1.body.grad_color = lv_color_hex(0xffd83c) /*Gradient color (orange)*/
style1.body.radius = 3;
diff --git a/a.txt b/a.txt
new file mode 100644
index 000000000..5644f9f94
--- /dev/null
+++ b/a.txt
@@ -0,0 +1,127 @@
+diff --git a/src/lv_draw/lv_draw_img.c b/src/lv_draw/lv_draw_img.c
+index f28c47eb..74f73686 100644
+--- a/src/lv_draw/lv_draw_img.c
++++ b/src/lv_draw/lv_draw_img.c
+@@ -406,7 +406,7 @@ static void lv_draw_map(const lv_area_t * map_area, const lv_area_t * clip_area,
+ trans_dsc.cfg.pivot_x = map_w / 2;
+ trans_dsc.cfg.pivot_y = map_h / 2;
+ trans_dsc.cfg.color = style->image.color;
+- trans_dsc.cfg.antialias = antialaias;
++ trans_dsc.cfg.antialias = true;
+
+ lv_img_buf_transform_init(&trans_dsc);
+ }
+diff --git a/src/lv_draw/lv_img_buf.c b/src/lv_draw/lv_img_buf.c
+index 2b79c7b1..89a57708 100644
+--- a/src/lv_draw/lv_img_buf.c
++++ b/src/lv_draw/lv_img_buf.c
+@@ -161,6 +161,68 @@ lv_opa_t lv_img_buf_get_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y)
+ return LV_OPA_COVER;
+ }
+
++/**
++ * Set the color of a pixel of an image. The alpha channel won't be affected.
++ * @param dsc pointer to an image descriptor
++ * @param x x coordinate of the point to set
++ * @param y x coordinate of the point to set
++ * @param c color of the point
++ * @param safe true: check out of bounds
++ */
++void lv_img_buf_set_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t c)
++{
++ uint8_t * buf_u8 = (uint8_t *)dsc->data;
++
++ if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR || dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
++ uint8_t px_size = lv_img_cf_get_px_size(dsc->header.cf) >> 3;
++ uint32_t px = dsc->header.w * y * px_size + x * px_size;
++ memcpy(&buf_u8[px], &c, px_size);
++ } else if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
++ uint8_t px_size = lv_img_cf_get_px_size(dsc->header.cf) >> 3;
++ uint32_t px = dsc->header.w * y * px_size + x * px_size;
++ memcpy(&buf_u8[px], &c, px_size - 1); /*-1 to not overwrite the alpha value*/
++ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT) {
++ buf_u8 += sizeof(lv_color32_t) * 2; /*Skip the palette*/
++
++ uint8_t bit = x & 0x7;
++ x = x >> 3;
++
++ /* Get the current pixel.
++ * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
++ * so the possible real width are 8 ,16, 24 ...*/
++ uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
++ buf_u8[px] = buf_u8[px] & ~(1 << (7 - bit));
++ buf_u8[px] = buf_u8[px] | ((c.full & 0x1) << (7 - bit));
++ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_2BIT) {
++ buf_u8 += sizeof(lv_color32_t) * 4; /*Skip the palette*/
++ uint8_t bit = (x & 0x3) * 2;
++ x = x >> 2;
++
++ /* Get the current pixel.
++ * dsc->header.w + 3 means rounding up to 4 because the lines are byte aligned
++ * so the possible real width are 4, 8 ,12 ...*/
++ uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
++
++ buf_u8[px] = buf_u8[px] & ~(3 << (6 - bit));
++ buf_u8[px] = buf_u8[px] | ((c.full & 0x3) << (6 - bit));
++ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_4BIT) {
++ buf_u8 += sizeof(lv_color32_t) * 16; /*Skip the palette*/
++ uint8_t bit = (x & 0x1) * 4;
++ x = x >> 1;
++
++ /* Get the current pixel.
++ * dsc->header.w + 1 means rounding up to 2 because the lines are byte aligned
++ * so the possible real width are 2 ,4, 6 ...*/
++ uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
++ buf_u8[px] = buf_u8[px] & ~(0xF << (4 - bit));
++ buf_u8[px] = buf_u8[px] | ((c.full & 0xF) << (4 - bit));
++ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_8BIT) {
++ buf_u8 += sizeof(lv_color32_t) * 256; /*Skip the palette*/
++ uint32_t px = dsc->header.w * y + x;
++ buf_u8[px] = c.full;
++ }
++}
++
+ /**
+ * Set the alpha value of a pixel of an image. The color won't be affected
+ * @param dsc pointer to an image descriptor
+diff --git a/src/lv_draw/lv_img_buf.h b/src/lv_draw/lv_img_buf.h
+index 2629b465..3c1d8273 100644
+--- a/src/lv_draw/lv_img_buf.h
++++ b/src/lv_draw/lv_img_buf.h
+@@ -205,6 +205,7 @@ lv_color_t lv_img_buf_get_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t
+ */
+ lv_opa_t lv_img_buf_get_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y);
+
++
+ /**
+ * Set the color of a pixel of an image. The alpha channel won't be affected.
+ * @param dsc pointer to an image descriptor
+diff --git a/src/lv_objx/lv_img.c b/src/lv_objx/lv_img.c
+index 982bb8d9..f792867a 100644
+--- a/src/lv_objx/lv_img.c
++++ b/src/lv_objx/lv_img.c
+@@ -273,7 +273,6 @@ void lv_img_set_angle(lv_obj_t * img, int16_t angle)
+ lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
+ if(angle == ext->angle) return;
+
+- lv_obj_invalidate(img);
+ ext->angle = angle;
+ lv_obj_refresh_ext_draw_pad(img);
+ lv_obj_invalidate(img);
+@@ -296,7 +295,6 @@ void lv_img_set_zoom(lv_obj_t * img, uint16_t zoom)
+
+ if(zoom == 0) zoom = 1;
+
+- lv_obj_invalidate(img);
+ ext->zoom = zoom;
+ lv_obj_refresh_ext_draw_pad(img);
+ lv_obj_invalidate(img);
+@@ -533,7 +531,7 @@ static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * param)
+ }
+ } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+ /*If the image has angle provide enough room for the rotated corners */
+- if(ext->angle || ext->zoom != LV_IMG_ZOOM_NONE) {
++ if(ext->angle && ext->zoom) {
+ lv_sqrt_res_t ds;
+ lv_sqrt(ext->w * ext->w + ext->h * ext->h, &ds);
+ ds.i = (ds.i * ext->zoom + 0) >> 8; /*+10 to be sure anything won't be clipped*/
diff --git a/lv_conf_template.h b/lv_conf_template.h
index 08e9beb9e..3580da53b 100644
--- a/lv_conf_template.h
+++ b/lv_conf_template.h
@@ -43,6 +43,9 @@
/*Images pixels with this color will not be drawn (with chroma keying)*/
#define LV_COLOR_TRANSP LV_COLOR_LIME /*LV_COLOR_LIME: pure green*/
+/* Enable chroma keying for indexed images. */
+#define LV_INDEXED_CHROMA 1
+
/* Enable anti-aliasing (lines, and radiuses will be smoothed) */
#define LV_ANTIALIAS 1
@@ -193,6 +196,14 @@ typedef void * lv_img_decoder_user_data_t;
* font's bitmaps */
#define LV_ATTRIBUTE_LARGE_CONST
+/* Export integer constant to binding.
+ * This macro is used with constants in the form of LV_ that
+ * should also appear on lvgl binding API such as Micropython
+ *
+ * The default value just prevents a GCC warning.
+ */
+#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning
+
/*===================
* HAL settings
*==================*/
@@ -225,10 +236,46 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i
# define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
/* 1: Print the log with 'printf';
- * 0: user need to register a callback with `lv_log_register_print`*/
+ * 0: user need to register a callback with `lv_log_register_print_cb`*/
# define LV_LOG_PRINTF 0
#endif /*LV_USE_LOG*/
+/*=================
+ * Debug settings
+ *================*/
+
+/* If Debug is enabled LittelvGL validates the parameters of the functions.
+ * If an invalid parameter is found an error log message is printed and
+ * the MCU halts at the error. (`LV_USE_LOG` should be enabled)
+ * If you are debugging the MCU you can pause
+ * the debugger to see exactly where the issue is.
+ *
+ * The behavior of asserts can be overwritten by redefining them here.
+ * E.g. #define LV_ASSERT_MEM(p)
+ */
+#define LV_USE_DEBUG 1
+#if LV_USE_DEBUG
+
+/*Check if the parameter is NULL. (Quite fast) */
+#define LV_USE_ASSERT_NULL 1
+
+/*Checks is the memory is successfully allocated or no. (Quite fast)*/
+#define LV_USE_ASSERT_MEM 1
+
+/* Check the strings.
+ * Search for NULL, very long strings, invalid characters, and unnatural repetitions. (Slow)
+ * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */
+#define LV_USE_ASSERT_STR 0
+
+/* Check NULL, the object's type and existence (e.g. not deleted). (Quite slow)
+ * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */
+#define LV_USE_ASSERT_OBJ 0
+
+/*Check if the styles are properly initialized. (Fast)*/
+#define LV_USE_ASSERT_STYLE 1
+
+#endif /*LV_USE_DEBUG*/
+
/*================
* THEME USAGE
*================*/
@@ -260,6 +307,10 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i
#define LV_FONT_ROBOTO_22 0
#define LV_FONT_ROBOTO_28 0
+/* Demonstrate special features */
+#define LV_FONT_ROBOTO_12_SUBPX 1
+#define LV_FONT_ROBOTO_28_COMPRESSED 1 /*bpp = 3*/
+
/*Pixel perfect monospace font
* http://pelulamu.net/unscii/ */
#define LV_FONT_UNSCII_8 0
@@ -280,6 +331,12 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i
* but with > 10,000 characters if you see issues probably you need to enable it.*/
#define LV_FONT_FMT_TXT_LARGE 0
+/* Set the pixel order of the display.
+ * Important only if "subpx fonts" are used.
+ * With "normal" font it doesn't matter.
+ */
+#define LV_FONT_SUBPX_BGR 0
+
/*Declare the type of the user data of fonts (can be e.g. `void *`, `int`, `struct`)*/
typedef void * lv_font_user_data_t;
@@ -297,6 +354,42 @@ typedef void * lv_font_user_data_t;
/*Can break (wrap) texts on these chars*/
#define LV_TXT_BREAK_CHARS " ,.;:-_"
+/* If a word is at least this long, will break wherever "prettiest"
+ * To disable, set to a value <= 0 */
+#define LV_TXT_LINE_BREAK_LONG_LEN 12
+
+/* Minimum number of characters in a long word to put on a line before a break.
+ * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */
+#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3
+
+/* Minimum number of characters in a long word to put on a line after a break.
+ * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */
+#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3
+
+/* The control character to use for signalling text recoloring. */
+#define LV_TXT_COLOR_CMD "#"
+
+/* Support bidirectional texts.
+ * Allows mixing Left-to-Right and Right-to-Left texts.
+ * The direction will be processed according to the Unicode Bidirectioanl Algorithm:
+ * https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/
+#define LV_USE_BIDI 0
+#if LV_USE_BIDI
+/* Set the default direction. Supported values:
+ * `LV_BIDI_DIR_LTR` Left-to-Right
+ * `LV_BIDI_DIR_RTL` Right-to-Left
+ * `LV_BIDI_DIR_AUTO` detect texts base direction */
+#define LV_BIDI_BASE_DIR_DEF LV_BIDI_DIR_AUTO
+#endif
+
+/*Change the built in (v)snprintf functions*/
+#define LV_SPRINTF_CUSTOM 0
+#if LV_SPRINTF_CUSTOM
+# define LV_SPRINTF_INCLUDE
+# define lv_snprintf snprintf
+# define lv_vsnprintf vsnprintf
+#endif /*LV_SPRINTF_CUSTOM*/
+
/*===================
* LV_OBJ SETTINGS
*==================*/
@@ -355,6 +448,9 @@ typedef void * lv_obj_user_data_t;
/*Container (dependencies: -*/
#define LV_USE_CONT 1
+/*Color picker (dependencies: -*/
+#define LV_USE_CPICKER 1
+
/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/
#define LV_USE_DDLIST 1
#if LV_USE_DDLIST != 0
@@ -410,6 +506,9 @@ typedef void * lv_obj_user_data_t;
/*Line meter (dependencies: *;)*/
#define LV_USE_LMETER 1
+/*Mask (dependencies: -)*/
+#define LV_USE_OBJMASK 0
+
/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/
#define LV_USE_MBOX 1
diff --git a/lvgl.h b/lvgl.h
index b6e29b61b..761951154 100644
--- a/lvgl.h
+++ b/lvgl.h
@@ -14,8 +14,6 @@ extern "C" {
* INCLUDES
*********************/
-#include "src/lv_version.h"
-
#include "src/lv_misc/lv_log.h"
#include "src/lv_misc/lv_task.h"
#include "src/lv_misc/lv_math.h"
@@ -25,14 +23,18 @@ extern "C" {
#include "src/lv_core/lv_obj.h"
#include "src/lv_core/lv_group.h"
+#include "src/lv_core/lv_indev.h"
#include "src/lv_core/lv_refr.h"
#include "src/lv_core/lv_disp.h"
+#include "src/lv_core/lv_debug.h"
#include "src/lv_themes/lv_theme.h"
#include "src/lv_font/lv_font.h"
#include "src/lv_font/lv_font_fmt_txt.h"
+#include "src/lv_misc/lv_bidi.h"
+#include "src/lv_misc/lv_printf.h"
#include "src/lv_objx/lv_btn.h"
#include "src/lv_objx/lv_imgbtn.h"
@@ -45,6 +47,7 @@ extern "C" {
#include "src/lv_objx/lv_chart.h"
#include "src/lv_objx/lv_table.h"
#include "src/lv_objx/lv_cb.h"
+#include "src/lv_objx/lv_cpicker.h"
#include "src/lv_objx/lv_bar.h"
#include "src/lv_objx/lv_slider.h"
#include "src/lv_objx/lv_led.h"
@@ -58,6 +61,7 @@ extern "C" {
#include "src/lv_objx/lv_tabview.h"
#include "src/lv_objx/lv_tileview.h"
#include "src/lv_objx/lv_mbox.h"
+#include "src/lv_objx/lv_objmask.h"
#include "src/lv_objx/lv_gauge.h"
#include "src/lv_objx/lv_lmeter.h"
#include "src/lv_objx/lv_sw.h"
@@ -69,9 +73,16 @@ extern "C" {
#include "src/lv_draw/lv_img_cache.h"
+#include "src/lv_api_map.h"
+
/*********************
* DEFINES
*********************/
+/*Current version of LittlevGL*/
+#define LVGL_VERSION_MAJOR 7
+#define LVGL_VERSION_MINOR 0
+#define LVGL_VERSION_PATCH 0
+#define LVGL_VERSION_INFO "dev"
/**********************
* TYPEDEFS
@@ -85,6 +96,30 @@ extern "C" {
* MACROS
**********************/
+/** Gives 1 if the x.y.z version is supported in the current version
+ * Usage:
+ *
+ * - Require v6
+ * #if LV_VERSION_CHECK(6,0,0)
+ * new_func_in_v6();
+ * #endif
+ *
+ *
+ * - Require at least v5.3
+ * #if LV_VERSION_CHECK(5,3,0)
+ * new_feature_from_v5_3();
+ * #endif
+ *
+ *
+ * - Require v5.3.2 bugfixes
+ * #if LV_VERSION_CHECK(5,3,2)
+ * bugfix_in_v5_3_2();
+ * #endif
+ *
+ * */
+#define LV_VERSION_CHECK(x,y,z) (x == LVGL_VERSION_MAJOR && (y < LVGL_VERSION_MINOR || (y == LVGL_VERSION_MINOR && z <= LVGL_VERSION_PATCH)))
+
+
#ifdef __cplusplus
}
#endif
diff --git a/scripts/built_in_font/FontAwesome.ttf b/scripts/built_in_font/FontAwesome.ttf
deleted file mode 100644
index 35acda2fa..000000000
Binary files a/scripts/built_in_font/FontAwesome.ttf and /dev/null differ
diff --git a/scripts/built_in_font/FontAwesome5-Solid+Brands+Regular.woff b/scripts/built_in_font/FontAwesome5-Solid+Brands+Regular.woff
new file mode 100644
index 000000000..791b41013
Binary files /dev/null and b/scripts/built_in_font/FontAwesome5-Solid+Brands+Regular.woff differ
diff --git a/scripts/built_in_font/built_in_font_gen.py b/scripts/built_in_font/built_in_font_gen.py
index 1f5d64b1b..db8e88c13 100644
--- a/scripts/built_in_font/built_in_font_gen.py
+++ b/scripts/built_in_font/built_in_font_gen.py
@@ -40,8 +40,8 @@ else:
compr = ""
#Built in symbols
-syms = "61441,61448,61451,61452,61453,61457,61459,61460,61461,61465,61468,61473,61478,61479,61480,61502,61504,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62099"
+syms = "61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650"
#Run the command
-cmd = "lv_font_conv {} --bpp {} --size {} --font ./Roboto-Regular.woff -r {} --font FontAwesome.ttf -r {} --format lvgl -o {} --force-fast-kern-format".format(compr, args.bpp, args.size, args.range[0], syms, args.output)
+cmd = "lv_font_conv {} --bpp {} --size {} --font Roboto-Regular.woff -r {} --font FontAwesome5-Solid+Brands+Regular.woff -r {} --format lvgl -o {} --force-fast-kern-format".format(compr, args.bpp, args.size, args.range[0], syms, args.output)
os.system(cmd)
diff --git a/scripts/lv_conf_checker.py b/scripts/lv_conf_checker.py
old mode 100644
new mode 100755
index 7929dcf52..c2171ff8a
--- a/scripts/lv_conf_checker.py
+++ b/scripts/lv_conf_checker.py
@@ -1,3 +1,5 @@
+#!/usr/bin/env python3.6
+
'''
Generates a checker file for lv_conf.h from lv_conf_templ.h define all the not defined values
'''
@@ -34,9 +36,11 @@ for i in fin.read().splitlines():
if '/*--END OF LV_CONF_H--*/' in i: break
r = re.search(r'^ *# *define ([^\s]+).*$', i)
+
if r:
+ line = re.sub('\(.*?\)', '', r[1], 1) #remove parentheses from macros
fout.write(
- f'#ifndef {r[1]}\n'
+ f'#ifndef {line}\n'
f'{i}\n'
'#endif\n'
)
diff --git a/src/lv_api_map.h b/src/lv_api_map.h
new file mode 100644
index 000000000..18164398e
--- /dev/null
+++ b/src/lv_api_map.h
@@ -0,0 +1,132 @@
+/**
+ * @file lv_api_map.h
+ *
+ */
+
+#ifndef LV_API_MAP_H
+#define LV_API_MAP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lvgl/lvgl.h"
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/*---------------------
+ * V6.0 COMPATIBILITY
+ *--------------------*/
+
+
+#if LV_USE_ARC
+
+
+static inline void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end)
+{
+ lv_arc_set_start_angle(arc, start);
+ lv_arc_set_end_angle(arc, end);
+}
+
+#endif
+
+#if LV_USE_CHART
+
+#define lv_chart_get_point_cnt lv_chart_get_point_count
+
+#endif
+
+
+#if LV_USE_DDLIST
+
+static inline void lv_ddlist_set_draw_arrow(lv_obj_t * ddlist, bool en)
+{
+ if(en) lv_ddlist_set_symbol(ddlist, LV_SYMBOL_DOWN);
+ else lv_ddlist_set_symbol(ddlist, NULL);
+}
+
+static inline bool lv_ddlist_get_draw_arrow(lv_obj_t * ddlist)
+{
+ if(lv_ddlist_get_symbol(ddlist)) return true;
+ else return false;
+}
+
+#endif
+
+#if LV_USE_BAR
+
+/**
+ * Make the bar symmetric to zero. The indicator will grow from zero instead of the minimum
+ * position.
+ * @param bar pointer to a bar object
+ * @param en true: enable disable symmetric behavior; false: disable
+ * @deprecated As of v7.0, you should use `lv_bar_set_type` instead.
+ */
+static inline void lv_bar_set_sym(lv_obj_t * bar, bool en)
+{
+ if(en)
+ lv_bar_set_type(bar, LV_BAR_TYPE_SYM);
+ else
+ lv_bar_set_type(bar, LV_BAR_TYPE_NORMAL);
+}
+
+/**
+ * Get whether the bar is symmetric or not.
+ * @param bar pointer to a bar object
+ * @return true: symmetric is enabled; false: disable
+ * @deprecated As of v7.0, you should use `lv_bar_get_type` instead.
+ */
+static inline bool lv_bar_get_sym(lv_obj_t * bar) {
+ return lv_bar_get_type(bar) == LV_BAR_TYPE_SYM;
+}
+
+#endif
+
+#if LV_USE_SLIDER
+
+/**
+ * Make the slider symmetric to zero. The indicator will grow from zero instead of the minimum
+ * position.
+ * @param slider pointer to a bar object
+ * @param en true: enable disable symmetric behavior; false: disable
+ * @deprecated As of v7.0, you should use `lv_slider_set_type` instead.
+ */
+static inline void lv_slider_set_sym(lv_obj_t * slider, bool en)
+{
+ lv_bar_set_sym(slider, en);
+}
+
+/**
+ * Get whether the slider is symmetric or not.
+ * @param slider pointer to a slider object
+ * @return true: symmetric is enabled; false: disable
+ * @deprecated As of v7.0, you should use `lv_slider_get_type` instead.
+ */
+static inline bool lv_slider_get_sym(lv_obj_t * slider) {
+ return lv_bar_get_sym(slider);
+}
+
+#endif
+
+/**********************
+ * MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_API_MAP_H*/
diff --git a/src/lv_conf_checker.h b/src/lv_conf_checker.h
index ff7ac05df..4b0d9a67d 100644
--- a/src/lv_conf_checker.h
+++ b/src/lv_conf_checker.h
@@ -50,6 +50,11 @@
#define LV_COLOR_TRANSP LV_COLOR_LIME /*LV_COLOR_LIME: pure green*/
#endif
+/* Enable chroma keying for indexed images. */
+#ifndef LV_INDEXED_CHROMA
+#define LV_INDEXED_CHROMA 1
+#endif
+
/* Enable anti-aliasing (lines, and radiuses will be smoothed) */
#ifndef LV_ANTIALIAS
#define LV_ANTIALIAS 1
@@ -261,6 +266,16 @@
#define LV_ATTRIBUTE_LARGE_CONST
#endif
+/* Export integer constant to binding.
+ * This macro is used with constants in the form of LV_ that
+ * should also appear on lvgl binding API such as Micropython
+ *
+ * The default value just prevents a GCC warning.
+ */
+#ifndef LV_EXPORT_CONST_INT
+#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning
+#endif
+
/*===================
* HAL settings
*==================*/
@@ -301,12 +316,60 @@
#endif
/* 1: Print the log with 'printf';
- * 0: user need to register a callback with `lv_log_register_print`*/
+ * 0: user need to register a callback with `lv_log_register_print_cb`*/
#ifndef LV_LOG_PRINTF
# define LV_LOG_PRINTF 0
#endif
#endif /*LV_USE_LOG*/
+/*=================
+ * Debug settings
+ *================*/
+
+/* If Debug is enabled LittelvGL validates the parameters of the functions.
+ * If an invalid parameter is found an error log message is printed and
+ * the MCU halts at the error. (`LV_USE_LOG` should be enabled)
+ * If you are debugging the MCU you can pause
+ * the debugger to see exactly where the issue is.
+ *
+ * The behavior of asserts can be overwritten by redefining them here.
+ * E.g. #define LV_ASSERT_MEM(p)
+ */
+#ifndef LV_USE_DEBUG
+#define LV_USE_DEBUG 1
+#endif
+#if LV_USE_DEBUG
+
+/*Check if the parameter is NULL. (Quite fast) */
+#ifndef LV_USE_ASSERT_NULL
+#define LV_USE_ASSERT_NULL 1
+#endif
+
+/*Checks is the memory is successfully allocated or no. (Quite fast)*/
+#ifndef LV_USE_ASSERT_MEM
+#define LV_USE_ASSERT_MEM 1
+#endif
+
+/* Check the strings.
+ * Search for NULL, very long strings, invalid characters, and unnatural repetitions. (Slow)
+ * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */
+#ifndef LV_USE_ASSERT_STR
+#define LV_USE_ASSERT_STR 0
+#endif
+
+/* Check NULL, the object's type and existence (e.g. not deleted). (Quite slow)
+ * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */
+#ifndef LV_USE_ASSERT_OBJ
+#define LV_USE_ASSERT_OBJ 0
+#endif
+
+/*Check if the styles are properly initialized. (Fast)*/
+#ifndef LV_USE_ASSERT_STYLE
+#define LV_USE_ASSERT_STYLE 1
+#endif
+
+#endif /*LV_USE_DEBUG*/
+
/*================
* THEME USAGE
*================*/
@@ -364,6 +427,14 @@
#define LV_FONT_ROBOTO_28 0
#endif
+/* Demonstrate special features */
+#ifndef LV_FONT_ROBOTO_12_SUBPX
+#define LV_FONT_ROBOTO_12_SUBPX 1
+#endif
+#ifndef LV_FONT_ROBOTO_28_COMPRESSED
+#define LV_FONT_ROBOTO_28_COMPRESSED 1 /*bpp = 3*/
+#endif
+
/*Pixel perfect monospace font
* http://pelulamu.net/unscii/ */
#ifndef LV_FONT_UNSCII_8
@@ -392,6 +463,14 @@
#define LV_FONT_FMT_TXT_LARGE 0
#endif
+/* Set the pixel order of the display.
+ * Important only if "subpx fonts" are used.
+ * With "normal" font it doesn't matter.
+ */
+#ifndef LV_FONT_SUBPX_BGR
+#define LV_FONT_SUBPX_BGR 0
+#endif
+
/*Declare the type of the user data of fonts (can be e.g. `void *`, `int`, `struct`)*/
/*=================
@@ -412,6 +491,62 @@
#define LV_TXT_BREAK_CHARS " ,.;:-_"
#endif
+/* If a word is at least this long, will break wherever "prettiest"
+ * To disable, set to a value <= 0 */
+#ifndef LV_TXT_LINE_BREAK_LONG_LEN
+#define LV_TXT_LINE_BREAK_LONG_LEN 12
+#endif
+
+/* Minimum number of characters in a long word to put on a line before a break.
+ * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */
+#ifndef LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN
+#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3
+#endif
+
+/* Minimum number of characters in a long word to put on a line after a break.
+ * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */
+#ifndef LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN
+#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3
+#endif
+
+/* The control character to use for signalling text recoloring. */
+#ifndef LV_TXT_COLOR_CMD
+#define LV_TXT_COLOR_CMD "#"
+#endif
+
+/* Support bidirectional texts.
+ * Allows mixing Left-to-Right and Right-to-Left texts.
+ * The direction will be processed according to the Unicode Bidirectioanl Algorithm:
+ * https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/
+#ifndef LV_USE_BIDI
+#define LV_USE_BIDI 0
+#endif
+#if LV_USE_BIDI
+/* Set the default direction. Supported values:
+ * `LV_BIDI_DIR_LTR` Left-to-Right
+ * `LV_BIDI_DIR_RTL` Right-to-Left
+ * `LV_BIDI_DIR_AUTO` detect texts base direction */
+#ifndef LV_BIDI_BASE_DIR_DEF
+#define LV_BIDI_BASE_DIR_DEF LV_BIDI_DIR_AUTO
+#endif
+#endif
+
+/*Change the built in (v)snprintf functions*/
+#ifndef LV_SPRINTF_CUSTOM
+#define LV_SPRINTF_CUSTOM 0
+#endif
+#if LV_SPRINTF_CUSTOM
+#ifndef LV_SPRINTF_INCLUDE
+# define LV_SPRINTF_INCLUDE
+#endif
+#ifndef lv_snprintf
+# define lv_snprintf snprintf
+#endif
+#ifndef lv_vsnprintf
+# define lv_vsnprintf vsnprintf
+#endif
+#endif /*LV_SPRINTF_CUSTOM*/
+
/*===================
* LV_OBJ SETTINGS
*==================*/
@@ -495,6 +630,11 @@
#define LV_USE_CONT 1
#endif
+/*Color picker (dependencies: -*/
+#ifndef LV_USE_CPICKER
+#define LV_USE_CPICKER 1
+#endif
+
/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/
#ifndef LV_USE_DDLIST
#define LV_USE_DDLIST 1
diff --git a/src/lv_core/lv_core.mk b/src/lv_core/lv_core.mk
index 5cd51bfb5..eb1c5e0ca 100644
--- a/src/lv_core/lv_core.mk
+++ b/src/lv_core/lv_core.mk
@@ -4,6 +4,7 @@ CSRCS += lv_disp.c
CSRCS += lv_obj.c
CSRCS += lv_refr.c
CSRCS += lv_style.c
+CSRCS += lv_debug.c
DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_core
VPATH += :$(LVGL_DIR)/lvgl/src/lv_core
diff --git a/src/lv_core/lv_debug.c b/src/lv_core/lv_debug.c
new file mode 100644
index 000000000..83071af53
--- /dev/null
+++ b/src/lv_core/lv_debug.c
@@ -0,0 +1,193 @@
+/**
+ * @file lv_debug.c
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_obj.h"
+#include "lv_debug.h"
+
+#if LV_USE_DEBUG
+
+/*********************
+ * DEFINES
+ *********************/
+#ifndef LV_DEBUG_STR_MAX_LENGTH
+#define LV_DEBUG_STR_MAX_LENGTH (1024 * 8)
+#endif
+
+#ifndef LV_DEBUG_STR_MAX_REPEAT
+#define LV_DEBUG_STR_MAX_REPEAT 8
+#endif
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+static bool obj_valid_child(const lv_obj_t * parent, const lv_obj_t * obj_to_find);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+bool lv_debug_check_null(const void * p)
+{
+ if(p) return true;
+
+ return false;
+}
+
+bool lv_debug_check_obj_type(const lv_obj_t * obj, const char * obj_type)
+{
+ if(obj_type[0] == '\0') return true;
+
+ lv_obj_type_t types;
+ lv_obj_get_type((lv_obj_t *)obj, &types);
+
+ uint8_t i;
+ for(i = 0; i < LV_MAX_ANCESTOR_NUM; i++) {
+ if(strcmp(types.type[i], obj_type) == 0) return true;
+ }
+
+ return false;
+}
+
+bool lv_debug_check_obj_valid(const lv_obj_t * obj)
+{
+ lv_disp_t * disp = lv_disp_get_next(NULL);
+ while(disp) {
+ lv_obj_t * scr;
+ LV_LL_READ(disp->scr_ll, scr) {
+
+ if(scr == obj) return true;
+ bool found = obj_valid_child(scr, obj);
+ if(found) return true;
+ }
+
+ disp = lv_disp_get_next(disp);
+ }
+
+ return false;
+}
+
+bool lv_debug_check_style(const lv_style_t * style)
+{
+ if(style == NULL) return true; /*NULL style is still valid*/
+
+#if LV_USE_ASSERT_STYLE
+ if(style->debug_sentinel != LV_STYLE_DEGUG_SENTINEL_VALUE) {
+ LV_LOG_WARN("Invalid style (local variable or not initialized?)");
+ return false;
+ }
+#endif
+
+ return true;
+}
+
+bool lv_debug_check_str(const void * str)
+{
+ const uint8_t * s = (const uint8_t *)str;
+ uint8_t last_byte = 0;
+ uint32_t rep = 0;
+ uint32_t i;
+
+ for(i = 0; s[i] != '\0' && i < LV_DEBUG_STR_MAX_LENGTH; i++) {
+ if(s[i] != last_byte) {
+ last_byte = s[i];
+ rep = 1;
+ } else if(s[i] > 0x7F){
+ rep++;
+ if(rep > LV_DEBUG_STR_MAX_REPEAT) {
+ LV_LOG_WARN("lv_debug_check_str: a non-ASCII char has repeated more than LV_DEBUG_STR_MAX_REPEAT times)");
+ return false;
+ }
+ }
+
+ if(s[i] < 10) {
+ LV_LOG_WARN("lv_debug_check_str: invalid char in the string (< 10 value)");
+ return false; /*Shouldn't occur in strings*/
+ }
+ }
+
+ if(s[i] == '\0') return true;
+
+ LV_LOG_WARN("lv_debug_check_str: string is longer than LV_DEBUG_STR_MAX_LENGTH");
+ return false;
+}
+
+void lv_debug_log_error(const char * msg, uint64_t value)
+{
+ static const char hex[] = "0123456789ABCDEF";
+
+ size_t msg_len = strlen(msg);
+ uint32_t value_len = sizeof(unsigned long int);
+
+ if(msg_len < 230) {
+ char buf[255];
+ char * bufp = buf;
+
+ /*Add the function name*/
+ memcpy(bufp, msg, msg_len);
+ bufp += msg_len;
+
+ /*Add value in hey*/
+ *bufp = ' ';
+ bufp ++;
+ *bufp = '(';
+ bufp ++;
+ *bufp = '0';
+ bufp ++;
+ *bufp = 'x';
+ bufp ++;
+
+ int8_t i;
+ for(i = value_len * 2 - 1; i >= 0; i--) {
+ uint8_t x = (unsigned long int)((unsigned long int)value >> (i * 4)) & 0xF;
+
+ *bufp = hex[x];
+ bufp++;
+ }
+
+ *bufp = ')';
+ bufp ++;
+
+ *bufp = '\0';
+ LV_LOG_ERROR(buf);
+ } else {
+ LV_LOG_ERROR(msg);
+ }
+}
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+static bool obj_valid_child(const lv_obj_t * parent, const lv_obj_t * obj_to_find)
+{
+ /*Check all children of `parent`*/
+ lv_obj_t * child;
+ LV_LL_READ(parent->child_ll, child) {
+ if(child == obj_to_find) return true;
+
+ /*Check the children*/
+ bool found = obj_valid_child(child, obj_to_find);
+ if(found) return true;
+ }
+
+ return false;
+}
+
+#endif /*LV_USE_DEBUG*/
+
diff --git a/src/lv_core/lv_debug.h b/src/lv_core/lv_debug.h
new file mode 100644
index 000000000..9c5888cb0
--- /dev/null
+++ b/src/lv_core/lv_debug.h
@@ -0,0 +1,154 @@
+/**
+ * @file lv_debug.h
+ *
+ */
+
+#ifndef LV_DEBUG_H
+#define LV_DEBUG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_obj.h"
+
+#if LV_USE_DEBUG
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+bool lv_debug_check_null(const void * p);
+
+bool lv_debug_check_obj_type(const lv_obj_t * obj, const char * obj_type);
+
+bool lv_debug_check_obj_valid(const lv_obj_t * obj);
+
+bool lv_debug_check_style(const lv_style_t * style);
+
+bool lv_debug_check_str(const void * str);
+
+void lv_debug_log_error(const char * msg, uint64_t value);
+
+/**********************
+ * MACROS
+ **********************/
+
+#ifndef LV_DEBUG_ASSERT
+#define LV_DEBUG_ASSERT(expr, msg, value) \
+do { \
+ if(!(expr)) { \
+ LV_LOG_ERROR(__func__); \
+ lv_debug_log_error(msg, (uint64_t)((uintptr_t)value)); \
+ while(1); \
+ } \
+} while(0)
+#endif
+
+/*----------------
+ * CHECKS
+ *----------------*/
+
+#ifndef LV_DEBUG_IS_NULL
+#define LV_DEBUG_IS_NULL(p) (lv_debug_check_null(p))
+#endif
+
+#ifndef LV_DEBUG_IS_STR
+#define LV_DEBUG_IS_STR(str) (lv_debug_check_null(str) && \
+ lv_debug_check_str(str))
+#endif
+
+#ifndef LV_DEBUG_IS_OBJ
+#define LV_DEBUG_IS_OBJ(obj_p, obj_type) (lv_debug_check_null(obj_p) && \
+ lv_debug_check_obj_valid(obj_p) && \
+ lv_debug_check_obj_type(obj_p, obj_type))
+#endif
+
+#ifndef LV_DEBUG_IS_STYLE
+#define LV_DEBUG_IS_STYLE(style_p) (lv_debug_check_style(style_p))
+#endif
+
+/*-----------------
+ * ASSERTS
+ *-----------------*/
+
+/*clang-format off*/
+
+#if LV_USE_ASSERT_NULL
+# ifndef LV_ASSERT_NULL
+# define LV_ASSERT_NULL(p) LV_DEBUG_ASSERT(LV_DEBUG_IS_NULL(p), "NULL pointer", p);
+# endif
+#else
+# define LV_ASSERT_NULL(p) true
+#endif
+
+#if LV_USE_ASSERT_MEM
+# ifndef LV_ASSERT_MEM
+# define LV_ASSERT_MEM(p) LV_DEBUG_ASSERT(LV_DEBUG_IS_NULL(p), "Out of memory", p);
+# endif
+#else
+# define LV_ASSERT_MEM(p) true
+#endif
+
+#if LV_USE_ASSERT_STR
+# ifndef LV_ASSERT_STR
+# define LV_ASSERT_STR(str) LV_DEBUG_ASSERT(LV_DEBUG_IS_STR(str), "Strange or invalid string", str);
+# endif
+#else /* LV_USE_ASSERT_OBJ == 0 */
+# if LV_USE_ASSERT_NULL /*Use at least LV_ASSERT_NULL if enabled*/
+# define LV_ASSERT_STR(str) LV_ASSERT_NULL(str)
+# else
+# define LV_ASSERT_STR(str) true
+# endif
+#endif
+
+
+#if LV_USE_ASSERT_OBJ
+# ifndef LV_ASSERT_OBJ
+# define LV_ASSERT_OBJ(obj_p, obj_type) LV_DEBUG_ASSERT(LV_DEBUG_IS_OBJ(obj_p, obj_type), "Invalid object", obj_p);
+# endif
+#else /* LV_USE_ASSERT_OBJ == 0 */
+# if LV_USE_ASSERT_NULL /*Use at least LV_ASSERT_NULL if enabled*/
+# define LV_ASSERT_OBJ(obj_p, obj_type) LV_ASSERT_NULL(obj_p)
+# else
+# define LV_ASSERT_OBJ(obj_p, obj_type) true
+# endif
+#endif
+
+
+#if LV_USE_ASSERT_STYLE
+# ifndef LV_ASSERT_STYLE
+# define LV_ASSERT_STYLE(style_p) LV_DEBUG_ASSERT(LV_DEBUG_IS_STYLE(style_p), "Invalid style", style_p);
+# endif
+#else
+# define LV_ASSERT_STYLE(style) true
+#endif
+
+#else /* LV_USE_DEBUG == 0 */
+
+#define LV_DEBUG_ASSERT(expr, msg, value) do{}while(0)
+
+#define LV_ASSERT_NULL(p) true
+#define LV_ASSERT_MEM(p) true
+#define LV_ASSERT_STR(p) true
+#define LV_ASSERT_OBJ(obj, obj_type) true
+#define LV_ASSERT_STYLE(p) true
+
+#endif /* LV_USE_DEBUG */
+/*clang-format on*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_DEBUG_H*/
diff --git a/src/lv_core/lv_disp.h b/src/lv_core/lv_disp.h
index 8f8f512c8..304715435 100644
--- a/src/lv_core/lv_disp.h
+++ b/src/lv_core/lv_disp.h
@@ -109,7 +109,7 @@ static inline lv_obj_t * lv_layer_top(void)
}
/**
- * Get the active screen of the deafult display
+ * Get the active screen of the default display
* @return pointer to the sys layer
*/
static inline lv_obj_t * lv_layer_sys(void)
diff --git a/src/lv_core/lv_group.c b/src/lv_core/lv_group.c
index d04de3eb3..fc8bfda49 100644
--- a/src/lv_core/lv_group.c
+++ b/src/lv_core/lv_group.c
@@ -8,8 +8,9 @@
*********************/
#include "lv_group.h"
#if LV_USE_GROUP != 0
-#include "../lv_themes/lv_theme.h"
#include
+#include "../lv_core/lv_debug.h"
+#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_gc.h"
#if defined(LV_GC_INCLUDE)
@@ -62,7 +63,7 @@ void lv_group_init(void)
lv_group_t * lv_group_create(void)
{
lv_group_t * group = lv_ll_ins_head(&LV_GC_ROOT(_lv_group_ll));
- lv_mem_assert(group);
+ LV_ASSERT_MEM(group);
if(group == NULL) return NULL;
lv_ll_init(&group->obj_ll, sizeof(lv_obj_t *));
@@ -104,7 +105,7 @@ void lv_group_del(lv_group_t * group)
}
lv_ll_clear(&(group->obj_ll));
- lv_ll_rem(&LV_GC_ROOT(_lv_group_ll), group);
+ lv_ll_remove(&LV_GC_ROOT(_lv_group_ll), group);
lv_mem_free(group);
}
@@ -138,7 +139,7 @@ void lv_group_add_obj(lv_group_t * group, lv_obj_t * obj)
obj->group_p = group;
lv_obj_t ** next = lv_ll_ins_tail(&group->obj_ll);
- lv_mem_assert(next);
+ LV_ASSERT_MEM(next);
if(next == NULL) return;
*next = obj;
@@ -183,7 +184,7 @@ void lv_group_remove_obj(lv_obj_t * obj)
LV_LL_READ(g->obj_ll, i)
{
if(*i == obj) {
- lv_ll_rem(&g->obj_ll, i);
+ lv_ll_remove(&g->obj_ll, i);
lv_mem_free(i);
obj->group_p = NULL;
break;
diff --git a/src/lv_core/lv_indev.c b/src/lv_core/lv_indev.c
index 6ec59bdac..45496a1eb 100644
--- a/src/lv_core/lv_indev.c
+++ b/src/lv_core/lv_indev.c
@@ -40,8 +40,9 @@ static void indev_proc_press(lv_indev_proc_t * proc);
static void indev_proc_release(lv_indev_proc_t * proc);
static void indev_proc_reset_query_handler(lv_indev_t * indev);
static lv_obj_t * indev_search_obj(const lv_indev_proc_t * proc, lv_obj_t * obj);
-static void indev_drag(lv_indev_proc_t * state);
+static void indev_drag(lv_indev_proc_t * proc);
static void indev_drag_throw(lv_indev_proc_t * proc);
+static lv_obj_t * get_dragged_obj(lv_obj_t * obj);
static bool indev_reset_check(lv_indev_proc_t * proc);
/**********************
@@ -291,6 +292,36 @@ void lv_indev_get_vect(const lv_indev_t * indev, lv_point_t * point)
}
}
+/**
+ * Manually finish dragging.
+ * `LV_SIGNAL_DRAG_END` and `LV_EVENT_DRAG_END` will be sent.
+ * @param indev pointer to an input device
+ * @return `LV_RES_INV` if the object being dragged was deleted. Else `LV_RES_OK`.
+ */
+lv_res_t lv_indev_finish_drag(lv_indev_t * indev)
+{
+ if(indev == NULL) return LV_RES_OK;
+ if(indev->driver.type != LV_INDEV_TYPE_POINTER) return LV_RES_OK;
+ if(indev->proc.types.pointer.drag_in_prog == 0) return LV_RES_OK;
+
+ indev->proc.types.pointer.drag_in_prog = 0;
+ indev->proc.types.pointer.drag_throw_vect.x = 0;
+ indev->proc.types.pointer.drag_throw_vect.y = 0;
+
+ lv_obj_t * drag_obj;
+ drag_obj = get_dragged_obj(indev->proc.types.pointer.act_obj);
+ if(drag_obj == NULL) return LV_RES_OK;
+
+ lv_res_t res;
+ res = drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_END, NULL);
+ if(res != LV_RES_OK) return res;
+
+ res = lv_event_send(drag_obj, LV_EVENT_DRAG_END, NULL);
+ if(res != LV_RES_OK) return res;
+
+ return res;
+}
+
/**
* Do nothing until the next release
* @param indev pointer to an input device
@@ -691,17 +722,17 @@ static void indev_proc_press(lv_indev_proc_t * proc)
/*If there is no last object then search*/
if(indev_obj_act == NULL) {
- indev_obj_act = indev_search_obj(proc, lv_disp_get_layer_sys(disp));
- if(indev_obj_act == NULL) indev_obj_act = indev_search_obj(proc, lv_disp_get_layer_top(disp));
- if(indev_obj_act == NULL) indev_obj_act = indev_search_obj(proc, lv_disp_get_scr_act(disp));
+ indev_obj_act = lv_indev_search_obj(lv_disp_get_layer_sys(disp), &proc->types.pointer.act_point);
+ if(indev_obj_act == NULL) indev_obj_act = lv_indev_search_obj(lv_disp_get_layer_top(disp), &proc->types.pointer.act_point);
+ if(indev_obj_act == NULL) indev_obj_act = lv_indev_search_obj(lv_disp_get_scr_act(disp), &proc->types.pointer.act_point);
new_obj_searched = true;
}
/*If there is last object but it is not dragged and not protected also search*/
else if(proc->types.pointer.drag_in_prog == 0 &&
lv_obj_is_protected(indev_obj_act, LV_PROTECT_PRESS_LOST) == false) {
- indev_obj_act = indev_search_obj(proc, lv_disp_get_layer_sys(disp));
- if(indev_obj_act == NULL) indev_obj_act = indev_search_obj(proc, lv_disp_get_layer_top(disp));
- if(indev_obj_act == NULL) indev_obj_act = indev_search_obj(proc, lv_disp_get_scr_act(disp));
+ indev_obj_act = lv_indev_search_obj(lv_disp_get_layer_sys(disp), &proc->types.pointer.act_point);
+ if(indev_obj_act == NULL) indev_obj_act = lv_indev_search_obj(lv_disp_get_layer_top(disp), &proc->types.pointer.act_point);
+ if(indev_obj_act == NULL) indev_obj_act = lv_indev_search_obj(lv_disp_get_scr_act(disp), &proc->types.pointer.act_point);
new_obj_searched = true;
}
/*If a dragable or a protected object was the last then keep it*/
@@ -736,14 +767,14 @@ static void indev_proc_press(lv_indev_proc_t * proc)
proc->types.pointer.last_obj = indev_obj_act;
if(indev_obj_act != NULL) {
- /* Save the time when the obj pressed.
- * It is necessary to count the long press time.*/
+ /* Save the time when the obj pressed to count long press time.*/
proc->pr_timestamp = lv_tick_get();
proc->long_pr_sent = 0;
proc->types.pointer.drag_limit_out = 0;
proc->types.pointer.drag_in_prog = 0;
proc->types.pointer.drag_sum.x = 0;
proc->types.pointer.drag_sum.y = 0;
+ proc->types.pointer.drag_dir = LV_DRAG_DIR_NONE;
proc->types.pointer.vect.x = 0;
proc->types.pointer.vect.y = 0;
@@ -766,6 +797,7 @@ static void indev_proc_press(lv_indev_proc_t * proc)
lv_event_send(indev_obj_act, LV_EVENT_PRESSED, NULL);
if(indev_reset_check(proc)) return;
+ if(indev_act->proc.wait_until_release) return;
}
}
@@ -795,6 +827,7 @@ static void indev_proc_press(lv_indev_proc_t * proc)
if(indev_reset_check(proc)) return;
lv_event_send(indev_obj_act, LV_EVENT_PRESSING, NULL);
if(indev_reset_check(proc)) return;
+ if(indev_act->proc.wait_until_release) return;
indev_drag(proc);
if(indev_reset_check(proc)) return;
@@ -846,6 +879,7 @@ static void indev_proc_release(lv_indev_proc_t * proc)
/*Forget the act obj and send a released signal */
if(indev_obj_act) {
+
/* If the object was protected against press lost then it possible that
* the object is already not pressed but still it is the `act_obj`.
* In this case send the `LV_SIGNAL_RELEASED/CLICKED` instead of `LV_SIGNAL_PRESS_LOST` if
@@ -923,7 +957,7 @@ static void indev_proc_release(lv_indev_proc_t * proc)
#endif
/* Send defocus to the lastly "active" object and foucus to the new one.
- * DO not sent the events if they was sent by the click focus*/
+ * Do not send the events if they was sent by the click focus*/
if(proc->types.pointer.last_pressed != indev_obj_act && click_focus_sent == false) {
lv_event_send(proc->types.pointer.last_pressed, LV_EVENT_DEFOCUSED, NULL);
if(indev_reset_check(proc)) return;
@@ -938,13 +972,13 @@ static void indev_proc_release(lv_indev_proc_t * proc)
/*Send LV_EVENT_DRAG_THROW_BEGIN if required */
/*If drag parent is active check recursively the drag_parent attribute*/
- lv_obj_t * drag_obj = indev_obj_act;
- while(lv_obj_get_drag_parent(drag_obj) != false && drag_obj != NULL) {
- drag_obj = lv_obj_get_parent(drag_obj);
- }
+ lv_obj_t * drag_obj = get_dragged_obj(indev_obj_act);
if(drag_obj) {
if(lv_obj_get_drag_throw(drag_obj) && proc->types.pointer.drag_in_prog) {
+ if(drag_obj->signal_cb) drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_THROW_BEGIN, NULL);
+ if(indev_reset_check(proc)) return;
+
lv_event_send(drag_obj, LV_EVENT_DRAG_THROW_BEGIN, NULL);
if(indev_reset_check(proc)) return;
}
@@ -983,6 +1017,7 @@ static void indev_proc_reset_query_handler(lv_indev_t * indev)
indev->proc.longpr_rep_timestamp = 0;
indev->proc.types.pointer.drag_sum.x = 0;
indev->proc.types.pointer.drag_sum.y = 0;
+ indev->proc.types.pointer.drag_dir = LV_DRAG_DIR_NONE;
indev->proc.types.pointer.drag_throw_vect.x = 0;
indev->proc.types.pointer.drag_throw_vect.y = 0;
indev->proc.reset_query = 0;
@@ -990,12 +1025,12 @@ static void indev_proc_reset_query_handler(lv_indev_t * indev)
}
}
/**
- * Search the most top, clickable object on the last point of an input device
- * @param proc pointer to the `lv_indev_proc_t` part of the input device
+ * Search the most top, clickable object by a point
* @param obj pointer to a start object, typically the screen
+ * @param point pointer to a point for searhing the most top child
* @return pointer to the found object or NULL if there was no suitable object
*/
-static lv_obj_t * indev_search_obj(const lv_indev_proc_t * proc, lv_obj_t * obj)
+lv_obj_t * lv_indev_search_obj(lv_obj_t * obj, lv_point_t *point)
{
lv_obj_t * found_p = NULL;
@@ -1007,7 +1042,7 @@ static lv_obj_t * indev_search_obj(const lv_indev_proc_t * proc, lv_obj_t * obj)
ext_area.y1 = obj->coords.y1 - obj->ext_click_pad_ver;
ext_area.y2 = obj->coords.y2 + obj->ext_click_pad_ver;
- if(lv_area_is_point_on(&ext_area, &proc->types.pointer.act_point)) {
+ if(lv_area_is_point_on(&ext_area, point)) {
#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
lv_area_t ext_area;
ext_area.x1 = obj->coords.x1 - obj->ext_click_pad.x1;
@@ -1015,15 +1050,15 @@ static lv_obj_t * indev_search_obj(const lv_indev_proc_t * proc, lv_obj_t * obj)
ext_area.y1 = obj->coords.y1 - obj->ext_click_pad.y1;
ext_area.y2 = obj->coords.y2 + obj->ext_click_pad.y2;
- if(lv_area_is_point_on(&ext_area, &proc->types.pointer.act_point)) {
+ if(lv_area_is_point_on(&ext_area, point)) {
#else
- if(lv_area_is_point_on(&obj->coords, &proc->types.pointer.act_point)) {
+ if(lv_area_is_point_on(&obj->coords, point)) {
#endif
lv_obj_t * i;
LV_LL_READ(obj->child_ll, i)
{
- found_p = indev_search_obj(proc, i);
+ found_p = lv_indev_search_obj(i, point);
/*If a child was found then break*/
if(found_p != NULL) {
@@ -1051,42 +1086,54 @@ static lv_obj_t * indev_search_obj(const lv_indev_proc_t * proc, lv_obj_t * obj)
* Handle the dragging of indev_proc_p->types.pointer.act_obj
* @param indev pointer to a input device state
*/
-static void indev_drag(lv_indev_proc_t * state)
+static void indev_drag(lv_indev_proc_t * proc)
{
- lv_obj_t * drag_obj = state->types.pointer.act_obj;
+ lv_obj_t * drag_obj = get_dragged_obj(proc->types.pointer.act_obj);
bool drag_just_started = false;
- /*If drag parent is active check recursively the drag_parent attribute*/
- while(lv_obj_get_drag_parent(drag_obj) != false && drag_obj != NULL) {
- drag_obj = lv_obj_get_parent(drag_obj);
- }
-
if(drag_obj == NULL) return;
if(lv_obj_get_drag(drag_obj) == false) return;
+
lv_drag_dir_t allowed_dirs = lv_obj_get_drag_dir(drag_obj);
/*Count the movement by drag*/
- state->types.pointer.drag_sum.x += state->types.pointer.vect.x;
- state->types.pointer.drag_sum.y += state->types.pointer.vect.y;
+ if(proc->types.pointer.drag_limit_out == 0) {
+ proc->types.pointer.drag_sum.x += proc->types.pointer.vect.x;
+ proc->types.pointer.drag_sum.y += proc->types.pointer.vect.y;
+
+ /*Enough move?*/
+ bool hor_en = false;
+ bool ver_en = false;
+ if(allowed_dirs == LV_DRAG_DIR_HOR || allowed_dirs == LV_DRAG_DIR_BOTH) {
+ hor_en = true;
+ }
+
+ if(allowed_dirs == LV_DRAG_DIR_VER || allowed_dirs == LV_DRAG_DIR_BOTH) {
+ ver_en = true;
+ }
+
+ if(allowed_dirs == LV_DRAG_DIR_ONE) {
+ if(LV_MATH_ABS(proc->types.pointer.drag_sum.x) > LV_MATH_ABS(proc->types.pointer.drag_sum.y)) {
+ hor_en = true;
+ } else {
+ ver_en = true;
+ }
+ }
- /*Enough move?*/
- if(state->types.pointer.drag_limit_out == 0) {
/*If a move is greater then LV_DRAG_LIMIT then begin the drag*/
- if(((allowed_dirs & LV_DRAG_DIR_HOR) &&
- LV_MATH_ABS(state->types.pointer.drag_sum.x) >= indev_act->driver.drag_limit) ||
- ((allowed_dirs & LV_DRAG_DIR_VER) &&
- LV_MATH_ABS(state->types.pointer.drag_sum.y) >= indev_act->driver.drag_limit)) {
- state->types.pointer.drag_limit_out = 1;
+ if((hor_en && LV_MATH_ABS(proc->types.pointer.drag_sum.x) >= indev_act->driver.drag_limit) ||
+ (ver_en && LV_MATH_ABS(proc->types.pointer.drag_sum.y) >= indev_act->driver.drag_limit)) {
+ proc->types.pointer.drag_limit_out = 1;
drag_just_started = true;
}
}
/*If the drag limit is exceeded handle the dragging*/
- if(state->types.pointer.drag_limit_out != 0) {
+ if(proc->types.pointer.drag_limit_out != 0) {
/*Set new position if the vector is not zero*/
- if(state->types.pointer.vect.x != 0 || state->types.pointer.vect.y != 0) {
+ if(proc->types.pointer.vect.x != 0 || proc->types.pointer.vect.y != 0) {
uint16_t inv_buf_size =
lv_disp_get_inv_buf_size(indev_act->driver.disp); /*Get the number of currently invalidated areas*/
@@ -1100,27 +1147,70 @@ static void indev_drag(lv_indev_proc_t * state)
lv_coord_t act_x = lv_obj_get_x(drag_obj);
lv_coord_t act_y = lv_obj_get_y(drag_obj);
- if(allowed_dirs == LV_DRAG_DIR_ALL) {
+ if(allowed_dirs == LV_DRAG_DIR_BOTH) {
if(drag_just_started) {
- act_x += state->types.pointer.drag_sum.x;
- act_y += state->types.pointer.drag_sum.y;
+ proc->types.pointer.drag_dir = LV_DRAG_DIR_BOTH;
+ act_x += proc->types.pointer.drag_sum.x;
+ act_y += proc->types.pointer.drag_sum.y;
}
- lv_obj_set_pos(drag_obj, act_x + state->types.pointer.vect.x, act_y + state->types.pointer.vect.y);
- } else if(allowed_dirs & LV_DRAG_DIR_HOR) {
+ lv_obj_set_pos(drag_obj, act_x + proc->types.pointer.vect.x, act_y + proc->types.pointer.vect.y);
+ } else if(allowed_dirs == LV_DRAG_DIR_HOR) {
if(drag_just_started) {
- act_x += state->types.pointer.drag_sum.x;
+ proc->types.pointer.drag_dir = LV_DRAG_DIR_HOR;
+ proc->types.pointer.drag_sum.y = 0;
+ act_x += proc->types.pointer.drag_sum.x;
}
- lv_obj_set_x(drag_obj, act_x + state->types.pointer.vect.x);
- } else if(allowed_dirs & LV_DRAG_DIR_VER) {
+ lv_obj_set_x(drag_obj, act_x + proc->types.pointer.vect.x);
+ } else if(allowed_dirs == LV_DRAG_DIR_VER) {
if(drag_just_started) {
- act_y += state->types.pointer.drag_sum.y;
+ proc->types.pointer.drag_dir = LV_DRAG_DIR_VER;
+ proc->types.pointer.drag_sum.x = 0;
+ act_y += proc->types.pointer.drag_sum.y;
}
- lv_obj_set_y(drag_obj, act_y + state->types.pointer.vect.y);
+ lv_obj_set_y(drag_obj, act_y + proc->types.pointer.vect.y);
+ } else if(allowed_dirs == LV_DRAG_DIR_ONE) {
+ if(drag_just_started) {
+ if(LV_MATH_ABS(proc->types.pointer.drag_sum.x) > LV_MATH_ABS(proc->types.pointer.drag_sum.y)) {
+ proc->types.pointer.drag_dir = LV_DRAG_DIR_HOR;
+ proc->types.pointer.drag_sum.y = 0;
+ act_x += proc->types.pointer.drag_sum.x;
+ } else {
+ proc->types.pointer.drag_dir = LV_DRAG_DIR_VER;
+ proc->types.pointer.drag_sum.x = 0;
+ act_y += proc->types.pointer.drag_sum.y;
+ }
+ }
+ }
+
+ /*Move the object*/
+ if(allowed_dirs == LV_DRAG_DIR_HOR ||
+ allowed_dirs == LV_DRAG_DIR_BOTH ||
+ (allowed_dirs == LV_DRAG_DIR_ONE &&
+ LV_MATH_ABS(proc->types.pointer.drag_sum.x) > LV_MATH_ABS(proc->types.pointer.drag_sum.y))) {
+ act_x += proc->types.pointer.vect.x;
+ }
+ if(allowed_dirs == LV_DRAG_DIR_VER ||
+ allowed_dirs == LV_DRAG_DIR_BOTH ||
+ (allowed_dirs == LV_DRAG_DIR_ONE &&
+ LV_MATH_ABS(proc->types.pointer.drag_sum.x) < LV_MATH_ABS(proc->types.pointer.drag_sum.y))) {
+ act_y += proc->types.pointer.vect.y;
+ }
+
+ lv_obj_set_pos(drag_obj, act_x, act_y);
+ proc->types.pointer.drag_in_prog = 1;
+
+ /*Set the drag in progress flag*/
+ /*Send the drag begin signal on first move*/
+ if(drag_just_started) {
+ drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_BEGIN, indev_act);
+ if(indev_reset_check(proc)) return;
+
+ lv_event_send(drag_obj, LV_EVENT_DRAG_BEGIN, NULL);
+ if(indev_reset_check(proc)) return;
}
/*If the object didn't moved then clear the invalidated areas*/
if(drag_obj->coords.x1 == prev_x && drag_obj->coords.y1 == prev_y) {
-// state->types.pointer.drag_in_prog = 0;
/*In a special case if the object is moved on a page and
* the scrollable has fit == true and the object is dragged of the page then
* while its coordinate is not changing only the parent's size is reduced */
@@ -1130,16 +1220,6 @@ static void indev_drag(lv_indev_proc_t * state)
uint16_t new_inv_buf_size = lv_disp_get_inv_buf_size(indev_act->driver.disp);
lv_disp_pop_from_inv_buf(indev_act->driver.disp, new_inv_buf_size - inv_buf_size);
}
- } else {
- state->types.pointer.drag_in_prog = 1;
- /*Set the drag in progress flag*/
- /*Send the drag begin signal on first move*/
- if(drag_just_started) {
- drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_BEGIN, indev_act);
- if(indev_reset_check(state)) return;
- lv_event_send(drag_obj, LV_EVENT_DRAG_BEGIN, NULL);
- if(indev_reset_check(state)) return;
- }
}
}
}
@@ -1153,22 +1233,14 @@ static void indev_drag_throw(lv_indev_proc_t * proc)
{
if(proc->types.pointer.drag_in_prog == 0) return;
- lv_obj_t * drag_obj = proc->types.pointer.last_obj;
+ lv_obj_t * drag_obj = get_dragged_obj(proc->types.pointer.last_obj);
- /*If drag parent is active check recursively the drag_parent attribute*/
- while(lv_obj_get_drag_parent(drag_obj) != false && drag_obj != NULL) {
- drag_obj = lv_obj_get_parent(drag_obj);
- }
-
- if(drag_obj == NULL) {
- return;
- }
+ if(drag_obj == NULL) return;
/*Return if the drag throw is not enabled*/
if(lv_obj_get_drag_throw(drag_obj) == false) {
proc->types.pointer.drag_in_prog = 0;
drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_END, indev_act);
- lv_event_send(drag_obj, LV_EVENT_DRAG_END, NULL);
if(indev_reset_check(proc)) return;
lv_event_send(drag_obj, LV_EVENT_DRAG_END, NULL);
@@ -1190,13 +1262,13 @@ static void indev_drag_throw(lv_indev_proc_t * proc)
lv_coord_t act_x = lv_obj_get_x(drag_obj) + proc->types.pointer.drag_throw_vect.x;
lv_coord_t act_y = lv_obj_get_y(drag_obj) + proc->types.pointer.drag_throw_vect.y;
- if(allowed_dirs == LV_DRAG_DIR_ALL)
- lv_obj_set_pos(drag_obj, act_x, act_y);
- else if(allowed_dirs & LV_DRAG_DIR_HOR)
- lv_obj_set_x(drag_obj, act_x);
- else if(allowed_dirs & LV_DRAG_DIR_VER)
- lv_obj_set_y(drag_obj, act_y);
-
+ if(allowed_dirs == LV_DRAG_DIR_BOTH) lv_obj_set_pos(drag_obj, act_x, act_y);
+ else if(allowed_dirs == LV_DRAG_DIR_HOR) lv_obj_set_x(drag_obj, act_x);
+ else if(allowed_dirs == LV_DRAG_DIR_VER) lv_obj_set_y(drag_obj, act_y);
+ else if(allowed_dirs == LV_DRAG_DIR_ONE) {
+ if(proc->types.pointer.drag_sum.x) lv_obj_set_x(drag_obj, act_x);
+ else lv_obj_set_y(drag_obj, act_y);
+ }
lv_area_t coord_new;
lv_obj_get_coords(drag_obj, &coord_new);
@@ -1210,6 +1282,7 @@ static void indev_drag_throw(lv_indev_proc_t * proc)
proc->types.pointer.drag_throw_vect.y = 0;
drag_obj->signal_cb(drag_obj, LV_SIGNAL_DRAG_END, indev_act);
if(indev_reset_check(proc)) return;
+
lv_event_send(drag_obj, LV_EVENT_DRAG_END, NULL);
if(indev_reset_check(proc)) return;
}
@@ -1225,6 +1298,23 @@ static void indev_drag_throw(lv_indev_proc_t * proc)
}
}
+
+/**
+ * Get the really dragged object by taking `drag_parent` into account.
+ * @param obj the start obejct
+ * @return the object to really drag
+ */
+static lv_obj_t * get_dragged_obj(lv_obj_t * obj)
+{
+ if(obj == NULL) return NULL;
+ lv_obj_t * drag_obj = obj;
+ while(lv_obj_get_drag_parent(drag_obj) != false && drag_obj != NULL) {
+ drag_obj = lv_obj_get_parent(drag_obj);
+ }
+
+ return drag_obj;
+}
+
/**
* Checks if the reset_query flag has been set. If so, perform necessary global indev cleanup actions
* @param proc pointer to an input device 'proc'
diff --git a/src/lv_core/lv_indev.h b/src/lv_core/lv_indev.h
index 69ab5a410..21b8e844e 100644
--- a/src/lv_core/lv_indev.h
+++ b/src/lv_core/lv_indev.h
@@ -127,6 +127,14 @@ bool lv_indev_is_dragging(const lv_indev_t * indev);
*/
void lv_indev_get_vect(const lv_indev_t * indev, lv_point_t * point);
+/**
+ * Manually finish dragging.
+ * `LV_SIGNAL_DRAG_END` and `LV_EVENT_DRAG_END` will be sent.
+ * @param indev pointer to an input device
+ * @return `LV_RES_INV` if the object being dragged was deleted. Else `LV_RES_OK`.
+ */
+lv_res_t lv_indev_finish_drag(lv_indev_t * indev);
+
/**
* Do nothing until the next release
* @param indev pointer to an input device
@@ -148,6 +156,14 @@ lv_task_t * lv_indev_get_read_task(lv_disp_t * indev);
*/
lv_obj_t * lv_indev_get_obj_act(void);
+/**
+ * Search the most top, clickable object by a point
+ * @param obj pointer to a start object, typically the screen
+ * @param point pointer to a point for searhing the most top child
+ * @return pointer to the found object or NULL if there was no suitable object
+ */
+lv_obj_t * lv_indev_search_obj(lv_obj_t * obj, lv_point_t *point);
+
/**********************
* MACROS
**********************/
diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c
index e0ad6c42c..1d690e78f 100644
--- a/src/lv_core/lv_obj.c
+++ b/src/lv_core/lv_obj.c
@@ -11,16 +11,20 @@
#include "lv_refr.h"
#include "lv_group.h"
#include "lv_disp.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_misc/lv_anim.h"
#include "../lv_misc/lv_task.h"
#include "../lv_misc/lv_async.h"
#include "../lv_misc/lv_fs.h"
+#include "../lv_misc/lv_gc.h"
+#include "../lv_misc/lv_math.h"
+#include "../lv_misc/lv_gc.h"
+#include "../lv_misc/lv_math.h"
#include "../lv_hal/lv_hal.h"
#include
#include
-#include "../lv_misc/lv_gc.h"
#if defined(LV_GC_INCLUDE)
#include LV_GC_INCLUDE
@@ -29,6 +33,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_obj"
#define LV_OBJ_DEF_WIDTH (LV_DPI)
#define LV_OBJ_DEF_HEIGHT (2 * LV_DPI / 3)
@@ -49,9 +54,10 @@ static void refresh_children_position(lv_obj_t * obj, lv_coord_t x_diff, lv_coor
static void report_style_mod_core(void * style_p, lv_obj_t * obj);
static void refresh_children_style(lv_obj_t * obj);
static void delete_children(lv_obj_t * obj);
+static void base_dir_refr_children(lv_obj_t * obj);
static void lv_event_mark_deleted(lv_obj_t * obj);
static void lv_obj_del_async_cb(void * obj);
-static bool lv_obj_design(lv_obj_t * obj, const lv_area_t * mask_p, lv_design_mode_t mode);
+static lv_design_res_t lv_obj_design(lv_obj_t * obj, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param);
/**********************
@@ -142,12 +148,17 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
}
new_obj = lv_ll_ins_head(&disp->scr_ll);
- lv_mem_assert(new_obj);
+ LV_ASSERT_MEM(new_obj);
if(new_obj == NULL) return NULL;
new_obj->par = NULL; /*Screens has no a parent*/
lv_ll_init(&(new_obj->child_ll), sizeof(lv_obj_t));
+ /*Set the callbacks*/
+ new_obj->signal_cb = lv_obj_signal;
+ new_obj->design_cb = lv_obj_design;
+ new_obj->event_cb = NULL;
+
/*Set coordinates to full screen size*/
new_obj->coords.x1 = 0;
new_obj->coords.y1 = 0;
@@ -180,10 +191,6 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
} else {
new_obj->style_p = &lv_style_scr;
}
- /*Set the callbacks*/
- lv_obj_set_signal_cb(new_obj, lv_obj_signal);
- lv_obj_set_design_cb(new_obj, lv_obj_design);
- new_obj->event_cb = NULL;
/*Init. user date*/
#if LV_USE_USER_DATA
@@ -198,12 +205,19 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
new_obj->drag = 0;
new_obj->drag_throw = 0;
new_obj->drag_parent = 0;
+ new_obj->drag_dir = 0;
new_obj->hidden = 0;
new_obj->top = 0;
new_obj->protect = LV_PROTECT_NONE;
new_obj->opa_scale_en = 0;
new_obj->opa_scale = LV_OPA_COVER;
new_obj->parent_event = 0;
+#if LV_USE_BIDI
+ new_obj->base_dir = LV_BIDI_BASE_DIR_DEF;
+#else
+ new_obj->base_dir = LV_BIDI_DIR_LTR;
+#endif
+
new_obj->reserved = 0;
new_obj->ext_attr = NULL;
@@ -213,19 +227,36 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
/*parent != NULL create normal obj. on a parent*/
else {
LV_LOG_TRACE("Object create started");
+ LV_ASSERT_OBJ(parent, LV_OBJX_NAME);
new_obj = lv_ll_ins_head(&parent->child_ll);
- lv_mem_assert(new_obj);
+ LV_ASSERT_MEM(new_obj);
if(new_obj == NULL) return NULL;
new_obj->par = parent; /*Set the parent*/
lv_ll_init(&(new_obj->child_ll), sizeof(lv_obj_t));
+ /*Set the callbacks*/
+ new_obj->signal_cb = lv_obj_signal;
+ new_obj->design_cb = lv_obj_design;
+ new_obj->event_cb = NULL;
+
+#if LV_USE_BIDI
+ new_obj->base_dir = LV_BIDI_DIR_INHERIT;
+#else
+ new_obj->base_dir = LV_BIDI_DIR_LTR;
+#endif
+
/*Set coordinates left top corner of parent*/
- new_obj->coords.x1 = parent->coords.x1;
new_obj->coords.y1 = parent->coords.y1;
- new_obj->coords.x2 = parent->coords.x1 + LV_OBJ_DEF_WIDTH;
new_obj->coords.y2 = parent->coords.y1 + LV_OBJ_DEF_HEIGHT;
+ if(lv_obj_get_base_dir(new_obj) == LV_BIDI_DIR_RTL) {
+ new_obj->coords.x2 = parent->coords.x2;
+ new_obj->coords.x1 = parent->coords.x2 - LV_OBJ_DEF_WIDTH;
+ } else {
+ new_obj->coords.x1 = parent->coords.x1;
+ new_obj->coords.x2 = parent->coords.x1 + LV_OBJ_DEF_WIDTH;
+ }
new_obj->ext_draw_pad = 0;
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
@@ -253,11 +284,6 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
new_obj->style_p = &lv_style_plain_color;
}
- /*Set the callbacks*/
- lv_obj_set_signal_cb(new_obj, lv_obj_signal);
- lv_obj_set_design_cb(new_obj, lv_obj_design);
- new_obj->event_cb = NULL;
-
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
memset(&new_obj->ext_click_pad, 0, sizeof(new_obj->ext_click_pad));
#endif
@@ -279,7 +305,7 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
/*Set attributes*/
new_obj->click = 1;
new_obj->drag = 0;
- new_obj->drag_dir = LV_DRAG_DIR_ALL;
+ new_obj->drag_dir = LV_DRAG_DIR_BOTH;
new_obj->drag_throw = 0;
new_obj->drag_parent = 0;
new_obj->hidden = 0;
@@ -288,12 +314,14 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
new_obj->opa_scale = LV_OPA_COVER;
new_obj->opa_scale_en = 0;
new_obj->parent_event = 0;
+ new_obj->reserved = 0;
new_obj->ext_attr = NULL;
}
/*Copy the attributes if required*/
if(copy != NULL) {
+ LV_ASSERT_OBJ(copy, LV_OBJX_NAME);
lv_area_copy(&new_obj->coords, ©->coords);
new_obj->ext_draw_pad = copy->ext_draw_pad;
@@ -319,7 +347,7 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
new_obj->realign.auto_realign = copy->realign.auto_realign;
#endif
- /*Only copy the `event_cb`. `signal_cb` and `design_cb` will be copied the the derived
+ /*Only copy the `event_cb`. `signal_cb` and `design_cb` will be copied in the derived
* object type (e.g. `lv_btn`)*/
new_obj->event_cb = copy->event_cb;
@@ -374,6 +402,7 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
*/
lv_res_t lv_obj_del(lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
lv_obj_invalidate(obj);
/*Delete from the group*/
@@ -407,15 +436,6 @@ lv_res_t lv_obj_del(lv_obj_t * obj)
lv_event_mark_deleted(obj);
- /*Remove the object from parent's children list*/
- lv_obj_t * par = lv_obj_get_parent(obj);
- if(par == NULL) { /*It is a screen*/
- lv_disp_t * d = lv_obj_get_disp(obj);
- lv_ll_rem(&d->scr_ll, obj);
- } else {
- lv_ll_rem(&(par->child_ll), obj);
- }
-
/* Reset all input devices if the object to delete is used*/
lv_indev_t * indev = lv_indev_get_next(NULL);
while(indev) {
@@ -438,6 +458,15 @@ lv_res_t lv_obj_del(lv_obj_t * obj)
* Now clean up the object specific data*/
obj->signal_cb(obj, LV_SIGNAL_CLEANUP, NULL);
+ /*Remove the object from parent's children list*/
+ lv_obj_t * par = lv_obj_get_parent(obj);
+ if(par == NULL) { /*It is a screen*/
+ lv_disp_t * d = lv_obj_get_disp(obj);
+ lv_ll_remove(&d->scr_ll, obj);
+ } else {
+ lv_ll_remove(&(par->child_ll), obj);
+ }
+
/*Delete the base objects*/
if(obj->ext_attr != NULL) lv_mem_free(obj->ext_attr);
lv_mem_free(obj); /*Free the object itself*/
@@ -458,6 +487,7 @@ lv_res_t lv_obj_del(lv_obj_t * obj)
*/
void lv_obj_del_async(lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
lv_async_call(lv_obj_del_async_cb, obj);
}
@@ -467,6 +497,7 @@ void lv_obj_del_async(lv_obj_t * obj)
*/
void lv_obj_clean(lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
lv_obj_t * child = lv_obj_get_child(obj, NULL);
lv_obj_t * child_next;
while(child) {
@@ -484,6 +515,8 @@ void lv_obj_clean(lv_obj_t * obj)
*/
void lv_obj_invalidate(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
if(lv_obj_get_hidden(obj)) return;
/*Invalidate the object only if it belongs to the 'LV_GC_ROOT(_lv_act_scr)'*/
@@ -531,6 +564,9 @@ void lv_obj_invalidate(const lv_obj_t * obj)
*/
void lv_obj_set_parent(lv_obj_t * obj, lv_obj_t * parent)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+ LV_ASSERT_OBJ(parent, LV_OBJX_NAME);
+
if(obj->par == NULL) {
LV_LOG_WARN("Can't set the parent of a screen");
return;
@@ -543,15 +579,29 @@ void lv_obj_set_parent(lv_obj_t * obj, lv_obj_t * parent)
lv_obj_invalidate(obj);
+ lv_obj_t * old_par = obj->par;
lv_point_t old_pos;
- old_pos.x = lv_obj_get_x(obj);
old_pos.y = lv_obj_get_y(obj);
- lv_obj_t * old_par = obj->par;
+ lv_bidi_dir_t new_base_dir = lv_obj_get_base_dir(parent);
+
+ if(new_base_dir != LV_BIDI_DIR_RTL) {
+ old_pos.x = lv_obj_get_x(obj);
+ } else {
+ old_pos.x = old_par->coords.x2 - obj->coords.x2;
+ }
lv_ll_chg_list(&obj->par->child_ll, &parent->child_ll, obj, true);
obj->par = parent;
- lv_obj_set_pos(obj, old_pos.x, old_pos.y);
+
+
+ if(new_base_dir != LV_BIDI_DIR_RTL) {
+ lv_obj_set_pos(obj, old_pos.x, old_pos.y);
+ } else {
+ /*Align to the right in case of RTL base dir*/
+ lv_coord_t new_x = lv_obj_get_width(parent) - old_pos.x - lv_obj_get_width(obj);
+ lv_obj_set_pos(obj, new_x , old_pos.y);
+ }
/*Notify the original parent because one of its children is lost*/
old_par->signal_cb(old_par, LV_SIGNAL_CHILD_CHG, NULL);
@@ -568,6 +618,8 @@ void lv_obj_set_parent(lv_obj_t * obj, lv_obj_t * parent)
*/
void lv_obj_move_foreground(lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_t * parent = lv_obj_get_parent(obj);
/*Do nothing of already in the foreground*/
@@ -589,6 +641,8 @@ void lv_obj_move_foreground(lv_obj_t * obj)
*/
void lv_obj_move_background(lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_t * parent = lv_obj_get_parent(obj);
/*Do nothing of already in the background*/
@@ -616,6 +670,8 @@ void lv_obj_move_background(lv_obj_t * obj)
*/
void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
/*Convert x and y to absolute coordinates*/
lv_obj_t * par = obj->par;
@@ -663,6 +719,8 @@ void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y)
*/
void lv_obj_set_x(lv_obj_t * obj, lv_coord_t x)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_set_pos(obj, x, lv_obj_get_y(obj));
}
@@ -673,6 +731,8 @@ void lv_obj_set_x(lv_obj_t * obj, lv_coord_t x)
*/
void lv_obj_set_y(lv_obj_t * obj, lv_coord_t y)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_set_pos(obj, lv_obj_get_x(obj), y);
}
@@ -684,6 +744,8 @@ void lv_obj_set_y(lv_obj_t * obj, lv_coord_t y)
*/
void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
/* Do nothing if the size is not changed */
/* It is very important else recursive resizing can
@@ -700,8 +762,12 @@ void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)
lv_obj_get_coords(obj, &ori);
/*Set the length and height*/
- obj->coords.x2 = obj->coords.x1 + w - 1;
obj->coords.y2 = obj->coords.y1 + h - 1;
+ if(lv_obj_get_base_dir(obj) == LV_BIDI_DIR_RTL) {
+ obj->coords.x1 = obj->coords.x2 - w + 1;
+ } else {
+ obj->coords.x2 = obj->coords.x1 + w - 1;
+ }
/*Send a signal to the object with its new coordinates*/
obj->signal_cb(obj, LV_SIGNAL_CORD_CHG, &ori);
@@ -733,6 +799,8 @@ void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)
*/
void lv_obj_set_width(lv_obj_t * obj, lv_coord_t w)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_set_size(obj, w, lv_obj_get_height(obj));
}
@@ -743,6 +811,8 @@ void lv_obj_set_width(lv_obj_t * obj, lv_coord_t w)
*/
void lv_obj_set_height(lv_obj_t * obj, lv_coord_t h)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_set_size(obj, lv_obj_get_width(obj), h);
}
@@ -756,6 +826,8 @@ void lv_obj_set_height(lv_obj_t * obj, lv_coord_t h)
*/
void lv_obj_align(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_coord_t x_mod, lv_coord_t y_mod)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_coord_t new_x = lv_obj_get_x(obj);
lv_coord_t new_y = lv_obj_get_y(obj);
@@ -763,6 +835,9 @@ void lv_obj_align(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_co
base = lv_obj_get_parent(obj);
}
+ LV_ASSERT_OBJ(base, LV_OBJX_NAME);
+
+
switch(align) {
case LV_ALIGN_CENTER:
new_x = lv_obj_get_width(base) / 2 - lv_obj_get_width(obj) / 2;
@@ -901,6 +976,8 @@ void lv_obj_align(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_co
*/
void lv_obj_align_origo(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_coord_t x_mod, lv_coord_t y_mod)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_coord_t new_x = lv_obj_get_x(obj);
lv_coord_t new_y = lv_obj_get_y(obj);
@@ -911,6 +988,9 @@ void lv_obj_align_origo(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align,
base = lv_obj_get_parent(obj);
}
+ LV_ASSERT_OBJ(base, LV_OBJX_NAME);
+
+
switch(align) {
case LV_ALIGN_CENTER:
new_x = lv_obj_get_width(base) / 2 - obj_w_half;
@@ -1045,6 +1125,8 @@ void lv_obj_align_origo(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align,
*/
void lv_obj_realign(lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
#if LV_USE_OBJ_REALIGN
if(obj->realign.origo_align)
lv_obj_align_origo(obj, obj->realign.base, obj->realign.align, obj->realign.xofs, obj->realign.yofs);
@@ -1064,6 +1146,8 @@ void lv_obj_realign(lv_obj_t * obj)
*/
void lv_obj_set_auto_realign(lv_obj_t * obj, bool en)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
#if LV_USE_OBJ_REALIGN
obj->realign.auto_realign = en ? 1 : 0;
#else
@@ -1073,19 +1157,6 @@ void lv_obj_set_auto_realign(lv_obj_t * obj, bool en)
#endif
}
-#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
-/**
- * Set the size of an extended clickable area
- * @param obj pointer to an object
- * @param w extended width to both sides
- * @param h extended height to both sides
- */
-void lv_obj_set_ext_click_area(lv_obj_t * obj, uint8_t w, uint8_t h)
-{
- obj->ext_click_pad_hor = w;
- obj->ext_click_pad_ver = h;
-}
-#endif
/**
* Set the size of an extended clickable area
@@ -1099,6 +1170,8 @@ void lv_obj_set_ext_click_area(lv_obj_t * obj, uint8_t w, uint8_t h)
*/
void lv_obj_set_ext_click_area(lv_obj_t * obj, lv_coord_t left, lv_coord_t right, lv_coord_t top, lv_coord_t bottom)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
obj->ext_click_pad.x1 = left;
obj->ext_click_pad.x2 = right;
@@ -1127,6 +1200,11 @@ void lv_obj_set_ext_click_area(lv_obj_t * obj, lv_coord_t left, lv_coord_t right
*/
void lv_obj_set_style(lv_obj_t * obj, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+ if(style) {
+ LV_ASSERT_STYLE(style);
+ }
+
obj->style_p = style;
/*Send a signal about style change to every children with NULL style*/
@@ -1142,6 +1220,8 @@ void lv_obj_set_style(lv_obj_t * obj, const lv_style_t * style)
*/
void lv_obj_refresh_style(lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_invalidate(obj);
obj->signal_cb(obj, LV_SIGNAL_STYLE_CHG, NULL);
lv_obj_invalidate(obj);
@@ -1154,6 +1234,8 @@ void lv_obj_refresh_style(lv_obj_t * obj)
*/
void lv_obj_report_style_mod(lv_style_t * style)
{
+ LV_ASSERT_STYLE(style);
+
lv_disp_t * d = lv_disp_get_next(NULL);
while(d) {
@@ -1181,6 +1263,8 @@ void lv_obj_report_style_mod(lv_style_t * style)
*/
void lv_obj_set_hidden(lv_obj_t * obj, bool en)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
if(!obj->hidden) lv_obj_invalidate(obj); /*Invalidate when not hidden (hidden objects are ignored) */
obj->hidden = en == false ? 0 : 1;
@@ -1198,6 +1282,8 @@ void lv_obj_set_hidden(lv_obj_t * obj, bool en)
*/
void lv_obj_set_click(lv_obj_t * obj, bool en)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->click = (en == true ? 1 : 0);
}
@@ -1209,6 +1295,8 @@ void lv_obj_set_click(lv_obj_t * obj, bool en)
*/
void lv_obj_set_top(lv_obj_t * obj, bool en)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->top = (en == true ? 1 : 0);
}
@@ -1219,6 +1307,8 @@ void lv_obj_set_top(lv_obj_t * obj, bool en)
*/
void lv_obj_set_drag(lv_obj_t * obj, bool en)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
if(en == true) lv_obj_set_click(obj, true); /*Drag is useless without enabled clicking*/
obj->drag = (en == true ? 1 : 0);
}
@@ -1230,6 +1320,8 @@ void lv_obj_set_drag(lv_obj_t * obj, bool en)
*/
void lv_obj_set_drag_dir(lv_obj_t * obj, lv_drag_dir_t drag_dir)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->drag_dir = drag_dir;
if(obj->drag_dir != 0) lv_obj_set_drag(obj, true); /*Drag direction requires drag*/
@@ -1242,6 +1334,8 @@ void lv_obj_set_drag_dir(lv_obj_t * obj, lv_drag_dir_t drag_dir)
*/
void lv_obj_set_drag_throw(lv_obj_t * obj, bool en)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->drag_throw = (en == true ? 1 : 0);
}
@@ -1253,6 +1347,8 @@ void lv_obj_set_drag_throw(lv_obj_t * obj, bool en)
*/
void lv_obj_set_drag_parent(lv_obj_t * obj, bool en)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->drag_parent = (en == true ? 1 : 0);
}
@@ -1263,9 +1359,28 @@ void lv_obj_set_drag_parent(lv_obj_t * obj, bool en)
*/
void lv_obj_set_parent_event(lv_obj_t * obj, bool en)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->parent_event = (en == true ? 1 : 0);
}
+void lv_obj_set_base_dir(lv_obj_t * obj, lv_bidi_dir_t dir)
+{
+ if(dir != LV_BIDI_DIR_LTR && dir != LV_BIDI_DIR_RTL &&
+ dir != LV_BIDI_DIR_AUTO && dir != LV_BIDI_DIR_INHERIT) {
+
+ LV_LOG_WARN("lv_obj_set_base_dir: invalid base dir");
+ return;
+ }
+
+ obj->base_dir = dir;
+ lv_signal_send(obj, LV_SIGNAL_BASE_DIR_CHG, NULL);
+
+ /* Notify the children about the parent base dir has changed.
+ * (The children might have `LV_BIDI_DIR_INHERIT`)*/
+ base_dir_refr_children(obj);
+}
+
/**
* Set the opa scale enable parameter (required to set opa_scale with `lv_obj_set_opa_scale()`)
* @param obj pointer to an object
@@ -1273,6 +1388,8 @@ void lv_obj_set_parent_event(lv_obj_t * obj, bool en)
*/
void lv_obj_set_opa_scale_enable(lv_obj_t * obj, bool en)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->opa_scale_en = en ? 1 : 0;
}
@@ -1286,6 +1403,8 @@ void lv_obj_set_opa_scale_enable(lv_obj_t * obj, bool en)
*/
void lv_obj_set_opa_scale(lv_obj_t * obj, lv_opa_t opa_scale)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->opa_scale = opa_scale;
lv_obj_invalidate(obj);
}
@@ -1297,6 +1416,8 @@ void lv_obj_set_opa_scale(lv_obj_t * obj, lv_opa_t opa_scale)
*/
void lv_obj_set_protect(lv_obj_t * obj, uint8_t prot)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->protect |= prot;
}
@@ -1307,6 +1428,8 @@ void lv_obj_set_protect(lv_obj_t * obj, uint8_t prot)
*/
void lv_obj_clear_protect(lv_obj_t * obj, uint8_t prot)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
prot = (~prot) & 0xFF;
obj->protect &= prot;
}
@@ -1319,6 +1442,8 @@ void lv_obj_clear_protect(lv_obj_t * obj, uint8_t prot)
*/
void lv_obj_set_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->event_cb = event_cb;
}
@@ -1333,6 +1458,8 @@ lv_res_t lv_event_send(lv_obj_t * obj, lv_event_t event, const void * data)
{
if(obj == NULL) return LV_RES_OK;
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_res_t res;
res = lv_event_send_func(obj->event_cb, obj, event, data);
return res;
@@ -1414,6 +1541,8 @@ const void * lv_event_get_data(void)
*/
void lv_obj_set_signal_cb(lv_obj_t * obj, lv_signal_cb_t signal_cb)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->signal_cb = signal_cb;
}
@@ -1424,6 +1553,8 @@ void lv_obj_set_signal_cb(lv_obj_t * obj, lv_signal_cb_t signal_cb)
*/
void lv_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
if(obj->signal_cb) obj->signal_cb(obj, signal, param);
}
@@ -1434,6 +1565,8 @@ void lv_signal_send(lv_obj_t * obj, lv_signal_t signal, void * param)
*/
void lv_obj_set_design_cb(lv_obj_t * obj, lv_design_cb_t design_cb)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->design_cb = design_cb;
}
@@ -1445,12 +1578,17 @@ void lv_obj_set_design_cb(lv_obj_t * obj, lv_design_cb_t design_cb)
* Allocate a new ext. data for an object
* @param obj pointer to an object
* @param ext_size the size of the new ext. data
- * @return Normal pointer to the allocated ext
+ * @return pointer to the allocated ext.
+ * If out of memory NULL is returned and the original ext is preserved
*/
void * lv_obj_allocate_ext_attr(lv_obj_t * obj, uint16_t ext_size)
{
- obj->ext_attr = lv_mem_realloc(obj->ext_attr, ext_size);
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+ void * new_ext = lv_mem_realloc(obj->ext_attr, ext_size);
+ if(new_ext == NULL) return NULL;
+
+ obj->ext_attr = new_ext;
return (void *)obj->ext_attr;
}
@@ -1460,6 +1598,8 @@ void * lv_obj_allocate_ext_attr(lv_obj_t * obj, uint16_t ext_size)
*/
void lv_obj_refresh_ext_draw_pad(lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
obj->ext_draw_pad = 0;
obj->signal_cb(obj, LV_SIGNAL_REFR_EXT_DRAW_PAD, NULL);
@@ -1477,6 +1617,8 @@ void lv_obj_refresh_ext_draw_pad(lv_obj_t * obj)
*/
lv_obj_t * lv_obj_get_screen(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
const lv_obj_t * par = obj;
const lv_obj_t * act_p;
@@ -1495,6 +1637,8 @@ lv_obj_t * lv_obj_get_screen(const lv_obj_t * obj)
*/
lv_disp_t * lv_obj_get_disp(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
const lv_obj_t * scr;
if(obj->par == NULL)
@@ -1527,6 +1671,8 @@ lv_disp_t * lv_obj_get_disp(const lv_obj_t * obj)
*/
lv_obj_t * lv_obj_get_parent(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->par;
}
@@ -1539,6 +1685,8 @@ lv_obj_t * lv_obj_get_parent(const lv_obj_t * obj)
*/
lv_obj_t * lv_obj_get_child(const lv_obj_t * obj, const lv_obj_t * child)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_t * result = NULL;
if(child == NULL) {
@@ -1559,6 +1707,8 @@ lv_obj_t * lv_obj_get_child(const lv_obj_t * obj, const lv_obj_t * child)
*/
lv_obj_t * lv_obj_get_child_back(const lv_obj_t * obj, const lv_obj_t * child)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_t * result = NULL;
if(child == NULL) {
@@ -1577,6 +1727,8 @@ lv_obj_t * lv_obj_get_child_back(const lv_obj_t * obj, const lv_obj_t * child)
*/
uint16_t lv_obj_count_children(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_t * i;
uint16_t cnt = 0;
@@ -1591,6 +1743,8 @@ uint16_t lv_obj_count_children(const lv_obj_t * obj)
*/
uint16_t lv_obj_count_children_recursive(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_t * i;
uint16_t cnt = 0;
@@ -1614,6 +1768,8 @@ uint16_t lv_obj_count_children_recursive(const lv_obj_t * obj)
*/
void lv_obj_get_coords(const lv_obj_t * obj, lv_area_t * cords_p)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_area_copy(cords_p, &obj->coords);
}
@@ -1624,14 +1780,16 @@ void lv_obj_get_coords(const lv_obj_t * obj, lv_area_t * cords_p)
*/
void lv_obj_get_inner_coords(const lv_obj_t * obj, lv_area_t * coords_p)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
const lv_style_t * style = lv_obj_get_style(obj);
- if(style->body.border.part & LV_BORDER_LEFT) coords_p->x1 += style->body.border.width;
+ if(style->body.border.part & LV_BORDER_PART_LEFT) coords_p->x1 += style->body.border.width;
- if(style->body.border.part & LV_BORDER_RIGHT) coords_p->x2 -= style->body.border.width;
+ if(style->body.border.part & LV_BORDER_PART_RIGHT) coords_p->x2 -= style->body.border.width;
- if(style->body.border.part & LV_BORDER_TOP) coords_p->y1 += style->body.border.width;
+ if(style->body.border.part & LV_BORDER_PART_TOP) coords_p->y1 += style->body.border.width;
- if(style->body.border.part & LV_BORDER_BOTTOM) coords_p->y2 -= style->body.border.width;
+ if(style->body.border.part & LV_BORDER_PART_BOTTOM) coords_p->y2 -= style->body.border.width;
}
/**
@@ -1641,10 +1799,15 @@ void lv_obj_get_inner_coords(const lv_obj_t * obj, lv_area_t * coords_p)
*/
lv_coord_t lv_obj_get_x(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_coord_t rel_x;
lv_obj_t * parent = lv_obj_get_parent(obj);
- rel_x = obj->coords.x1 - parent->coords.x1;
-
+ if(parent) {
+ rel_x = obj->coords.x1 - parent->coords.x1;
+ } else {
+ rel_x = obj->coords.x1;
+ }
return rel_x;
}
@@ -1655,10 +1818,15 @@ lv_coord_t lv_obj_get_x(const lv_obj_t * obj)
*/
lv_coord_t lv_obj_get_y(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_coord_t rel_y;
lv_obj_t * parent = lv_obj_get_parent(obj);
- rel_y = obj->coords.y1 - parent->coords.y1;
-
+ if(parent) {
+ rel_y = obj->coords.y1 - parent->coords.y1;
+ } else {
+ rel_y = obj->coords.y1;
+ }
return rel_y;
}
@@ -1669,6 +1837,8 @@ lv_coord_t lv_obj_get_y(const lv_obj_t * obj)
*/
lv_coord_t lv_obj_get_width(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return lv_area_get_width(&obj->coords);
}
@@ -1679,6 +1849,8 @@ lv_coord_t lv_obj_get_width(const lv_obj_t * obj)
*/
lv_coord_t lv_obj_get_height(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return lv_area_get_height(&obj->coords);
}
@@ -1687,8 +1859,10 @@ lv_coord_t lv_obj_get_height(const lv_obj_t * obj)
* @param obj pointer to an object
* @return the width which still fits into the container
*/
-lv_coord_t lv_obj_get_width_fit(lv_obj_t * obj)
+lv_coord_t lv_obj_get_width_fit(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
const lv_style_t * style = lv_obj_get_style(obj);
return lv_obj_get_width(obj) - style->body.padding.left - style->body.padding.right;
@@ -1699,8 +1873,10 @@ lv_coord_t lv_obj_get_width_fit(lv_obj_t * obj)
* @param obj pointer to an object
* @return the height which still fits into the container
*/
-lv_coord_t lv_obj_get_height_fit(lv_obj_t * obj)
+lv_coord_t lv_obj_get_height_fit(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
const lv_style_t * style = lv_obj_get_style(obj);
return lv_obj_get_height(obj) - style->body.padding.top - style->body.padding.bottom;
@@ -1711,8 +1887,10 @@ lv_coord_t lv_obj_get_height_fit(lv_obj_t * obj)
* @param obj pointer to an object
* @return true: auto realign is enabled; false: auto realign is disabled
*/
-bool lv_obj_get_auto_realign(lv_obj_t * obj)
+bool lv_obj_get_auto_realign(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
#if LV_USE_OBJ_REALIGN
return obj->realign.auto_realign ? true : false;
#else
@@ -1728,6 +1906,8 @@ bool lv_obj_get_auto_realign(lv_obj_t * obj)
*/
lv_coord_t lv_obj_get_ext_click_pad_left(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
return obj->ext_click_pad_hor;
#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
@@ -1745,6 +1925,8 @@ lv_coord_t lv_obj_get_ext_click_pad_left(const lv_obj_t * obj)
*/
lv_coord_t lv_obj_get_ext_click_pad_right(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
return obj->ext_click_pad_hor;
#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
@@ -1762,6 +1944,8 @@ lv_coord_t lv_obj_get_ext_click_pad_right(const lv_obj_t * obj)
*/
lv_coord_t lv_obj_get_ext_click_pad_top(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
return obj->ext_click_pad_ver;
#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
@@ -1779,8 +1963,10 @@ lv_coord_t lv_obj_get_ext_click_pad_top(const lv_obj_t * obj)
*/
lv_coord_t lv_obj_get_ext_click_pad_bottom(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
- return obj->ext_click_pad_ver
+ return obj->ext_click_pad_ver;
#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
return obj->ext_click_pad.y2;
#else
@@ -1796,6 +1982,8 @@ lv_coord_t lv_obj_get_ext_click_pad_bottom(const lv_obj_t * obj)
*/
lv_coord_t lv_obj_get_ext_draw_pad(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->ext_draw_pad;
}
@@ -1810,6 +1998,8 @@ lv_coord_t lv_obj_get_ext_draw_pad(const lv_obj_t * obj)
*/
const lv_style_t * lv_obj_get_style(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
const lv_style_t * style_act = obj->style_p;
if(style_act == NULL) {
lv_obj_t * par = obj->par;
@@ -1858,6 +2048,8 @@ const lv_style_t * lv_obj_get_style(const lv_obj_t * obj)
*/
bool lv_obj_get_hidden(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->hidden == 0 ? false : true;
}
@@ -1868,6 +2060,8 @@ bool lv_obj_get_hidden(const lv_obj_t * obj)
*/
bool lv_obj_get_click(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->click == 0 ? false : true;
}
@@ -1878,6 +2072,8 @@ bool lv_obj_get_click(const lv_obj_t * obj)
*/
bool lv_obj_get_top(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->top == 0 ? false : true;
}
@@ -1888,6 +2084,8 @@ bool lv_obj_get_top(const lv_obj_t * obj)
*/
bool lv_obj_get_drag(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->drag == 0 ? false : true;
}
@@ -1898,6 +2096,8 @@ bool lv_obj_get_drag(const lv_obj_t * obj)
*/
lv_drag_dir_t lv_obj_get_drag_dir(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->drag_dir;
}
@@ -1908,6 +2108,8 @@ lv_drag_dir_t lv_obj_get_drag_dir(const lv_obj_t * obj)
*/
bool lv_obj_get_drag_throw(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->drag_throw == 0 ? false : true;
}
@@ -1928,9 +2130,31 @@ bool lv_obj_get_drag_parent(const lv_obj_t * obj)
*/
bool lv_obj_get_parent_event(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->parent_event == 0 ? false : true;
}
+
+lv_bidi_dir_t lv_obj_get_base_dir(const lv_obj_t * obj)
+{
+#if LV_USE_BIDI
+ const lv_obj_t * parent = obj;
+
+ while(parent) {
+ if(parent->base_dir != LV_BIDI_DIR_INHERIT) return parent->base_dir;
+
+ parent = lv_obj_get_parent(parent);
+ }
+
+ return LV_BIDI_BASE_DIR_DEF;
+#else
+ (void) obj; /*Unused*/
+ return LV_BIDI_DIR_LTR;
+#endif
+}
+
+
/**
* Get the opa scale enable parameter
* @param obj pointer to an object
@@ -1938,6 +2162,8 @@ bool lv_obj_get_parent_event(const lv_obj_t * obj)
*/
lv_opa_t lv_obj_get_opa_scale_enable(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->opa_scale_en == 0 ? false : true;
}
@@ -1948,6 +2174,8 @@ lv_opa_t lv_obj_get_opa_scale_enable(const lv_obj_t * obj)
*/
lv_opa_t lv_obj_get_opa_scale(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
const lv_obj_t * parent = obj;
while(parent) {
@@ -1965,6 +2193,8 @@ lv_opa_t lv_obj_get_opa_scale(const lv_obj_t * obj)
*/
uint8_t lv_obj_get_protect(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->protect;
}
@@ -1976,6 +2206,8 @@ uint8_t lv_obj_get_protect(const lv_obj_t * obj)
*/
bool lv_obj_is_protected(const lv_obj_t * obj, uint8_t prot)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return (obj->protect & prot) == 0 ? false : true;
}
@@ -1986,6 +2218,8 @@ bool lv_obj_is_protected(const lv_obj_t * obj, uint8_t prot)
*/
lv_signal_cb_t lv_obj_get_signal_cb(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->signal_cb;
}
@@ -1996,6 +2230,8 @@ lv_signal_cb_t lv_obj_get_signal_cb(const lv_obj_t * obj)
*/
lv_design_cb_t lv_obj_get_design_cb(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->design_cb;
}
@@ -2006,6 +2242,8 @@ lv_design_cb_t lv_obj_get_design_cb(const lv_obj_t * obj)
*/
lv_event_cb_t lv_obj_get_event_cb(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->event_cb;
}
@@ -2021,6 +2259,8 @@ lv_event_cb_t lv_obj_get_event_cb(const lv_obj_t * obj)
*/
void * lv_obj_get_ext_attr(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->ext_attr;
}
@@ -2030,14 +2270,17 @@ void * lv_obj_get_ext_attr(const lv_obj_t * obj)
* @param obj pointer to an object which type should be get
* @param buf pointer to an `lv_obj_type_t` buffer to store the types
*/
-void lv_obj_get_type(lv_obj_t * obj, lv_obj_type_t * buf)
+void lv_obj_get_type(const lv_obj_t * obj, lv_obj_type_t * buf)
{
+ LV_ASSERT_NULL(buf);
+ LV_ASSERT_NULL(obj);
+
lv_obj_type_t tmp;
memset(buf, 0, sizeof(lv_obj_type_t));
memset(&tmp, 0, sizeof(lv_obj_type_t));
- obj->signal_cb(obj, LV_SIGNAL_GET_TYPE, &tmp);
+ obj->signal_cb((lv_obj_t *)obj, LV_SIGNAL_GET_TYPE, &tmp);
uint8_t cnt;
for(cnt = 0; cnt < LV_MAX_ANCESTOR_NUM; cnt++) {
@@ -2058,8 +2301,10 @@ void lv_obj_get_type(lv_obj_t * obj, lv_obj_type_t * buf)
* @param obj pointer to an object
* @return user data
*/
-lv_obj_user_data_t lv_obj_get_user_data(lv_obj_t * obj)
+lv_obj_user_data_t lv_obj_get_user_data(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->user_data;
}
@@ -2068,9 +2313,11 @@ lv_obj_user_data_t lv_obj_get_user_data(lv_obj_t * obj)
* @param obj pointer to an object
* @return pointer to the user data
*/
-lv_obj_user_data_t * lv_obj_get_user_data_ptr(lv_obj_t * obj)
+lv_obj_user_data_t * lv_obj_get_user_data_ptr(const lv_obj_t * obj)
{
- return &obj->user_data;
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
+ return (lv_obj_user_data_t *)&obj->user_data;
}
/**
@@ -2080,6 +2327,8 @@ lv_obj_user_data_t * lv_obj_get_user_data_ptr(lv_obj_t * obj)
*/
void lv_obj_set_user_data(lv_obj_t * obj, lv_obj_user_data_t data)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
memcpy(&obj->user_data, &data, sizeof(lv_obj_user_data_t));
}
#endif
@@ -2092,6 +2341,8 @@ void lv_obj_set_user_data(lv_obj_t * obj, lv_obj_user_data_t data)
*/
void * lv_obj_get_group(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
return obj->group_p;
}
@@ -2102,6 +2353,8 @@ void * lv_obj_get_group(const lv_obj_t * obj)
*/
bool lv_obj_is_focused(const lv_obj_t * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
if(obj->group_p) {
if(lv_group_get_focused(obj->group_p) == obj) return true;
}
@@ -2110,40 +2363,66 @@ bool lv_obj_is_focused(const lv_obj_t * obj)
}
#endif
+
+/*-------------------
+ * OTHER FUNCTIONS
+ *------------------*/
+
+/**
+ * Used in the signal callback to handle `LV_SIGNAL_GET_TYPE` signal
+ * @param obj pointer to an object
+ * @param buf pointer to `lv_obj_type_t`. (`param` in the signal callback)
+ * @param name name of the object. E.g. "lv_btn". (Only the pointer is saved)
+ * @return LV_RES_OK
+ */
+lv_res_t lv_obj_handle_get_type_signal(lv_obj_type_t * buf, const char * name)
+{
+ uint8_t i;
+ for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
+ if(buf->type[i] == NULL) break;
+ }
+ buf->type[i] = name;
+
+ return LV_RES_OK;
+}
+
/**********************
* STATIC FUNCTIONS
**********************/
static void lv_obj_del_async_cb(void * obj)
{
+ LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
+
lv_obj_del(obj);
}
/**
* Handle the drawing related tasks of the base objects.
* @param obj pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_obj_design(lv_obj_t * obj, const lv_area_t * mask_p, lv_design_mode_t mode)
+static lv_design_res_t lv_obj_design(lv_obj_t * obj, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
-
/*Most trivial test. Is the mask fully IN the object? If no it surely doesn't cover it*/
- if(lv_area_is_in(mask_p, &obj->coords) == false) return false;
+ if(lv_area_is_in(clip_area, &obj->coords) == false) return LV_DESIGN_RES_NOT_COVER;
+
+ const lv_style_t * style = lv_obj_get_style(obj);
+ if(style->body.corner_mask) return LV_DESIGN_RES_MASKED;
/*Can cover the area only if fully solid (no opacity)*/
- const lv_style_t * style = lv_obj_get_style(obj);
- if(style->body.opa < LV_OPA_MAX) return false;
+ if(style->body.opa < LV_OPA_MAX) return LV_DESIGN_RES_NOT_COVER;
/* Because of the radius it is not sure the area is covered
* Check the areas where there is no radius*/
lv_coord_t r = style->body.radius;
- if(r == LV_RADIUS_CIRCLE) return false;
+ if(r == LV_RADIUS_CIRCLE) return LV_DESIGN_RES_NOT_COVER;
lv_area_t area_tmp;
@@ -2151,20 +2430,38 @@ static bool lv_obj_design(lv_obj_t * obj, const lv_area_t * mask_p, lv_design_mo
lv_obj_get_coords(obj, &area_tmp);
area_tmp.x1 += r;
area_tmp.x2 -= r;
- if(lv_area_is_in(mask_p, &area_tmp) == false) return false;
+ if(lv_area_is_in(clip_area, &area_tmp) == false) return LV_DESIGN_RES_NOT_COVER;
/*Check vertically without radius*/
lv_obj_get_coords(obj, &area_tmp);
area_tmp.y1 += r;
area_tmp.y2 -= r;
- if(lv_area_is_in(mask_p, &area_tmp) == false) return false;
+ if(lv_area_is_in(clip_area, &area_tmp) == false) return LV_DESIGN_RES_NOT_COVER;
- } else if(mode == LV_DESIGN_DRAW_MAIN) {
+ return LV_DESIGN_RES_COVER;
+
+ }
+ else if(mode == LV_DESIGN_DRAW_MAIN) {
const lv_style_t * style = lv_obj_get_style(obj);
- lv_draw_rect(&obj->coords, mask_p, style, lv_obj_get_opa_scale(obj));
+ lv_draw_rect(&obj->coords, clip_area, style, lv_obj_get_opa_scale(obj));
+
+ if(style->body.corner_mask) {
+ lv_draw_mask_radius_param_t * mp = lv_mem_buf_get(sizeof(lv_draw_mask_radius_param_t));
+
+ lv_draw_mask_radius_init(mp, &obj->coords, style->body.radius, false);
+ /*Add the mask and use `obj+8` as custom id. Don't use `obj` directly because it might be used by the user*/
+ lv_draw_mask_add(mp, obj + 8);
+ }
+ }
+ else if(mode == LV_DESIGN_DRAW_POST) {
+ const lv_style_t * style = lv_obj_get_style(obj);
+ if(style->body.corner_mask) {
+ lv_draw_mask_radius_param_t * param = lv_draw_mask_remove_custom(obj + 8);
+ lv_mem_buf_release(param);
+ }
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -2176,24 +2473,23 @@ static bool lv_obj_design(lv_obj_t * obj, const lv_area_t * mask_p, lv_design_mo
*/
static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param)
{
- (void)param;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_res_t res = LV_RES_OK;
- const lv_style_t * style = lv_obj_get_style(obj);
-
if(sign == LV_SIGNAL_CHILD_CHG) {
/*Return 'invalid' if the child change signal is not enabled*/
if(lv_obj_is_protected(obj, LV_PROTECT_CHILD_CHG) != false) res = LV_RES_INV;
} else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- if(style->body.shadow.width > obj->ext_draw_pad) obj->ext_draw_pad = style->body.shadow.width;
+ const lv_style_t * style = lv_obj_get_style(obj);
+ lv_coord_t shadow = (style->body.shadow.width >> 1) + 1;
+ shadow += style->body.shadow.spread;
+ shadow += LV_MATH_MAX(LV_MATH_ABS(style->body.shadow.offset.x), LV_MATH_ABS(style->body.shadow.offset.y));
+
+ if(shadow > obj->ext_draw_pad) obj->ext_draw_pad = shadow;
} else if(sign == LV_SIGNAL_STYLE_CHG) {
lv_obj_refresh_ext_draw_pad(obj);
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- buf->type[0] = "lv_obj";
}
-
return res;
}
@@ -2314,18 +2610,34 @@ static void delete_children(lv_obj_t * obj)
indev = lv_indev_get_next(indev);
}
- /*Remove the object from parent's children list*/
- lv_obj_t * par = lv_obj_get_parent(obj);
- lv_ll_rem(&(par->child_ll), obj);
-
/* Clean up the object specific data*/
obj->signal_cb(obj, LV_SIGNAL_CLEANUP, NULL);
+ /*Remove the object from parent's children list*/
+ lv_obj_t * par = lv_obj_get_parent(obj);
+ lv_ll_remove(&(par->child_ll), obj);
+
/*Delete the base objects*/
if(obj->ext_attr != NULL) lv_mem_free(obj->ext_attr);
lv_mem_free(obj); /*Free the object itself*/
}
+static void base_dir_refr_children(lv_obj_t * obj)
+{
+ lv_obj_t * child;
+ child = lv_obj_get_child(obj, NULL);
+
+ while(child) {
+ if(child->base_dir == LV_BIDI_DIR_INHERIT) {
+ lv_signal_send(child, LV_SIGNAL_BASE_DIR_CHG, NULL);
+ base_dir_refr_children(child);
+ }
+
+ child = lv_obj_get_child(obj, child);
+ }
+}
+
+
static void lv_event_mark_deleted(lv_obj_t * obj)
{
lv_event_temp_data_t * t = event_temp_data_head;
diff --git a/src/lv_core/lv_obj.h b/src/lv_core/lv_obj.h
index c2062e969..c976cad6c 100644
--- a/src/lv_core/lv_obj.h
+++ b/src/lv_core/lv_obj.h
@@ -28,6 +28,7 @@ extern "C" {
#include "../lv_misc/lv_ll.h"
#include "../lv_misc/lv_color.h"
#include "../lv_misc/lv_log.h"
+#include "../lv_misc/lv_bidi.h"
#include "../lv_hal/lv_hal.h"
/*********************
@@ -64,11 +65,21 @@ enum {
};
typedef uint8_t lv_design_mode_t;
+
+/** Design results */
+enum {
+ LV_DESIGN_RES_OK, /**< Draw ready */
+ LV_DESIGN_RES_COVER, /**< Returned on `LV_DESIGN_COVER_CHK` if the areas is fully covered*/
+ LV_DESIGN_RES_NOT_COVER, /**< Returned on `LV_DESIGN_COVER_CHK` if the areas is not covered*/
+ LV_DESIGN_RES_MASKED, /**< Returned on `LV_DESIGN_COVER_CHK` if the areas is masked out (children also not cover)*/
+};
+typedef uint8_t lv_design_res_t;
+
/**
* The design callback is used to draw the object on the screen.
* It accepts the object, a mask area, and the mode in which to draw the object.
*/
-typedef bool (*lv_design_cb_t)(struct _lv_obj_t * obj, const lv_area_t * mask_p, lv_design_mode_t mode);
+typedef lv_design_res_t (*lv_design_cb_t)(struct _lv_obj_t * obj, const lv_area_t * clip_area, lv_design_mode_t mode);
enum {
LV_EVENT_PRESSED, /**< The object has been pressed*/
@@ -111,7 +122,8 @@ enum {
LV_SIGNAL_CHILD_CHG, /**< Child was removed/added */
LV_SIGNAL_CORD_CHG, /**< Object coordinates/size have changed */
LV_SIGNAL_PARENT_SIZE_CHG, /**< Parent's size has changed */
- LV_SIGNAL_STYLE_CHG, /**< Object's style has changed */
+ LV_SIGNAL_STYLE_CHG, /**< Object's style has changed */
+ LV_SIGNAL_BASE_DIR_CHG, /**driver.rounder_cb(&disp_refr->driver, &tmp);
/*If this height fits into `max_row` then fine*/
if(lv_area_get_height(&tmp) <= max_row) break;
/*Decrement the height of the area until it fits into `max_row` after rounding*/
- y_tmp--;
- } while(y_tmp != 0);
+ h_tmp--;
+ } while(h_tmp > 0);
- if(y_tmp == 0) {
+ if(h_tmp <= 0) {
LV_LOG_WARN("Can't set VDB height using the round function. (Wrong round_cb or to "
"small VDB)");
return;
@@ -419,6 +419,9 @@ static lv_obj_t * lv_refr_get_top_obj(const lv_area_t * area_p, lv_obj_t * obj)
/*If this object is fully cover the draw area check the children too */
if(lv_area_is_in(area_p, &obj->coords) && obj->hidden == 0) {
+ lv_design_res_t design_res = obj->design_cb(obj, area_p, LV_DESIGN_COVER_CHK);
+ if(design_res == LV_DESIGN_RES_MASKED) return NULL;
+
lv_obj_t * i;
LV_LL_READ(obj->child_ll, i)
{
@@ -433,8 +436,11 @@ static lv_obj_t * lv_refr_get_top_obj(const lv_area_t * area_p, lv_obj_t * obj)
/*If no better children check this object*/
if(found_p == NULL) {
const lv_style_t * style = lv_obj_get_style(obj);
- if(style->body.opa == LV_OPA_COVER && obj->design_cb(obj, area_p, LV_DESIGN_COVER_CHK) != false &&
- lv_obj_get_opa_scale(obj) == LV_OPA_COVER) {
+ if(style->body.opa == LV_OPA_COVER && design_res == LV_DESIGN_RES_COVER &&
+ lv_obj_get_opa_scale(obj) == LV_OPA_COVER &&
+ style->body.blend_mode == LV_BLEND_MODE_NORMAL &&
+ style->body.border.blend_mode == LV_BLEND_MODE_NORMAL &&
+ style->image.blend_mode == LV_BLEND_MODE_NORMAL) {
found_p = obj;
}
}
@@ -518,7 +524,12 @@ static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p)
#if MASK_AREA_DEBUG
static lv_color_t debug_color = LV_COLOR_RED;
- lv_draw_fill(&obj_ext_mask, &obj_ext_mask, debug_color, LV_OPA_50);
+ LV_STYLE_CREATE(style_debug, &lv_style_plain);
+ style_debug.body.main_color = debug_color;
+ style_debug.body.grad_color = debug_color;
+ style_debug.body.border.width = 2;
+ style_debug.body.border.color.full = (debug_color.full + 0x13) * 9;
+ lv_draw_rect(&obj_ext_mask, &obj_ext_mask, &style_debug, LV_OPA_50);
debug_color.full *= 17;
debug_color.full += 0xA1;
#endif
diff --git a/src/lv_core/lv_style.c b/src/lv_core/lv_style.c
index f5241fb77..a2f69ecf5 100644
--- a/src/lv_core/lv_style.c
+++ b/src/lv_core/lv_style.c
@@ -7,6 +7,7 @@
* INCLUDES
*********************/
#include "lv_obj.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_misc/lv_mem.h"
#include "../lv_misc/lv_anim.h"
@@ -74,7 +75,11 @@ void lv_style_init(void)
lv_style_scr.body.opa = LV_OPA_COVER;
lv_style_scr.body.main_color = LV_COLOR_WHITE;
lv_style_scr.body.grad_color = LV_COLOR_WHITE;
+ lv_style_scr.body.main_color_stop = 0;
+ lv_style_scr.body.grad_color_stop = 255;
+ lv_style_scr.body.grad_dir = LV_GRAD_DIR_VER;
lv_style_scr.body.radius = 0;
+ lv_style_scr.body.blend_mode = LV_BLEND_MODE_NORMAL;
lv_style_scr.body.padding.left = 0;
lv_style_scr.body.padding.right = 0;
lv_style_scr.body.padding.top = 0;
@@ -84,11 +89,16 @@ void lv_style_init(void)
lv_style_scr.body.border.color = LV_COLOR_BLACK;
lv_style_scr.body.border.opa = LV_OPA_COVER;
lv_style_scr.body.border.width = 0;
- lv_style_scr.body.border.part = LV_BORDER_FULL;
+ lv_style_scr.body.border.part = LV_BORDER_PART_FULL;
+ lv_style_scr.body.border.blend_mode = LV_BLEND_MODE_NORMAL;
lv_style_scr.body.shadow.color = LV_COLOR_GRAY;
- lv_style_scr.body.shadow.type = LV_SHADOW_FULL;
lv_style_scr.body.shadow.width = 0;
+ lv_style_scr.body.shadow.opa = LV_OPA_COVER;
+ lv_style_scr.body.shadow.offset.x = 0;
+ lv_style_scr.body.shadow.offset.y = 0;
+ lv_style_scr.body.shadow.spread = 0;
+ lv_style_scr.body.shadow.blend_mode = LV_BLEND_MODE_NORMAL;
lv_style_scr.text.opa = LV_OPA_COVER;
lv_style_scr.text.color = lv_color_make(0x30, 0x30, 0x30);
@@ -96,18 +106,30 @@ void lv_style_init(void)
lv_style_scr.text.font = LV_FONT_DEFAULT;
lv_style_scr.text.letter_space = 0;
lv_style_scr.text.line_space = 2;
+ lv_style_scr.text.blend_mode = LV_BLEND_MODE_NORMAL;
+ lv_style_scr.text.underline = 0;
+ lv_style_scr.text.strikethrough = 0;
lv_style_scr.image.opa = LV_OPA_COVER;
lv_style_scr.image.color = lv_color_make(0x20, 0x20, 0x20);
lv_style_scr.image.intense = LV_OPA_TRANSP;
+ lv_style_scr.image.blend_mode = LV_BLEND_MODE_NORMAL;
lv_style_scr.line.opa = LV_OPA_COVER;
lv_style_scr.line.color = lv_color_make(0x20, 0x20, 0x20);
lv_style_scr.line.width = 2;
lv_style_scr.line.rounded = 0;
+ lv_style_scr.line.blend_mode = LV_BLEND_MODE_NORMAL;
+
+#if LV_USE_DEBUG
+#if LV_USE_ASSERT_STYLE
+ lv_style_scr.debug_sentinel = LV_STYLE_DEGUG_SENTINEL_VALUE;
+#endif
+#endif
/*Plain style (by default near the same as the screen style)*/
lv_style_copy(&lv_style_plain, &lv_style_scr);
+ lv_style_plain.body.opa = LV_OPA_COVER;
lv_style_plain.body.padding.left = LV_DPI / 20;
lv_style_plain.body.padding.right = LV_DPI / 20;
lv_style_plain.body.padding.top = LV_DPI / 20;
@@ -163,7 +185,11 @@ void lv_style_init(void)
lv_style_copy(&lv_style_btn_rel, &lv_style_plain);
lv_style_btn_rel.body.main_color = lv_color_make(0x76, 0xa2, 0xd0);
lv_style_btn_rel.body.grad_color = lv_color_make(0x19, 0x3a, 0x5d);
+ lv_style_btn_rel.body.main_color_stop = 0x00;
+ lv_style_btn_rel.body.grad_color_stop = 0xff;;
+ lv_style_btn_rel.body.grad_dir = LV_GRAD_DIR_VER;
lv_style_btn_rel.body.radius = LV_DPI / 15;
+ lv_style_btn_rel.body.opa = LV_OPA_COVER;
lv_style_btn_rel.body.padding.left = LV_DPI / 4;
lv_style_btn_rel.body.padding.right = LV_DPI / 4;
lv_style_btn_rel.body.padding.top = LV_DPI / 6;
@@ -172,8 +198,11 @@ void lv_style_init(void)
lv_style_btn_rel.body.border.color = lv_color_make(0x0b, 0x19, 0x28);
lv_style_btn_rel.body.border.width = LV_DPI / 50 >= 1 ? LV_DPI / 50 : 1;
lv_style_btn_rel.body.border.opa = LV_OPA_70;
- lv_style_btn_rel.body.shadow.color = LV_COLOR_GRAY;
+ lv_style_btn_rel.body.shadow.color = LV_COLOR_BLACK;
lv_style_btn_rel.body.shadow.width = 0;
+ lv_style_btn_rel.body.shadow.opa = LV_OPA_COVER;
+ lv_style_btn_rel.body.shadow.offset.x = 0;
+ lv_style_btn_rel.body.shadow.offset.y = 0;
lv_style_btn_rel.text.color = lv_color_make(0xff, 0xff, 0xff);
lv_style_btn_rel.image.color = lv_color_make(0xff, 0xff, 0xff);
@@ -236,6 +265,9 @@ void lv_style_mix(const lv_style_t * start, const lv_style_t * end, lv_style_t *
STYLE_ATTR_MIX(body.border.width, ratio);
STYLE_ATTR_MIX(body.border.opa, ratio);
STYLE_ATTR_MIX(body.shadow.width, ratio);
+ STYLE_ATTR_MIX(body.shadow.offset.x, ratio);
+ STYLE_ATTR_MIX(body.shadow.offset.y, ratio);
+ STYLE_ATTR_MIX(body.shadow.spread, ratio);
STYLE_ATTR_MIX(body.padding.left, ratio);
STYLE_ATTR_MIX(body.padding.right, ratio);
STYLE_ATTR_MIX(body.padding.top, ratio);
@@ -263,13 +295,11 @@ void lv_style_mix(const lv_style_t * start, const lv_style_t * end, lv_style_t *
res->body.border.part = start->body.border.part;
res->glass = start->glass;
res->text.font = start->text.font;
- res->body.shadow.type = start->body.shadow.type;
res->line.rounded = start->line.rounded;
} else {
res->body.border.part = end->body.border.part;
res->glass = end->glass;
res->text.font = end->text.font;
- res->body.shadow.type = end->body.shadow.type;
res->line.rounded = end->line.rounded;
}
}
@@ -287,7 +317,7 @@ void lv_style_anim_init(lv_anim_t * a)
lv_style_anim_dsc_t * dsc;
dsc = lv_mem_alloc(sizeof(lv_style_anim_dsc_t));
- lv_mem_assert(dsc);
+ LV_ASSERT_MEM(dsc);
if(dsc == NULL) return;
dsc->ready_cb = NULL;
dsc->style_anim = NULL;
diff --git a/src/lv_core/lv_style.h b/src/lv_core/lv_style.h
index 83c46f123..58bccb0d1 100644
--- a/src/lv_core/lv_style.h
+++ b/src/lv_core/lv_style.h
@@ -18,11 +18,15 @@ extern "C" {
#include "../lv_misc/lv_color.h"
#include "../lv_misc/lv_area.h"
#include "../lv_misc/lv_anim.h"
+#include "../lv_draw/lv_draw_blend.h"
/*********************
* DEFINES
*********************/
#define LV_RADIUS_CIRCLE (LV_COORD_MAX) /**< A very big radius to always draw as circle*/
+#define LV_STYLE_DEGUG_SENTINEL_VALUE 0x12345678
+
+LV_EXPORT_CONST_INT(LV_RADIUS_CIRCLE);
/**********************
* TYPEDEFS
@@ -30,25 +34,28 @@ extern "C" {
/*Border types (Use 'OR'ed values)*/
enum {
- LV_BORDER_NONE = 0x00,
- LV_BORDER_BOTTOM = 0x01,
- LV_BORDER_TOP = 0x02,
- LV_BORDER_LEFT = 0x04,
- LV_BORDER_RIGHT = 0x08,
- LV_BORDER_FULL = 0x0F,
- LV_BORDER_INTERNAL = 0x10, /**< FOR matrix-like objects (e.g. Button matrix)*/
+ LV_BORDER_PART_NONE = 0x00,
+ LV_BORDER_PART_BOTTOM = 0x01,
+ LV_BORDER_PART_TOP = 0x02,
+ LV_BORDER_PART_LEFT = 0x04,
+ LV_BORDER_PART_RIGHT = 0x08,
+ LV_BORDER_PART_FULL = 0x0F,
+ LV_BORDER_PART_INTERNAL = 0x10, /**< FOR matrix-like objects (e.g. Button matrix)*/
};
typedef uint8_t lv_border_part_t;
-/*Shadow types*/
+
+
enum {
- LV_SHADOW_BOTTOM = 0, /**< Only draw bottom shadow */
- LV_SHADOW_FULL, /**< Draw shadow on all sides */
+ LV_GRAD_DIR_NONE,
+ LV_GRAD_DIR_VER,
+ LV_GRAD_DIR_HOR,
};
-typedef uint8_t lv_shadow_type_t;
+
+typedef uint8_t lv_grad_dir_t;
/**
- * Objects in LittlevGL can be assigned a style - which holds information about
+ * Styles can be assigned to objects - which holds information about
* how the object should be drawn.
*
* This allows for easy customization without having to modify the object's design
@@ -65,6 +72,11 @@ typedef struct
lv_color_t grad_color; /**< Second color. If not equal to `main_color` a gradient will be drawn for the background. */
lv_coord_t radius; /**< Object's corner radius. You can use #LV_RADIUS_CIRCLE if you want to draw a circle. */
lv_opa_t opa; /**< Object's opacity (0-255). */
+ uint8_t main_color_stop; /**< 0..255 proportionally where should the gradient start (the main color stop)*/
+ uint8_t grad_color_stop; /**< 0..255 proportionally where should the gradient stop (the grad_color start) */
+ lv_blend_mode_t blend_mode :3;
+ lv_grad_dir_t grad_dir :2; /**< LV_GRAD_DIR_NONE/VER/HOR*/
+ uint8_t corner_mask :1; /**< Crop the overflowing content from the rounded corners */
struct
{
@@ -72,6 +84,7 @@ typedef struct
lv_coord_t width; /**< Border width */
lv_border_part_t part; /**< Which borders to draw */
lv_opa_t opa; /**< Border opacity. */
+ lv_blend_mode_t blend_mode :3;
} border;
@@ -79,7 +92,10 @@ typedef struct
{
lv_color_t color;
lv_coord_t width;
- lv_shadow_type_t type; /**< Which parts of the shadow to draw */
+ lv_coord_t spread;
+ lv_point_t offset;
+ lv_opa_t opa;
+ lv_blend_mode_t blend_mode :3;
} shadow;
struct
@@ -101,6 +117,9 @@ typedef struct
lv_coord_t letter_space; /**< Space between letters */
lv_coord_t line_space; /**< Space between lines (vertical) */
lv_opa_t opa; /**< Text opacity */
+ lv_blend_mode_t blend_mode :3;
+ uint8_t underline :1;
+ uint8_t strikethrough :1;
} text;
/**< Style of images. */
@@ -109,6 +128,7 @@ typedef struct
lv_color_t color; /**< Color to recolor the image with */
lv_opa_t intense; /**< Opacity of recoloring (0 means no recoloring) */
lv_opa_t opa; /**< Opacity of whole image */
+ lv_blend_mode_t blend_mode :3;
} image;
/**< Style of lines (not borders). */
@@ -118,7 +138,15 @@ typedef struct
lv_coord_t width;
lv_opa_t opa;
uint8_t rounded : 1; /**< 1: rounded line endings*/
+ lv_blend_mode_t blend_mode :3;
} line;
+
+#if LV_USE_DEBUG
+#if LV_USE_ASSERT_STYLE
+ uint32_t debug_sentinel; /**
-#include
-#include "lv_draw.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_misc/lv_log.h"
-#include "../lv_misc/lv_math.h"
-#include "../lv_misc/lv_mem.h"
-#include "../lv_misc/lv_gc.h"
-
-#if defined(LV_GC_INCLUDE)
-#include LV_GC_INCLUDE
-#endif /* LV_ENABLE_GC */
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-static uint32_t draw_buf_size = 0;
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Give a buffer with the given to use during drawing.
- * Be careful to not use the buffer while other processes are using it.
- * @param size the required size
- */
-void * lv_draw_get_buf(uint32_t size)
-{
- if(size <= draw_buf_size) return LV_GC_ROOT(_lv_draw_buf);
-
- LV_LOG_TRACE("lv_draw_get_buf: allocate");
-
- draw_buf_size = size;
-
- if(LV_GC_ROOT(_lv_draw_buf) == NULL) {
- LV_GC_ROOT(_lv_draw_buf) = lv_mem_alloc(size);
- lv_mem_assert(LV_GC_ROOT(_lv_draw_buf));
- return LV_GC_ROOT(_lv_draw_buf);
- }
-
- LV_GC_ROOT(_lv_draw_buf) = lv_mem_realloc(LV_GC_ROOT(_lv_draw_buf), size);
- lv_mem_assert(LV_GC_ROOT(_lv_draw_buf));
- return LV_GC_ROOT(_lv_draw_buf);
-}
-
-/**
- * Free the draw buffer
- */
-void lv_draw_free_buf(void)
-{
- if(LV_GC_ROOT(_lv_draw_buf)) {
- lv_mem_free(LV_GC_ROOT(_lv_draw_buf));
- LV_GC_ROOT(_lv_draw_buf) = NULL;
- draw_buf_size = 0;
- }
-}
-
-#if LV_ANTIALIAS
-
-/**
- * Get the opacity of a pixel based it's position in a line segment
- * @param seg segment length
- * @param px_id position of of a pixel which opacity should be get [0..seg-1]
- * @param base_opa the base opacity
- * @return the opacity of the given pixel
- */
-lv_opa_t lv_draw_aa_get_opa(lv_coord_t seg, lv_coord_t px_id, lv_opa_t base_opa)
-{
- /* How to calculate the opacity of pixels on the edges which makes the anti-aliasing?
- * For example we have a line like this (y = -0.5 * x):
- *
- * | _ _
- * * * |
- *
- * Anti-aliased pixels come to the '*' characters
- * Calculate what percentage of the pixels should be covered if real line (not rasterized) would
- * be drawn:
- * 1. A real line should start on (0;0) and end on (2;1)
- * 2. So the line intersection coordinates on the first pixel: (0;0) (1;0.5) -> 25% covered
- * pixel in average
- * 3. For the second pixel: (1;0.5) (2;1) -> 75% covered pixel in average
- * 4. The equation: (px_id * 2 + 1) / (segment_width * 2)
- * segment_width: the line segment which is being anti-aliased (was 2 in the
- * example) px_id: pixel ID from 0 to (segment_width - 1) result: [0..1] coverage of the pixel
- */
-
- /*Accelerate the common segment sizes to avoid division*/
- static const lv_opa_t seg1[1] = {128};
- static const lv_opa_t seg2[2] = {64, 192};
- static const lv_opa_t seg3[3] = {42, 128, 212};
- static const lv_opa_t seg4[4] = {32, 96, 159, 223};
- static const lv_opa_t seg5[5] = {26, 76, 128, 178, 230};
- static const lv_opa_t seg6[6] = {21, 64, 106, 148, 191, 234};
- static const lv_opa_t seg7[7] = {18, 55, 91, 128, 164, 200, 237};
- static const lv_opa_t seg8[8] = {16, 48, 80, 112, 143, 175, 207, 239};
-
- static const lv_opa_t * seg_map[] = {seg1, seg2, seg3, seg4, seg5, seg6, seg7, seg8};
-
- if(seg == 0)
- return LV_OPA_TRANSP;
- else if(seg < 8)
- return (uint32_t)((uint32_t)seg_map[seg - 1][px_id] * base_opa) >> 8;
- else {
- return ((px_id * 2 + 1) * base_opa) / (2 * seg);
- }
-}
-
-/**
- * Add a vertical anti-aliasing segment (pixels with decreasing opacity)
- * @param x start point x coordinate
- * @param y start point y coordinate
- * @param length length of segment (negative value to start from 0 opacity)
- * @param mask draw only in this area
- * @param color color of pixels
- * @param opa maximum opacity
- */
-void lv_draw_aa_ver_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, const lv_area_t * mask, lv_color_t color,
- lv_opa_t opa)
-{
- bool aa_inv = false;
- if(length < 0) {
- aa_inv = true;
- length = -length;
- }
-
- lv_coord_t i;
- for(i = 0; i < length; i++) {
- lv_opa_t px_opa = lv_draw_aa_get_opa(length, i, opa);
- if(aa_inv) px_opa = opa - px_opa;
- lv_draw_px(x, y + i, mask, color, px_opa);
- }
-}
-
-/**
- * Add a horizontal anti-aliasing segment (pixels with decreasing opacity)
- * @param x start point x coordinate
- * @param y start point y coordinate
- * @param length length of segment (negative value to start from 0 opacity)
- * @param mask draw only in this area
- * @param color color of pixels
- * @param opa maximum opacity
- */
-void lv_draw_aa_hor_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, const lv_area_t * mask, lv_color_t color,
- lv_opa_t opa)
-{
- bool aa_inv = false;
- if(length < 0) {
- aa_inv = true;
- length = -length;
- }
-
- lv_coord_t i;
- for(i = 0; i < length; i++) {
- lv_opa_t px_opa = lv_draw_aa_get_opa(length, i, opa);
- if(aa_inv) px_opa = opa - px_opa;
- lv_draw_px(x + i, y, mask, color, px_opa);
- }
-}
-
-#endif
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
diff --git a/src/lv_draw/lv_draw.h b/src/lv_draw/lv_draw.h
index a9fa58d91..8beabd53b 100644
--- a/src/lv_draw/lv_draw.h
+++ b/src/lv_draw/lv_draw.h
@@ -23,6 +23,15 @@ extern "C" {
#include "../lv_misc/lv_txt.h"
#include "lv_img_decoder.h"
+#include "lv_draw_rect.h"
+#include "lv_draw_label.h"
+#include "lv_draw_img.h"
+#include "lv_draw_line.h"
+#include "lv_draw_triangle.h"
+#include "lv_draw_arc.h"
+#include "lv_draw_blend.h"
+#include "lv_draw_mask.h"
+
/*********************
* DEFINES
*********************/
@@ -35,54 +44,6 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
-/**
- * Give a buffer with the given to use during drawing.
- * Be careful to not use the buffer while other processes are using it.
- * @param size the required size
- */
-void * lv_draw_get_buf(uint32_t size);
-
-/**
- * Free the draw buffer
- */
-void lv_draw_free_buf(void);
-
-#if LV_ANTIALIAS
-
-/**
- * Get the opacity of a pixel based it's position in a line segment
- * @param seg segment length
- * @param px_id position of of a pixel which opacity should be get [0..seg-1]
- * @param base_opa the base opacity
- * @return the opacity of the given pixel
- */
-lv_opa_t lv_draw_aa_get_opa(lv_coord_t seg, lv_coord_t px_id, lv_opa_t base_opa);
-
-/**
- * Add a vertical anti-aliasing segment (pixels with decreasing opacity)
- * @param x start point x coordinate
- * @param y start point y coordinate
- * @param length length of segment (negative value to start from 0 opacity)
- * @param mask draw only in this area
- * @param color color of pixels
- * @param opa maximum opacity
- */
-void lv_draw_aa_ver_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, const lv_area_t * mask, lv_color_t color,
- lv_opa_t opa);
-
-/**
- * Add a horizontal anti-aliasing segment (pixels with decreasing opacity)
- * @param x start point x coordinate
- * @param y start point y coordinate
- * @param length length of segment (negative value to start from 0 opacity)
- * @param mask draw only in this area
- * @param color color of pixels
- * @param opa maximum opacity
- */
-void lv_draw_aa_hor_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, const lv_area_t * mask, lv_color_t color,
- lv_opa_t opa);
-#endif
-
/**********************
* GLOBAL VARIABLES
**********************/
@@ -94,13 +55,6 @@ void lv_draw_aa_hor_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, const lv_
/**********************
* POST INCLUDES
*********************/
-#include "lv_draw_basic.h"
-#include "lv_draw_rect.h"
-#include "lv_draw_label.h"
-#include "lv_draw_img.h"
-#include "lv_draw_line.h"
-#include "lv_draw_triangle.h"
-#include "lv_draw_arc.h"
#ifdef __cplusplus
} /* extern "C" */
diff --git a/src/lv_draw/lv_draw.mk b/src/lv_draw/lv_draw.mk
index c879ebe6e..ea09d6cac 100644
--- a/src/lv_draw/lv_draw.mk
+++ b/src/lv_draw/lv_draw.mk
@@ -1,5 +1,5 @@
-CSRCS += lv_draw_basic.c
-CSRCS += lv_draw.c
+CSRCS += lv_draw_mask.c
+CSRCS += lv_draw_blend.c
CSRCS += lv_draw_rect.c
CSRCS += lv_draw_label.c
CSRCS += lv_draw_line.c
@@ -8,6 +8,7 @@ CSRCS += lv_draw_arc.c
CSRCS += lv_draw_triangle.c
CSRCS += lv_img_decoder.c
CSRCS += lv_img_cache.c
+CSRCS += lv_img_buf.c
DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_draw
VPATH += :$(LVGL_DIR)/lvgl/src/lv_draw
diff --git a/src/lv_draw/lv_draw_arc.c b/src/lv_draw/lv_draw_arc.c
index 306249256..fcb95d55d 100644
--- a/src/lv_draw/lv_draw_arc.c
+++ b/src/lv_draw/lv_draw_arc.c
@@ -7,6 +7,7 @@
* INCLUDES
*********************/
#include "lv_draw_arc.h"
+#include "lv_draw_mask.h"
#include "../lv_misc/lv_math.h"
/*********************
@@ -20,13 +21,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static uint16_t fast_atan2(int x, int y);
-static void ver_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask, lv_coord_t len, lv_color_t color,
- lv_opa_t opa);
-static void hor_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask, lv_coord_t len, lv_color_t color,
- lv_opa_t opa);
-static bool deg_test_norm(uint16_t deg, uint16_t start, uint16_t end);
-static bool deg_test_inv(uint16_t deg, uint16_t start, uint16_t end);
+static void get_rounded_area(int16_t angle, lv_coord_t radius, uint8_t tickness, lv_area_t * res_area);
/**********************
* STATIC VARIABLES
@@ -51,221 +46,105 @@ static bool deg_test_inv(uint16_t deg, uint16_t start, uint16_t end);
* @param style style of the arc (`body.thickness`, `body.main_color`, `body.opa` is used)
* @param opa_scale scale down all opacities by the factor
*/
-void lv_draw_arc(lv_coord_t center_x, lv_coord_t center_y, uint16_t radius, const lv_area_t * mask,
- uint16_t start_angle, uint16_t end_angle, const lv_style_t * style, lv_opa_t opa_scale)
+void lv_draw_arc(lv_coord_t center_x, lv_coord_t center_y, uint16_t radius, const lv_area_t * clip_area,
+ uint16_t start_angle, uint16_t end_angle, const lv_style_t * style, lv_opa_t opa_scale)
{
- lv_coord_t thickness = style->line.width;
- if(thickness > radius) thickness = radius;
+ lv_style_t circle_style;
+ lv_style_copy(&circle_style, style);
+ circle_style.body.radius = LV_RADIUS_CIRCLE;
+ circle_style.body.opa = LV_OPA_TRANSP;
+ circle_style.body.border.width = style->line.width;
+ circle_style.body.border.color = style->line.color;
+ circle_style.body.border.opa = style->line.opa;
- lv_coord_t r_out = radius;
- lv_coord_t r_in = r_out - thickness;
- int16_t deg_base;
- int16_t deg;
- lv_coord_t x_start[4];
- lv_coord_t x_end[4];
+ lv_draw_mask_angle_param_t mask_angle_param;
+ lv_draw_mask_angle_init(&mask_angle_param, center_x, center_y, start_angle, end_angle);
- lv_color_t color = style->line.color;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
+ int16_t mask_angle_id = lv_draw_mask_add(&mask_angle_param, NULL);
- bool (*deg_test)(uint16_t, uint16_t, uint16_t);
- if(start_angle <= end_angle)
- deg_test = deg_test_norm;
- else
- deg_test = deg_test_inv;
+ lv_area_t area;
+ area.x1 = center_x - radius;
+ area.y1 = center_y - radius;
+ area.x2 = center_x + radius - 1; /*-1 because the center already belongs to the left/bottom part*/
+ area.y2 = center_y + radius - 1;
- if(deg_test(270, start_angle, end_angle))
- hor_line(center_x - r_out + 1, center_y, mask, thickness - 1, color, opa); /*Left Middle*/
- if(deg_test(90, start_angle, end_angle))
- hor_line(center_x + r_in, center_y, mask, thickness - 1, color, opa); /*Right Middle*/
- if(deg_test(180, start_angle, end_angle))
- ver_line(center_x, center_y - r_out + 1, mask, thickness - 1, color, opa); /*Top Middle*/
- if(deg_test(0, start_angle, end_angle))
- ver_line(center_x, center_y + r_in, mask, thickness - 1, color, opa); /*Bottom middle*/
+ lv_draw_rect(&area, clip_area, &circle_style, LV_OPA_COVER);
- uint32_t r_out_sqr = r_out * r_out;
- uint32_t r_in_sqr = r_in * r_in;
- int16_t xi;
- int16_t yi;
- for(yi = -r_out; yi < 0; yi++) {
- x_start[0] = LV_COORD_MIN;
- x_start[1] = LV_COORD_MIN;
- x_start[2] = LV_COORD_MIN;
- x_start[3] = LV_COORD_MIN;
- x_end[0] = LV_COORD_MIN;
- x_end[1] = LV_COORD_MIN;
- x_end[2] = LV_COORD_MIN;
- x_end[3] = LV_COORD_MIN;
- for(xi = -r_out; xi < 0; xi++) {
+ lv_draw_mask_remove_id(mask_angle_id);
- uint32_t r_act_sqr = xi * xi + yi * yi;
- if(r_act_sqr > r_out_sqr) continue;
+ if(style->line.rounded) {
+ circle_style.body.main_color = style->line.color;
+ circle_style.body.grad_color = style->line.color;
+ circle_style.body.opa = LV_OPA_COVER;
+ circle_style.body.border.width = 0;
- deg_base = fast_atan2(xi, yi) - 180;
+ lv_area_t round_area;
+ get_rounded_area(start_angle, radius, style->line.width, &round_area);
+ round_area.x1 += center_x;
+ round_area.x2 += center_x;
+ round_area.y1 += center_y;
+ round_area.y2 += center_y;
- deg = 180 + deg_base;
- if(deg_test(deg, start_angle, end_angle)) {
- if(x_start[0] == LV_COORD_MIN) x_start[0] = xi;
- } else if(x_start[0] != LV_COORD_MIN && x_end[0] == LV_COORD_MIN) {
- x_end[0] = xi - 1;
- }
+ lv_draw_rect(&round_area, clip_area, &circle_style, opa_scale);
- deg = 360 - deg_base;
- if(deg_test(deg, start_angle, end_angle)) {
- if(x_start[1] == LV_COORD_MIN) x_start[1] = xi;
- } else if(x_start[1] != LV_COORD_MIN && x_end[1] == LV_COORD_MIN) {
- x_end[1] = xi - 1;
- }
+ get_rounded_area(end_angle, radius, style->line.width, &round_area);
+ round_area.x1 += center_x;
+ round_area.x2 += center_x;
+ round_area.y1 += center_y;
+ round_area.y2 += center_y;
- deg = 180 - deg_base;
- if(deg_test(deg, start_angle, end_angle)) {
- if(x_start[2] == LV_COORD_MIN) x_start[2] = xi;
- } else if(x_start[2] != LV_COORD_MIN && x_end[2] == LV_COORD_MIN) {
- x_end[2] = xi - 1;
- }
-
- deg = deg_base;
- if(deg_test(deg, start_angle, end_angle)) {
- if(x_start[3] == LV_COORD_MIN) x_start[3] = xi;
- } else if(x_start[3] != LV_COORD_MIN && x_end[3] == LV_COORD_MIN) {
- x_end[3] = xi - 1;
- }
-
- if(r_act_sqr < r_in_sqr)
- break; /*No need to continue the iteration in x once we found the inner edge of the
- arc*/
- }
-
- if(x_start[0] != LV_COORD_MIN) {
- if(x_end[0] == LV_COORD_MIN) x_end[0] = xi - 1;
- hor_line(center_x + x_start[0], center_y + yi, mask, x_end[0] - x_start[0], color, opa);
- }
-
- if(x_start[1] != LV_COORD_MIN) {
- if(x_end[1] == LV_COORD_MIN) x_end[1] = xi - 1;
- hor_line(center_x + x_start[1], center_y - yi, mask, x_end[1] - x_start[1], color, opa);
- }
-
- if(x_start[2] != LV_COORD_MIN) {
- if(x_end[2] == LV_COORD_MIN) x_end[2] = xi - 1;
- hor_line(center_x - x_end[2], center_y + yi, mask, LV_MATH_ABS(x_end[2] - x_start[2]), color, opa);
- }
-
- if(x_start[3] != LV_COORD_MIN) {
- if(x_end[3] == LV_COORD_MIN) x_end[3] = xi - 1;
- hor_line(center_x - x_end[3], center_y - yi, mask, LV_MATH_ABS(x_end[3] - x_start[3]), color, opa);
- }
-
-#if LV_ANTIALIAS
- /*TODO*/
-
-#endif
+ lv_draw_rect(&round_area, clip_area, &circle_style, opa_scale);
}
}
-static uint16_t fast_atan2(int x, int y)
-{
- // Fast XY vector to integer degree algorithm - Jan 2011 www.RomanBlack.com
- // Converts any XY values including 0 to a degree value that should be
- // within +/- 1 degree of the accurate value without needing
- // large slow trig functions like ArcTan() or ArcCos().
- // NOTE! at least one of the X or Y values must be non-zero!
- // This is the full version, for all 4 quadrants and will generate
- // the angle in integer degrees from 0-360.
- // Any values of X and Y are usable including negative values provided
- // they are between -1456 and 1456 so the 16bit multiply does not overflow.
-
- unsigned char negflag;
- unsigned char tempdegree;
- unsigned char comp;
- unsigned int degree; /*this will hold the result*/
- unsigned int ux;
- unsigned int uy;
-
- /*Save the sign flags then remove signs and get XY as unsigned ints*/
- negflag = 0;
- if(x < 0) {
- negflag += 0x01; /*x flag bit*/
- x = (0 - x); /*is now +*/
- }
- ux = x; /*copy to unsigned var before multiply*/
- if(y < 0) {
- negflag += 0x02; /*y flag bit*/
- y = (0 - y); /*is now +*/
- }
- uy = y; /*copy to unsigned var before multiply*/
-
- /*1. Calc the scaled "degrees"*/
- if(ux > uy) {
- degree = (uy * 45) / ux; /*degree result will be 0-45 range*/
- negflag += 0x10; /*octant flag bit*/
- } else {
- degree = (ux * 45) / uy; /*degree result will be 0-45 range*/
- }
-
- /*2. Compensate for the 4 degree error curve*/
- comp = 0;
- tempdegree = degree; /*use an unsigned char for speed!*/
- if(tempdegree > 22) { /*if top half of range*/
- if(tempdegree <= 44) comp++;
- if(tempdegree <= 41) comp++;
- if(tempdegree <= 37) comp++;
- if(tempdegree <= 32) comp++; /*max is 4 degrees compensated*/
- } else { /*else is lower half of range*/
- if(tempdegree >= 2) comp++;
- if(tempdegree >= 6) comp++;
- if(tempdegree >= 10) comp++;
- if(tempdegree >= 15) comp++; /*max is 4 degrees compensated*/
- }
- degree += comp; /*degree is now accurate to +/- 1 degree!*/
-
- /*Invert degree if it was X>Y octant, makes 0-45 into 90-45*/
- if(negflag & 0x10) degree = (90 - degree);
-
- /*3. Degree is now 0-90 range for this quadrant,*/
- /*need to invert it for whichever quadrant it was in*/
- if(negflag & 0x02) { /*if -Y*/
- if(negflag & 0x01) /*if -Y -X*/
- degree = (180 + degree);
- else /*else is -Y +X*/
- degree = (180 - degree);
- } else { /*else is +Y*/
- if(negflag & 0x01) /*if +Y -X*/
- degree = (360 - degree);
- }
- return degree;
-}
/**********************
* STATIC FUNCTIONS
**********************/
-static void ver_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask, lv_coord_t len, lv_color_t color, lv_opa_t opa)
+
+static void get_rounded_area(int16_t angle, lv_coord_t radius, uint8_t tickness, lv_area_t * res_area)
{
- lv_area_t area;
- lv_area_set(&area, x, y, x, y + len);
+ const uint8_t ps = 8;
+ const uint8_t pa = 127;
- lv_draw_fill(&area, mask, color, opa);
-}
-
-static void hor_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask, lv_coord_t len, lv_color_t color, lv_opa_t opa)
-{
- lv_area_t area;
- lv_area_set(&area, x, y, x + len, y);
-
- lv_draw_fill(&area, mask, color, opa);
-}
-
-static bool deg_test_norm(uint16_t deg, uint16_t start, uint16_t end)
-{
- if(deg >= start && deg <= end)
- return true;
- else
- return false;
-}
-
-static bool deg_test_inv(uint16_t deg, uint16_t start, uint16_t end)
-{
- if(deg >= start || deg <= end) {
- return true;
- } else
- return false;
+ lv_coord_t thick_half = tickness / 2;
+ lv_coord_t thick_corr = tickness & 0x01 ? 0 : 1;
+
+ lv_coord_t rx_corr;
+ lv_coord_t ry_corr;
+
+ if(angle > 90 && angle < 270) rx_corr = 0;
+ else rx_corr = 0;
+
+ if(angle > 0 && angle < 180) ry_corr = 0;
+ else ry_corr = 0;
+
+ lv_coord_t cir_x;
+ lv_coord_t cir_y;
+
+ cir_x = ((radius - rx_corr - thick_half) * lv_trigo_sin(90 - angle)) >> (LV_TRIGO_SHIFT - ps);
+ cir_y = ((radius - ry_corr - thick_half) * lv_trigo_sin(angle)) >> (LV_TRIGO_SHIFT - ps);
+
+ /* Actually the center of the pixel need to be calculated so apply 1/2 px offset*/
+ if(cir_x > 0) {
+ cir_x = (cir_x - pa) >> ps;
+ res_area->x1 = cir_x - thick_half + thick_corr;
+ res_area->x2 = cir_x + thick_half;
+ }
+ else {
+ cir_x = (cir_x + pa) >> ps;
+ res_area->x1 = cir_x - thick_half;
+ res_area->x2 = cir_x + thick_half - thick_corr;
+ }
+
+ if(cir_y > 0) {
+ cir_y = (cir_y - pa) >> ps;
+ res_area->y1 = cir_y - thick_half + thick_corr;
+ res_area->y2 = cir_y + thick_half;
+ }
+ else {
+ cir_y = (cir_y + pa) >> ps;
+ res_area->y1 = cir_y - thick_half;
+ res_area->y2 = cir_y + thick_half - thick_corr;
+ }
}
diff --git a/src/lv_draw/lv_draw_basic.c b/src/lv_draw/lv_draw_basic.c
deleted file mode 100644
index afbf481df..000000000
--- a/src/lv_draw/lv_draw_basic.c
+++ /dev/null
@@ -1,707 +0,0 @@
-/**
- * @file lv_draw_basic.c
- *
- */
-
-#include "lv_draw_basic.h"
-
-#include
-#include
-#include
-
-#include "../lv_core/lv_refr.h"
-#include "../lv_hal/lv_hal.h"
-#include "../lv_font/lv_font.h"
-#include "../lv_misc/lv_area.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_log.h"
-
-#include
-#include "lv_draw.h"
-
-/*********************
- * INCLUDES
- *********************/
-
-/*********************
- * DEFINES
- *********************/
-
-/*Always fill < 50 px with 'sw_color_fill' because of the hw. init overhead*/
-#define VFILL_HW_ACC_SIZE_LIMIT 50
-
-#ifndef LV_ATTRIBUTE_MEM_ALIGN
-#define LV_ATTRIBUTE_MEM_ALIGN
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-static void sw_mem_blend(lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa);
-static void sw_color_fill(lv_color_t * mem, lv_coord_t mem_width, const lv_area_t * fill_area, lv_color_t color,
- lv_opa_t opa);
-
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
-static inline lv_color_t color_mix_2_alpha(lv_color_t bg_color, lv_opa_t bg_opa, lv_color_t fg_color, lv_opa_t fg_opa);
-#endif
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-/**
- * Put a pixel in the Virtual Display Buffer
- * @param x pixel x coordinate
- * @param y pixel y coordinate
- * @param mask_p fill only on this mask (truncated to VDB area)
- * @param color pixel color
- * @param opa opacity of the area (0..255)
- */
-void lv_draw_px(lv_coord_t x, lv_coord_t y, const lv_area_t * mask_p, lv_color_t color, lv_opa_t opa)
-{
-
- if(opa < LV_OPA_MIN) return;
- if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
-
- /*Pixel out of the mask*/
- if(x < mask_p->x1 || x > mask_p->x2 || y < mask_p->y1 || y > mask_p->y2) {
- return;
- }
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
- uint32_t vdb_width = lv_area_get_width(&vdb->area);
-
- /*Make the coordinates relative to VDB*/
- x -= vdb->area.x1;
- y -= vdb->area.y1;
-
- if(disp->driver.set_px_cb) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width, x, y, color, opa);
- } else {
- bool scr_transp = false;
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- scr_transp = disp->driver.screen_transp;
-#endif
-
- lv_color_t * vdb_px_p = vdb->buf_act;
- vdb_px_p += y * vdb_width + x;
-
- if(scr_transp == false) {
- if(opa == LV_OPA_COVER) {
- *vdb_px_p = color;
- } else {
- *vdb_px_p = lv_color_mix(color, *vdb_px_p, opa);
- }
- } else {
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- *vdb_px_p = color_mix_2_alpha(*vdb_px_p, (*vdb_px_p).ch.alpha, color, opa);
-#endif
- }
- }
-}
-
-/**
- * Fill an area in the Virtual Display Buffer
- * @param cords_p coordinates of the area to fill
- * @param mask_p fill only o this mask (truncated to VDB area)
- * @param color fill color
- * @param opa opacity of the area (0..255)
- */
-void lv_draw_fill(const lv_area_t * cords_p, const lv_area_t * mask_p, lv_color_t color, lv_opa_t opa)
-{
- if(opa < LV_OPA_MIN) return;
- if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
-
- lv_area_t res_a;
- bool union_ok;
-
- /*Get the union of cord and mask*/
- /* The mask is already truncated to the vdb size
- * in 'lv_refr_area_with_vdb' function */
- union_ok = lv_area_intersect(&res_a, cords_p, mask_p);
-
- /*If there are common part of the three area then draw to the vdb*/
- if(union_ok == false) {
- return;
- }
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
-
- lv_area_t vdb_rel_a; /*Stores relative coordinates on vdb*/
- vdb_rel_a.x1 = res_a.x1 - vdb->area.x1;
- vdb_rel_a.y1 = res_a.y1 - vdb->area.y1;
- vdb_rel_a.x2 = res_a.x2 - vdb->area.x1;
- vdb_rel_a.y2 = res_a.y2 - vdb->area.y1;
-
- lv_color_t * vdb_buf_tmp = vdb->buf_act;
- uint32_t vdb_width = lv_area_get_width(&vdb->area);
- /*Move the vdb_tmp to the first row*/
- vdb_buf_tmp += vdb_width * vdb_rel_a.y1;
-
-#if LV_USE_GPU
- static LV_ATTRIBUTE_MEM_ALIGN lv_color_t color_array_tmp[LV_HOR_RES_MAX]; /*Used by 'lv_disp_mem_blend'*/
- static lv_coord_t last_width = -1;
-
- lv_coord_t w = lv_area_get_width(&vdb_rel_a);
- /*Don't use hw. acc. for every small fill (because of the init overhead)*/
- if(w < VFILL_HW_ACC_SIZE_LIMIT) {
- sw_color_fill(vdb->buf_act, vdb_width, &vdb_rel_a, color, opa);
- }
- /*Not opaque fill*/
- else if(opa == LV_OPA_COVER) {
- /*Use hw fill if present*/
- if(disp->driver.gpu_fill_cb) {
- disp->driver.gpu_fill_cb(&disp->driver, vdb->buf_act, vdb_width, &vdb_rel_a, color);
- }
- /*Use hw blend if present and the area is not too small*/
- else if(lv_area_get_height(&vdb_rel_a) > VFILL_HW_ACC_SIZE_LIMIT && disp->driver.gpu_blend_cb) {
- /*Fill a one line sized buffer with a color and blend this later*/
- if(color_array_tmp[0].full != color.full || last_width != w) {
- uint16_t i;
- for(i = 0; i < w; i++) {
- color_array_tmp[i].full = color.full;
- }
- last_width = w;
- }
-
- /*Blend the filled line to every line VDB line-by-line*/
- lv_coord_t row;
- for(row = vdb_rel_a.y1; row <= vdb_rel_a.y2; row++) {
- disp->driver.gpu_blend_cb(&disp->driver, &vdb_buf_tmp[vdb_rel_a.x1], color_array_tmp, w, opa);
- vdb_buf_tmp += vdb_width;
- }
-
- }
- /*Else use sw fill if no better option*/
- else {
- sw_color_fill(vdb->buf_act, vdb_width, &vdb_rel_a, color, opa);
- }
-
- }
- /*Fill with opacity*/
- else {
- /*Use hw blend if present*/
- if(disp->driver.gpu_blend_cb) {
- if(color_array_tmp[0].full != color.full || last_width != w) {
- uint16_t i;
- for(i = 0; i < w; i++) {
- color_array_tmp[i].full = color.full;
- }
-
- last_width = w;
- }
- lv_coord_t row;
- for(row = vdb_rel_a.y1; row <= vdb_rel_a.y2; row++) {
- disp->driver.gpu_blend_cb(&disp->driver, &vdb_buf_tmp[vdb_rel_a.x1], color_array_tmp, w, opa);
- vdb_buf_tmp += vdb_width;
- }
-
- }
- /*Use sw fill with opa if no better option*/
- else {
- sw_color_fill(vdb->buf_act, vdb_width, &vdb_rel_a, color, opa);
- }
- }
-#else
- sw_color_fill(vdb->buf_act, vdb_width, &vdb_rel_a, color, opa);
-#endif
-}
-
-/**
- * Draw a letter in the Virtual Display Buffer
- * @param pos_p left-top coordinate of the latter
- * @param mask_p the letter will be drawn only on this area (truncated to VDB area)
- * @param font_p pointer to font
- * @param letter a letter to draw
- * @param color color of letter
- * @param opa opacity of letter (0..255)
- */
-void lv_draw_letter(const lv_point_t * pos_p, const lv_area_t * mask_p, const lv_font_t * font_p, uint32_t letter,
- lv_color_t color, lv_opa_t opa)
-{
- /*clang-format off*/
- const uint8_t bpp1_opa_table[2] = {0, 255}; /*Opacity mapping with bpp = 1 (Just for compatibility)*/
- const uint8_t bpp2_opa_table[4] = {0, 85, 170, 255}; /*Opacity mapping with bpp = 2*/
- const uint8_t bpp4_opa_table[16] = {0, 17, 34, 51, /*Opacity mapping with bpp = 4*/
- 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255};
- /*clang-format on*/
-
- if(opa < LV_OPA_MIN) return;
- if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
-
- if(font_p == NULL) {
- LV_LOG_WARN("Font: character's bitmap not found");
- return;
- }
-
- lv_font_glyph_dsc_t g;
- bool g_ret = lv_font_get_glyph_dsc(font_p, &g, letter, '\0');
- if(g_ret == false) return;
-
- lv_coord_t pos_x = pos_p->x + g.ofs_x;
- lv_coord_t pos_y = pos_p->y + (font_p->line_height - font_p->base_line) - g.box_h - g.ofs_y;
-
- const uint8_t * bpp_opa_table;
- uint8_t bitmask_init;
- uint8_t bitmask;
-
- switch(g.bpp) {
- case 1:
- bpp_opa_table = bpp1_opa_table;
- bitmask_init = 0x80;
- break;
- case 2:
- bpp_opa_table = bpp2_opa_table;
- bitmask_init = 0xC0;
- break;
- case 4:
- bpp_opa_table = bpp4_opa_table;
- bitmask_init = 0xF0;
- break;
- case 8:
- bpp_opa_table = NULL;
- bitmask_init = 0xFF;
- break; /*No opa table, pixel value will be used directly*/
- default: return; /*Invalid bpp. Can't render the letter*/
- }
-
- const uint8_t * map_p = lv_font_get_glyph_bitmap(font_p, letter);
-
- if(map_p == NULL) return;
-
- /*If the letter is completely out of mask don't draw it */
- if(pos_x + g.box_w < mask_p->x1 || pos_x > mask_p->x2 || pos_y + g.box_h < mask_p->y1 || pos_y > mask_p->y2) return;
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
-
- lv_coord_t vdb_width = lv_area_get_width(&vdb->area);
- lv_color_t * vdb_buf_tmp = vdb->buf_act;
- lv_coord_t col, row;
-
- uint8_t width_byte_scr = g.box_w >> 3; /*Width in bytes (on the screen finally) (e.g. w = 11 -> 2 bytes wide)*/
- if(g.box_w & 0x7) width_byte_scr++;
- uint16_t width_bit = g.box_w * g.bpp; /*Letter width in bits*/
-
- /* Calculate the col/row start/end on the map*/
- lv_coord_t col_start = pos_x >= mask_p->x1 ? 0 : mask_p->x1 - pos_x;
- lv_coord_t col_end = pos_x + g.box_w <= mask_p->x2 ? g.box_w : mask_p->x2 - pos_x + 1;
- lv_coord_t row_start = pos_y >= mask_p->y1 ? 0 : mask_p->y1 - pos_y;
- lv_coord_t row_end = pos_y + g.box_h <= mask_p->y2 ? g.box_h : mask_p->y2 - pos_y + 1;
-
- /*Set a pointer on VDB to the first pixel of the letter*/
- vdb_buf_tmp += ((pos_y - vdb->area.y1) * vdb_width) + pos_x - vdb->area.x1;
-
- /*If the letter is partially out of mask the move there on VDB*/
- vdb_buf_tmp += (row_start * vdb_width) + col_start;
-
- /*Move on the map too*/
- uint32_t bit_ofs = (row_start * width_bit) + (col_start * g.bpp);
- map_p += bit_ofs >> 3;
-
- uint8_t letter_px;
- lv_opa_t px_opa;
- uint16_t col_bit;
- col_bit = bit_ofs & 0x7; /* "& 0x7" equals to "% 8" just faster */
-
- bool scr_transp = false;
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- scr_transp = disp->driver.screen_transp;
-#endif
-
- for(row = row_start; row < row_end; row++) {
- bitmask = bitmask_init >> col_bit;
- for(col = col_start; col < col_end; col++) {
- letter_px = (*map_p & bitmask) >> (8 - col_bit - g.bpp);
- if(letter_px != 0) {
- if(opa == LV_OPA_COVER) {
- px_opa = g.bpp == 8 ? letter_px : bpp_opa_table[letter_px];
- } else {
- px_opa = g.bpp == 8 ? (uint16_t)((uint16_t)letter_px * opa) >> 8
- : (uint16_t)((uint16_t)bpp_opa_table[letter_px] * opa) >> 8;
- }
-
- if(disp->driver.set_px_cb) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width,
- (col + pos_x) - vdb->area.x1, (row + pos_y) - vdb->area.y1, color, px_opa);
- } else if(vdb_buf_tmp->full != color.full) {
- if(px_opa > LV_OPA_MAX)
- *vdb_buf_tmp = color;
- else if(px_opa > LV_OPA_MIN) {
- if(scr_transp == false) {
- *vdb_buf_tmp = lv_color_mix(color, *vdb_buf_tmp, px_opa);
- } else {
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- *vdb_buf_tmp = color_mix_2_alpha(*vdb_buf_tmp, (*vdb_buf_tmp).ch.alpha, color, px_opa);
-#endif
- }
- }
- }
- }
-
- vdb_buf_tmp++;
-
- if(col_bit < 8 - g.bpp) {
- col_bit += g.bpp;
- bitmask = bitmask >> g.bpp;
- } else {
- col_bit = 0;
- bitmask = bitmask_init;
- map_p++;
- }
- }
- col_bit += ((g.box_w - col_end) + col_start) * g.bpp;
-
- map_p += (col_bit >> 3);
- col_bit = col_bit & 0x7;
- vdb_buf_tmp += vdb_width - (col_end - col_start); /*Next row in VDB*/
- }
-}
-
-/**
- * Draw a color map to the display (image)
- * @param cords_p coordinates the color map
- * @param mask_p the map will drawn only on this area (truncated to VDB area)
- * @param map_p pointer to a lv_color_t array
- * @param opa opacity of the map
- * @param chroma_keyed true: enable transparency of LV_IMG_LV_COLOR_TRANSP color pixels
- * @param alpha_byte true: extra alpha byte is inserted for every pixel
- * @param recolor mix the pixels with this color
- * @param recolor_opa the intense of recoloring
- */
-void lv_draw_map(const lv_area_t * cords_p, const lv_area_t * mask_p, const uint8_t * map_p, lv_opa_t opa,
- bool chroma_key, bool alpha_byte, lv_color_t recolor, lv_opa_t recolor_opa)
-{
-
- if(opa < LV_OPA_MIN) return;
- if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
-
- lv_area_t masked_a;
- bool union_ok;
-
- /*Get the union of map size and mask*/
- /* The mask is already truncated to the vdb size
- * in 'lv_refr_area_with_vdb' function */
- union_ok = lv_area_intersect(&masked_a, cords_p, mask_p);
-
- /*If there are common part of the three area then draw to the vdb*/
- if(union_ok == false) return;
-
- /*The pixel size in byte is different if an alpha byte is added too*/
- uint8_t px_size_byte = alpha_byte ? LV_IMG_PX_SIZE_ALPHA_BYTE : sizeof(lv_color_t);
-
- /*If the map starts OUT of the masked area then calc. the first pixel*/
- lv_coord_t map_width = lv_area_get_width(cords_p);
- if(cords_p->y1 < masked_a.y1) {
- map_p += (uint32_t)map_width * ((masked_a.y1 - cords_p->y1)) * px_size_byte;
- }
- if(cords_p->x1 < masked_a.x1) {
- map_p += (masked_a.x1 - cords_p->x1) * px_size_byte;
- }
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
-
- /*Stores coordinates relative to the current VDB*/
- masked_a.x1 = masked_a.x1 - vdb->area.x1;
- masked_a.y1 = masked_a.y1 - vdb->area.y1;
- masked_a.x2 = masked_a.x2 - vdb->area.x1;
- masked_a.y2 = masked_a.y2 - vdb->area.y1;
-
- lv_coord_t vdb_width = lv_area_get_width(&vdb->area);
- lv_color_t * vdb_buf_tmp = vdb->buf_act;
- vdb_buf_tmp += (uint32_t)vdb_width * masked_a.y1; /*Move to the first row*/
- vdb_buf_tmp += (uint32_t)masked_a.x1; /*Move to the first col*/
-
- lv_coord_t row;
- lv_coord_t map_useful_w = lv_area_get_width(&masked_a);
-
- bool scr_transp = false;
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- scr_transp = disp->driver.screen_transp;
-#endif
-
- /*The simplest case just copy the pixels into the VDB*/
- if(chroma_key == false && alpha_byte == false && opa == LV_OPA_COVER && recolor_opa == LV_OPA_TRANSP) {
-
- /*Use the custom VDB write function is exists*/
- if(disp->driver.set_px_cb) {
- lv_coord_t col;
- for(row = masked_a.y1; row <= masked_a.y2; row++) {
- for(col = 0; col < map_useful_w; col++) {
- lv_color_t px_color = *((lv_color_t *)&map_p[(uint32_t)col * px_size_byte]);
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width, col + masked_a.x1, row,
- px_color, opa);
- }
- map_p += map_width * px_size_byte; /*Next row on the map*/
- }
- }
- /*Normal native VDB*/
- else {
- for(row = masked_a.y1; row <= masked_a.y2; row++) {
-#if LV_USE_GPU
- if(disp->driver.gpu_blend_cb == false) {
- sw_mem_blend(vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa);
- } else {
- disp->driver.gpu_blend_cb(&disp->driver, vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa);
- }
-#else
- sw_mem_blend(vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa);
-#endif
- map_p += map_width * px_size_byte; /*Next row on the map*/
- vdb_buf_tmp += vdb_width; /*Next row on the VDB*/
- }
- }
- }
-
- /*In the other cases every pixel need to be checked one-by-one*/
- else {
-
- lv_coord_t col;
- lv_color_t last_img_px = LV_COLOR_BLACK;
- lv_color_t recolored_px = lv_color_mix(recolor, last_img_px, recolor_opa);
- for(row = masked_a.y1; row <= masked_a.y2; row++) {
- for(col = 0; col < map_useful_w; col++) {
- lv_opa_t opa_result = opa;
- uint8_t * px_color_p = (uint8_t *)&map_p[(uint32_t)col * px_size_byte];
- lv_color_t px_color;
-
- /*Calculate with the pixel level alpha*/
- if(alpha_byte) {
-#if LV_COLOR_DEPTH == 8 || LV_COLOR_DEPTH == 1
- px_color.full = px_color_p[0];
-#elif LV_COLOR_DEPTH == 16
- /*Because of Alpha byte 16 bit color can start on odd address which can cause
- * crash*/
- px_color.full = px_color_p[0] + (px_color_p[1] << 8);
-#elif LV_COLOR_DEPTH == 32
- px_color = *((lv_color_t *)px_color_p);
-#endif
- lv_opa_t px_opa = *(px_color_p + LV_IMG_PX_SIZE_ALPHA_BYTE - 1);
- if(px_opa == LV_OPA_TRANSP)
- continue;
- else if(px_opa != LV_OPA_COVER)
- opa_result = (uint32_t)((uint32_t)px_opa * opa_result) >> 8;
- } else {
- px_color = *((lv_color_t *)px_color_p);
- }
-
- /*Handle chroma key*/
- if(chroma_key && px_color.full == disp->driver.color_chroma_key.full) continue;
-
- /*Re-color the pixel if required*/
- if(recolor_opa != LV_OPA_TRANSP) {
- if(last_img_px.full != px_color.full) { /*Minor acceleration: calculate only for
- new colors (save the last)*/
- last_img_px = px_color;
- recolored_px = lv_color_mix(recolor, last_img_px, recolor_opa);
- }
- /*Handle custom VDB write is present*/
- if(disp->driver.set_px_cb) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width, col + masked_a.x1,
- row, recolored_px, opa_result);
- }
- /*Normal native VDB write*/
- else {
- if(opa_result == LV_OPA_COVER)
- vdb_buf_tmp[col].full = recolored_px.full;
- else
- vdb_buf_tmp[col] = lv_color_mix(recolored_px, vdb_buf_tmp[col], opa_result);
- }
- } else {
- /*Handle custom VDB write is present*/
- if(disp->driver.set_px_cb) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)vdb->buf_act, vdb_width, col + masked_a.x1,
- row, px_color, opa_result);
- }
- /*Normal native VDB write*/
- else {
-
- if(opa_result == LV_OPA_COVER)
- vdb_buf_tmp[col] = px_color;
- else {
- if(scr_transp == false) {
- vdb_buf_tmp[col] = lv_color_mix(px_color, vdb_buf_tmp[col], opa_result);
- } else {
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- vdb_buf_tmp[col] = color_mix_2_alpha(vdb_buf_tmp[col], vdb_buf_tmp[col].ch.alpha,
- px_color, opa_result);
-#endif
- }
- }
- }
- }
- }
-
- map_p += map_width * px_size_byte; /*Next row on the map*/
- vdb_buf_tmp += vdb_width; /*Next row on the VDB*/
- }
- }
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * Blend pixels to destination memory using opacity
- * @param dest a memory address. Copy 'src' here.
- * @param src pointer to pixel map. Copy it to 'dest'.
- * @param length number of pixels in 'src'
- * @param opa opacity (0, LV_OPA_TRANSP: transparent ... 255, LV_OPA_COVER, fully cover)
- */
-static void sw_mem_blend(lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa)
-{
- if(opa == LV_OPA_COVER) {
- memcpy(dest, src, length * sizeof(lv_color_t));
- } else {
- uint32_t col;
- for(col = 0; col < length; col++) {
- dest[col] = lv_color_mix(src[col], dest[col], opa);
- }
- }
-}
-
-/**
- * Fill an area with a color
- * @param mem a memory address. Considered to a rectangular window according to 'mem_area'
- * @param mem_width width of the 'mem' buffer
- * @param fill_area coordinates of an area to fill. Relative to 'mem_area'.
- * @param color fill color
- * @param opa opacity (0, LV_OPA_TRANSP: transparent ... 255, LV_OPA_COVER, fully cover)
- */
-static void sw_color_fill(lv_color_t * mem, lv_coord_t mem_width, const lv_area_t * fill_area, lv_color_t color,
- lv_opa_t opa)
-{
- /*Set all row in vdb to the given color*/
- lv_coord_t row;
- lv_coord_t col;
-
- lv_disp_t * disp = lv_refr_get_disp_refreshing();
- if(disp->driver.set_px_cb) {
- for(col = fill_area->x1; col <= fill_area->x2; col++) {
- for(row = fill_area->y1; row <= fill_area->y2; row++) {
- disp->driver.set_px_cb(&disp->driver, (uint8_t *)mem, mem_width, col, row, color, opa);
- }
- }
- } else {
- mem += fill_area->y1 * mem_width; /*Go to the first row*/
-
- /*Run simpler function without opacity*/
- if(opa == LV_OPA_COVER) {
-
- /*Fill the first row with 'color'*/
- for(col = fill_area->x1; col <= fill_area->x2; col++) {
- mem[col] = color;
- }
-
- /*Copy the first row to all other rows*/
- lv_color_t * mem_first = &mem[fill_area->x1];
- lv_coord_t copy_size = (fill_area->x2 - fill_area->x1 + 1) * sizeof(lv_color_t);
- mem += mem_width;
-
- for(row = fill_area->y1 + 1; row <= fill_area->y2; row++) {
- memcpy(&mem[fill_area->x1], mem_first, copy_size);
- mem += mem_width;
- }
- }
- /*Calculate with alpha too*/
- else {
- bool scr_transp = false;
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- scr_transp = disp->driver.screen_transp;
-#endif
-
- lv_color_t bg_tmp = LV_COLOR_BLACK;
- lv_color_t opa_tmp = lv_color_mix(color, bg_tmp, opa);
- for(row = fill_area->y1; row <= fill_area->y2; row++) {
- for(col = fill_area->x1; col <= fill_area->x2; col++) {
- if(scr_transp == false) {
- /*If the bg color changed recalculate the result color*/
- if(mem[col].full != bg_tmp.full) {
- bg_tmp = mem[col];
- opa_tmp = lv_color_mix(color, bg_tmp, opa);
- }
-
- mem[col] = opa_tmp;
-
- } else {
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
- mem[col] = color_mix_2_alpha(mem[col], mem[col].ch.alpha, color, opa);
-#endif
- }
- }
- mem += mem_width;
- }
- }
- }
-}
-
-#if LV_COLOR_DEPTH == 32 && LV_COLOR_SCREEN_TRANSP
-/**
- * Mix two colors. Both color can have alpha value. It requires ARGB888 colors.
- * @param bg_color background color
- * @param bg_opa alpha of the background color
- * @param fg_color foreground color
- * @param fg_opa alpha of the foreground color
- * @return the mixed color. the alpha channel (color.alpha) contains the result alpha
- */
-static inline lv_color_t color_mix_2_alpha(lv_color_t bg_color, lv_opa_t bg_opa, lv_color_t fg_color, lv_opa_t fg_opa)
-{
- /* Pick the foreground if it's fully opaque or the Background is fully transparent*/
- if(fg_opa > LV_OPA_MAX || bg_opa <= LV_OPA_MIN) {
- fg_color.ch.alpha = fg_opa;
- return fg_color;
- }
- /*Transparent foreground: use the Background*/
- else if(fg_opa <= LV_OPA_MIN) {
- return bg_color;
- }
- /*Opaque background: use simple mix*/
- else if(bg_opa >= LV_OPA_MAX) {
- return lv_color_mix(fg_color, bg_color, fg_opa);
- }
- /*Both colors have alpha. Expensive calculation need to be applied*/
- else {
- /*Save the parameters and the result. If they will be asked again don't compute again*/
- static lv_opa_t fg_opa_save = 0;
- static lv_opa_t bg_opa_save = 0;
- static lv_color_t fg_color_save = {{0}};
- static lv_color_t bg_color_save = {{0}};
- static lv_color_t c = {{0}};
-
- if(fg_opa != fg_opa_save || bg_opa != bg_opa_save || fg_color.full != fg_color_save.full ||
- bg_color.full != bg_color_save.full) {
- fg_opa_save = fg_opa;
- bg_opa_save = bg_opa;
- fg_color_save.full = fg_color.full;
- bg_color_save.full = bg_color.full;
- /*Info:
- * https://en.wikipedia.org/wiki/Alpha_compositing#Analytical_derivation_of_the_over_operator*/
- lv_opa_t alpha_res = 255 - ((uint16_t)((uint16_t)(255 - fg_opa) * (255 - bg_opa)) >> 8);
- if(alpha_res == 0) {
- while(1)
- ;
- }
- lv_opa_t ratio = (uint16_t)((uint16_t)fg_opa * 255) / alpha_res;
- c = lv_color_mix(fg_color, bg_color, ratio);
- c.ch.alpha = alpha_res;
- }
- return c;
- }
-}
-#endif
diff --git a/src/lv_draw/lv_draw_basic.h b/src/lv_draw/lv_draw_basic.h
deleted file mode 100644
index 266b0c6cc..000000000
--- a/src/lv_draw/lv_draw_basic.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * @file lv_draw_basic.h
- *
- */
-
-#ifndef LV_DRAW_BASIC_H
-#define LV_DRAW_BASIC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lv_conf.h"
-#else
-#include "../../../lv_conf.h"
-#endif
-
-#include "../lv_font/lv_font.h"
-#include "../lv_misc/lv_color.h"
-#include "../lv_misc/lv_area.h"
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-void lv_draw_px(lv_coord_t x, lv_coord_t y, const lv_area_t * mask_p, lv_color_t color, lv_opa_t opa);
-/**
- * Fill an area in the Virtual Display Buffer
- * @param cords_p coordinates of the area to fill
- * @param mask_p fill only o this mask
- * @param color fill color
- * @param opa opacity of the area (0..255)
- */
-void lv_draw_fill(const lv_area_t * cords_p, const lv_area_t * mask_p, lv_color_t color, lv_opa_t opa);
-
-/**
- * Draw a letter in the Virtual Display Buffer
- * @param pos_p left-top coordinate of the latter
- * @param mask_p the letter will be drawn only on this area
- * @param font_p pointer to font
- * @param letter a letter to draw
- * @param color color of letter
- * @param opa opacity of letter (0..255)
- */
-void lv_draw_letter(const lv_point_t * pos_p, const lv_area_t * mask_p, const lv_font_t * font_p, uint32_t letter,
- lv_color_t color, lv_opa_t opa);
-
-/**
- * Draw a color map to the display (image)
- * @param cords_p coordinates the color map
- * @param mask_p the map will drawn only on this area (truncated to VDB area)
- * @param map_p pointer to a lv_color_t array
- * @param opa opacity of the map
- * @param chroma_keyed true: enable transparency of LV_IMG_LV_COLOR_TRANSP color pixels
- * @param alpha_byte true: extra alpha byte is inserted for every pixel
- * @param recolor mix the pixels with this color
- * @param recolor_opa the intense of recoloring
- */
-void lv_draw_map(const lv_area_t * cords_p, const lv_area_t * mask_p, const uint8_t * map_p, lv_opa_t opa,
- bool chroma_key, bool alpha_byte, lv_color_t recolor, lv_opa_t recolor_opa);
-
-/**********************
- * MACROS
- **********************/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_DRAW_BASIC_H*/
diff --git a/src/lv_draw/lv_draw_blend.c b/src/lv_draw/lv_draw_blend.c
new file mode 100644
index 000000000..7df70c477
--- /dev/null
+++ b/src/lv_draw/lv_draw_blend.c
@@ -0,0 +1,775 @@
+/**
+ * @file lv_draw_blend.c
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_draw_blend.h"
+#include "lv_img_decoder.h"
+#include "../lv_misc/lv_math.h"
+#include "../lv_hal/lv_hal_disp.h"
+#include "../lv_core/lv_refr.h"
+
+/*********************
+ * DEFINES
+ *********************/
+#define FILL_DIRECT_LEN 32
+#define FILL_DIRECT_MASK 0x1F
+#define GPU_WIDTH_LIMIT 32
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+
+static void fill_set_px(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ lv_color_t color, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res);
+
+static void fill_normal(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ lv_color_t color, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res);
+
+static void fill_blended(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ lv_color_t color, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res, lv_blend_mode_t mode);
+
+static void map_set_px(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ const lv_area_t * map_area, const lv_color_t * map_buf, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res);
+
+static void map_normal(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ const lv_area_t * map_area, const lv_color_t * map_buf, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res);
+
+static void map_blended(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ const lv_area_t * map_area, const lv_color_t * map_buf, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res, lv_blend_mode_t mode);
+
+static inline lv_color_t color_blend_true_color_additive(lv_color_t fg, lv_color_t bg, lv_opa_t opa);
+static inline lv_color_t color_blend_true_color_subtractive(lv_color_t fg, lv_color_t bg, lv_opa_t opa);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+
+/**
+ *
+ * @param disp_area
+ * @param clip_area already truncated to disp_arae
+ * @param fill_area
+ * @param disp_buf
+ * @param cf
+ * @param color
+ * @param mask
+ * @param mask_res
+ * @param opa
+ * @param mode
+ */
+void lv_blend_fill(const lv_area_t * clip_area, const lv_area_t * fill_area,
+ lv_color_t color, lv_opa_t * mask, lv_draw_mask_res_t mask_res, lv_opa_t opa,
+ lv_blend_mode_t mode)
+{
+ /*Do not draw transparent things*/
+ if(opa < LV_OPA_MIN) return;
+ if(mask_res == LV_DRAW_MASK_RES_FULL_TRANSP) return;
+
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
+ const lv_area_t * disp_area = &vdb->area;
+ lv_color_t * disp_buf = vdb->buf_act;
+
+
+ /* Get clipped fill area which is the real draw area.
+ * It is always the same or inside `fill_area` */
+ lv_area_t draw_area;
+ bool is_common;
+ is_common = lv_area_intersect(&draw_area, clip_area, fill_area);
+ if(!is_common) return;
+
+ /* Now `draw_area` has absolute coordinates.
+ * Make it relative to `disp_area` to simplify draw to `disp_buf`*/
+ draw_area.x1 -= disp_area->x1;
+ draw_area.y1 -= disp_area->y1;
+ draw_area.x2 -= disp_area->x1;
+ draw_area.y2 -= disp_area->y1;
+
+ /*Round the values in the mask if anti-aliasing is disabled*/
+ if(mask && disp->driver.antialiasing == 0) {
+ lv_coord_t mask_w = lv_area_get_width(&draw_area);
+ lv_coord_t i;
+ for (i = 0; i < mask_w; i++) mask[i] = mask[i] > 128 ? LV_OPA_COVER : LV_OPA_TRANSP;
+ }
+
+ if(disp->driver.set_px_cb) {
+ fill_set_px(disp_area, disp_buf, &draw_area, color, opa, mask, mask_res);
+ }
+ else if(mode == LV_BLEND_MODE_NORMAL) {
+ fill_normal(disp_area, disp_buf, &draw_area, color, opa, mask, mask_res);
+ }
+ else {
+ fill_blended(disp_area, disp_buf, &draw_area, color, opa, mask, mask_res, mode);
+ }
+}
+
+
+void lv_blend_map(const lv_area_t * clip_area, const lv_area_t * map_area, const lv_color_t * map_buf,
+ lv_opa_t * mask, lv_draw_mask_res_t mask_res,
+ lv_opa_t opa, lv_blend_mode_t mode)
+{
+ /*Do not draw transparent things*/
+ if(opa < LV_OPA_MIN) return;
+ if(mask_res == LV_DRAW_MASK_RES_FULL_TRANSP) return;
+
+ /* Get clipped fill area which is the real draw area.
+ * It is always the same or inside `fill_area` */
+ lv_area_t draw_area;
+ bool is_common;
+ is_common = lv_area_intersect(&draw_area, clip_area, map_area);
+ if(!is_common) return;
+
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
+ const lv_area_t * disp_area = &vdb->area;
+ lv_color_t * disp_buf = vdb->buf_act;
+
+ /* Now `draw_area` has absolute coordinates.
+ * Make it relative to `disp_area` to simplify draw to `disp_buf`*/
+ draw_area.x1 -= disp_area->x1;
+ draw_area.y1 -= disp_area->y1;
+ draw_area.x2 -= disp_area->x1;
+ draw_area.y2 -= disp_area->y1;
+
+ /*Round the values in the mask if anti-aliasing is disabled*/
+ if(mask && disp->driver.antialiasing == 0) {
+ lv_coord_t mask_w = lv_area_get_width(&draw_area);
+ lv_coord_t i;
+ for (i = 0; i < mask_w; i++) mask[i] = mask[i] > 128 ? LV_OPA_COVER : LV_OPA_TRANSP;
+ }
+ if(disp->driver.set_px_cb) {
+ map_set_px(disp_area, disp_buf, &draw_area, map_area, map_buf, opa, mask, mask_res);
+ }
+ else if(mode == LV_BLEND_MODE_NORMAL) {
+ map_normal(disp_area, disp_buf, &draw_area, map_area, map_buf, opa, mask, mask_res);
+ } else {
+ map_blended(disp_area, disp_buf, &draw_area, map_area, map_buf, opa, mask, mask_res, mode);
+ }
+}
+
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+static void fill_set_px(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ lv_color_t color, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res)
+{
+
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+
+ /*Get the width of the `disp_area` it will be used to go to the next line*/
+ lv_coord_t disp_w = lv_area_get_width(disp_area);
+
+ lv_coord_t x;
+ lv_coord_t y;
+
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) {
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ disp->driver.set_px_cb(&disp->driver, (void*)disp_buf, disp_w, x, y, color, opa);
+ }
+ }
+ } else {
+ /* The mask is relative to the clipped area.
+ * In the cycles below mask will be indexed from `draw_area.x1`
+ * but it corresponds to zero index. So prepare `mask_tmp` accordingly. */
+ const lv_opa_t * mask_tmp = mask - draw_area->x1;
+
+ /*Get the width of the `draw_area` it will be used to go to the next line of the mask*/
+ lv_coord_t draw_area_w = lv_area_get_width(draw_area);
+
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ disp->driver.set_px_cb(&disp->driver, (void*)disp_buf, disp_w, x, y, color, (uint16_t)((uint16_t)opa * mask_tmp[x]) >> 8);
+ }
+ mask_tmp += draw_area_w;
+ }
+ }
+}
+
+static void fill_normal(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ lv_color_t color, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res)
+{
+
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+
+ /*Get the width of the `disp_area` it will be used to go to the next line*/
+ lv_coord_t disp_w = lv_area_get_width(disp_area);
+
+ /*Get the width of the `draw_area` it will be used to go to the next line of the mask*/
+ lv_coord_t draw_area_w = lv_area_get_width(draw_area);
+
+ /*Create a temp. disp_buf which always point to current line to draw*/
+ lv_color_t * disp_buf_tmp = disp_buf + disp_w * draw_area->y1;
+
+ lv_coord_t x;
+ lv_coord_t y;
+
+ /*Simple fill (maybe with opacity), no masking*/
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) {
+ if(opa > LV_OPA_MAX) {
+ lv_color_t * disp_buf_tmp_ori = disp_buf_tmp;
+
+#if LV_USE_GPU
+ if(disp->driver.gpu_fill_cb && draw_area_w > GPU_WIDTH_LIMIT) {
+ disp->driver.gpu_fill_cb(&disp->driver, disp_buf, disp_w, draw_area, color);
+ return;
+ }
+#endif
+
+ /*Fill the first line. Use `memcpy` because it's faster then simple value assignment*/
+ /*Set the first pixels manually*/
+ lv_coord_t direct_fill_end = LV_MATH_MIN(draw_area->x2, draw_area->x1 + FILL_DIRECT_LEN + (draw_area_w & FILL_DIRECT_MASK) - 1);
+ for(x = draw_area->x1; x <= direct_fill_end ; x++) {
+ disp_buf_tmp[x].full = color.full;
+ }
+
+ for(; x <= draw_area->x2; x += FILL_DIRECT_LEN) {
+ memcpy(&disp_buf_tmp[x], &disp_buf_tmp[draw_area->x1], FILL_DIRECT_LEN * sizeof(lv_color_t));
+ }
+
+ disp_buf_tmp += disp_w;
+
+ for(y = draw_area->y1 + 1; y <= draw_area->y2; y++) {
+ memcpy(&disp_buf_tmp[draw_area->x1], &disp_buf_tmp_ori[draw_area->x1], draw_area_w * sizeof(lv_color_t));
+ disp_buf_tmp += disp_w;
+ }
+ }
+ else {
+
+#if LV_USE_GPU
+ if(disp->driver.gpu_blend_cb && draw_area_w > GPU_WIDTH_LIMIT) {
+ static lv_color_t blend_buf[LV_HOR_RES_MAX];
+ for(x = 0; x < draw_area_w ; x++) blend_buf[x].full = color.full;
+
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ disp->driver.gpu_blend_cb(&disp->driver, &disp_buf_tmp[draw_area->x1], blend_buf, draw_area_w, opa);
+ disp_buf_tmp += disp_w;
+ }
+ return;
+ }
+#endif
+ lv_color_t last_dest_color = LV_COLOR_BLACK;
+ lv_color_t last_res_color = lv_color_mix(color, last_dest_color, opa);
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ if(last_dest_color.full != disp_buf_tmp[x].full) {
+ last_dest_color = disp_buf_tmp[x];
+
+#if LV_COLOR_SCREEN_TRANSP
+ if(disp->driver.screen_transp) {
+ lv_color_mix_with_alpha(disp_buf_tmp[x], disp_buf_tmp[x].ch.alpha, color, opa, &last_res_color, &last_res_color.ch.alpha);
+ } else
+#endif
+ {
+ last_res_color = lv_color_mix(color, disp_buf_tmp[x], opa);
+ }
+ }
+ disp_buf_tmp[x] = last_res_color;
+ }
+ disp_buf_tmp += disp_w;
+ }
+ }
+ }
+ /*Masked*/
+ else {
+ /* The mask is relative to the clipped area.
+ * In the cycles below mask will be indexed from `draw_area.x1`
+ * but it corresponds to zero index. So prepare `mask_tmp` accordingly. */
+ const lv_opa_t * mask_tmp = mask - draw_area->x1;
+
+ /*Buffer the result color to avoid recalculating the same color*/
+ lv_color_t last_dest_color;
+ lv_color_t last_res_color;
+ lv_opa_t last_mask = LV_OPA_TRANSP;
+ last_dest_color.full = disp_buf_tmp[0].full;
+ last_res_color.full = disp_buf_tmp[0].full;
+
+ /*Only the mask matters*/
+ if(opa > LV_OPA_MAX) {
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ if(mask_tmp[x] == 0) continue;
+ if(mask_tmp[x] != last_mask || last_dest_color.full != disp_buf_tmp[x].full)
+ {
+#if LV_COLOR_SCREEN_TRANSP
+ if(disp->driver.screen_transp) {
+ lv_color_mix_with_alpha(disp_buf_tmp[x], disp_buf_tmp[x].ch.alpha, color, mask_tmp[x], &last_res_color, &last_res_color.ch.alpha);
+ } else
+#endif
+ {
+ if(mask_tmp[x] > LV_OPA_MAX) last_res_color = color;
+ else if(mask_tmp[x] < LV_OPA_MIN) last_res_color = disp_buf_tmp[x];
+ else if(disp_buf_tmp[x].full == color.full) last_res_color = color;
+ else last_res_color = lv_color_mix(color, disp_buf_tmp[x], mask_tmp[x]);
+ }
+ last_mask = mask_tmp[x];
+ last_dest_color.full = disp_buf_tmp[x].full;
+ }
+ disp_buf_tmp[x] = last_res_color;
+ }
+ disp_buf_tmp += disp_w;
+ mask_tmp += draw_area_w;
+ }
+ }
+ /*Handle opa and mask values too*/
+ else {
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ if(mask_tmp[x] == 0) continue;
+ if(mask_tmp[x] != last_mask || last_dest_color.full != disp_buf_tmp[x].full) {
+ lv_opa_t opa_tmp = (uint16_t)((uint16_t)mask_tmp[x] * opa) >> 8;
+#if LV_COLOR_SCREEN_TRANSP
+ if(disp->driver.screen_transp) {
+ lv_color_mix_with_alpha(disp_buf_tmp[x], disp_buf_tmp[x].ch.alpha, color, opa_tmp, &last_res_color, &last_res_color.ch.alpha);
+ } else
+#endif
+ {
+ if(opa_tmp > LV_OPA_MAX) last_res_color = lv_color_mix(color, disp_buf_tmp[x], mask_tmp[x]);
+ else if(opa_tmp < LV_OPA_MIN) last_res_color = disp_buf_tmp[x];
+ else last_res_color = lv_color_mix(color, disp_buf_tmp[x],opa_tmp);
+ }
+ last_mask = mask_tmp[x];
+ last_dest_color.full = disp_buf_tmp[x].full;
+ }
+ disp_buf_tmp[x] = last_res_color;
+ }
+ disp_buf_tmp += disp_w;
+ mask_tmp += draw_area_w;
+ }
+ }
+ }
+}
+
+
+static void fill_blended(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ lv_color_t color, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res, lv_blend_mode_t mode)
+{
+ /*Get the width of the `disp_area` it will be used to go to the next line*/
+ lv_coord_t disp_w = lv_area_get_width(disp_area);
+
+ /*Create a temp. disp_buf which always point to current line to draw*/
+ lv_color_t * disp_buf_tmp = disp_buf + disp_w * draw_area->y1;
+
+
+ lv_color_t (*blend_fp)(lv_color_t, lv_color_t, lv_opa_t);
+ switch (mode) {
+ case LV_BLEND_MODE_ADDITIVE:
+ blend_fp = color_blend_true_color_additive;
+ break;
+ case LV_BLEND_MODE_SUBTRACTIVE:
+ blend_fp = color_blend_true_color_subtractive;
+ break;
+ default:
+ LV_LOG_WARN("fill_blended: unsupported blend mode");
+ return;
+ break;
+ }
+
+ lv_coord_t x;
+ lv_coord_t y;
+
+ /*Simple fill (maybe with opacity), no masking*/
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) {
+ lv_color_t last_dest_color = LV_COLOR_BLACK;
+ lv_color_t last_res_color = lv_color_mix(color, last_dest_color, opa);
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ if(last_dest_color.full != disp_buf_tmp[x].full) {
+ last_dest_color = disp_buf_tmp[x];
+ last_res_color = blend_fp(color, disp_buf_tmp[x], opa);
+ }
+ disp_buf_tmp[x] = last_res_color;
+ }
+ disp_buf_tmp += disp_w;
+ }
+ }
+ /*Masked*/
+ else {
+ /*Get the width of the `draw_area` it will be used to go to the next line of the mask*/
+ lv_coord_t draw_area_w = lv_area_get_width(draw_area);
+
+ /* The mask is relative to the clipped area.
+ * In the cycles below mask will be indexed from `draw_area.x1`
+ * but it corresponds to zero index. So prepare `mask_tmp` accordingly. */
+ const lv_opa_t * mask_tmp = mask - draw_area->x1;
+
+ /*Buffer the result color to avoid recalculating the same color*/
+ lv_color_t last_dest_color;
+ lv_color_t last_res_color;
+ lv_opa_t last_mask = LV_OPA_TRANSP;
+ last_dest_color.full = disp_buf_tmp[0].full;
+ last_res_color.full = disp_buf_tmp[0].full;
+
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ if(mask_tmp[x] == 0) continue;
+ if(mask_tmp[x] != last_mask || last_dest_color.full != disp_buf_tmp[x].full) {
+ lv_opa_t opa_tmp = mask_tmp[x] >= LV_OPA_MAX ? opa : (uint16_t)((uint16_t)mask_tmp[x] * opa) >> 8;
+
+ last_res_color = blend_fp(color, disp_buf_tmp[x], opa_tmp);
+ last_mask = mask_tmp[x];
+ last_dest_color.full = disp_buf_tmp[x].full;
+ }
+ disp_buf_tmp[x] = last_res_color;
+ }
+ disp_buf_tmp += disp_w;
+ mask_tmp += draw_area_w;
+ }
+ }
+}
+
+static void map_set_px(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ const lv_area_t * map_area, const lv_color_t * map_buf, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res)
+
+{
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+
+ /*Get the width of the `disp_area` it will be used to go to the next line*/
+ lv_coord_t disp_w = lv_area_get_width(disp_area);
+
+ /*Get the width of the `draw_area` it will be used to go to the next line of the mask*/
+ lv_coord_t draw_area_w = lv_area_get_width(draw_area);
+
+ /*Get the width of the `mask_area` it will be used to go to the next line*/
+ lv_coord_t map_w = lv_area_get_width(map_area);
+
+ /*Create a temp. map_buf which always point to current line to draw*/
+ const lv_color_t * map_buf_tmp = map_buf + map_w * (draw_area->y1 - (map_area->y1 - disp_area->y1));
+
+ map_buf_tmp += (draw_area->x1 - (map_area->x1 - disp_area->x1));
+ map_buf_tmp -= draw_area->x1;
+ lv_coord_t x;
+ lv_coord_t y;
+
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) {
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ disp->driver.set_px_cb(&disp->driver, (void*)disp_buf, disp_w, x, y, map_buf_tmp[x], opa);
+ }
+ map_buf_tmp += map_w;
+ }
+ } else {
+ /* The mask is relative to the clipped area.
+ * In the cycles below mask will be indexed from `draw_area.x1`
+ * but it corresponds to zero index. So prepare `mask_tmp` accordingly. */
+ const lv_opa_t * mask_tmp = mask - draw_area->x1;
+
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ disp->driver.set_px_cb(&disp->driver, (void*)disp_buf, disp_w, x, y, map_buf_tmp[x], (uint16_t)((uint16_t)opa * mask_tmp[x]) >> 8);
+ }
+ mask_tmp += draw_area_w;
+ map_buf_tmp += map_w;
+ }
+ }
+}
+
+
+static void map_normal(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ const lv_area_t * map_area, const lv_color_t * map_buf, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res)
+{
+
+ /*Get the width of the `disp_area` it will be used to go to the next line*/
+ lv_coord_t disp_w = lv_area_get_width(disp_area);
+
+ /*Get the width of the `draw_area` it will be used to go to the next line of the mask*/
+ lv_coord_t draw_area_w = lv_area_get_width(draw_area);
+
+ /*Get the width of the `mask_area` it will be used to go to the next line*/
+ lv_coord_t map_w = lv_area_get_width(map_area);
+
+ /*Create a temp. disp_buf which always point to current line to draw*/
+ lv_color_t * disp_buf_tmp = disp_buf + disp_w * draw_area->y1;
+
+ /*Create a temp. map_buf which always point to current line to draw*/
+ const lv_color_t * map_buf_tmp = map_buf + map_w * (draw_area->y1 - (map_area->y1 - disp_area->y1));
+
+
+#if LV_COLOR_SCREEN_TRANSP
+ lv_opa_t opa_composed;
+#endif
+
+ lv_coord_t x;
+ lv_coord_t y;
+
+ /*Simple fill (maybe with opacity), no masking*/
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) {
+ /*Go to the first px of the row*/
+ map_buf_tmp += (draw_area->x1 - (map_area->x1 - disp_area->x1));
+#if LV_USE_GPU
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ if(disp->driver.gpu_blend_cb &&
+ ((draw_area_w > GPU_WIDTH_LIMIT * 4 && opa == LV_OPA_COVER) ||
+ (draw_area_w > GPU_WIDTH_LIMIT && opa != LV_OPA_COVER))) {
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ disp->driver.gpu_blend_cb(&disp->driver, &disp_buf_tmp[draw_area->x1], map_buf_tmp, draw_area_w, opa);
+ disp_buf_tmp += disp_w;
+ map_buf_tmp += map_w;
+ }
+ return;
+ }
+#endif
+
+ if(opa > LV_OPA_MAX) {
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ memcpy(&disp_buf_tmp[draw_area->x1], map_buf_tmp, draw_area_w * sizeof(lv_color_t));
+ disp_buf_tmp += disp_w;
+ map_buf_tmp += map_w;
+ }
+ }
+ else {
+ /*The map will be indexed from `draw_area->x1` so compensate it.*/
+ map_buf_tmp -= draw_area->x1;
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+#if LV_COLOR_SCREEN_TRANSP
+ if(disp->driver.screen_transp) {
+ lv_color_mix_with_alpha(disp_buf_tmp[x], disp_buf_tmp[x].ch.alpha, map_buf_tmp[x], opa, &disp_buf_tmp[x], &disp_buf_tmp[x].ch.alpha);
+ } else
+#endif
+ {
+ disp_buf_tmp[x] = lv_color_mix(map_buf_tmp[x], disp_buf_tmp[x], opa);
+ }
+ }
+ disp_buf_tmp += disp_w;
+ map_buf_tmp += map_w;
+ }
+ }
+ }
+ /*Masked*/
+ else {
+ /* The mask is relative to the clipped area.
+ * In the cycles below mask will be indexed from `draw_area.x1`
+ * but it corresponds to zero index. So prepare `mask_tmp` accordingly. */
+ const lv_opa_t * mask_tmp = mask - draw_area->x1;
+
+ /*Buffer the result color to avoid recalculating the same color*/
+ lv_color_t res_color;
+ res_color.full = disp_buf_tmp[0].full;
+
+ /*Only the mask matters*/
+ if(opa > LV_OPA_MAX) {
+ /*Go to the first pixel of the row */
+ map_buf_tmp += (draw_area->x1 - (map_area->x1 - disp_area->x1));
+ map_buf_tmp -= draw_area->x1;
+
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ if(mask_tmp[x] < LV_OPA_MIN) continue;
+#if LV_COLOR_SCREEN_TRANSP
+ if(disp->driver.screen_transp) {
+ lv_color_mix_with_alpha(disp_buf_tmp[x], disp_buf_tmp[x].ch.alpha, map_buf_tmp[x], mask_tmp[x], &res_color, &opa_composed);
+ res_color.ch.alpha = opa_composed;
+ } else
+#endif
+ {
+ if(mask_tmp[x] > LV_OPA_MAX) res_color = map_buf_tmp[x];
+ else res_color = lv_color_mix(map_buf_tmp[x], disp_buf_tmp[x], mask_tmp[x]);
+ }
+ disp_buf_tmp[x] = res_color;//lv_color_mix(map_buf_tmp[x], disp_buf_tmp[x], mask_tmp[x]);
+ }
+ disp_buf_tmp += disp_w;
+ mask_tmp += draw_area_w;
+ map_buf_tmp += map_w;
+ }
+ }
+ /*Handle opa and mask values too*/
+ else {
+ map_buf_tmp -= draw_area->x1;
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ if(mask_tmp[x] == 0) continue;
+ lv_opa_t opa_tmp = mask_tmp[x] >= LV_OPA_MAX ? opa : ((opa * mask_tmp[x]) >> 8);
+#if LV_COLOR_SCREEN_TRANSP
+ if(disp->driver.screen_transp) {
+ lv_color_mix_with_alpha(disp_buf_tmp[x], disp_buf_tmp[x].ch.alpha, map_buf_tmp[x], opa_tmp, &disp_buf_tmp[x], &disp_buf_tmp[x].ch.alpha);
+ } else
+#endif
+ {
+ disp_buf_tmp[x] = lv_color_mix(map_buf_tmp[x], disp_buf_tmp[x], opa_tmp);
+ }
+ }
+ disp_buf_tmp += disp_w;
+ mask_tmp += draw_area_w;
+ map_buf_tmp += map_w;
+ }
+ }
+ }
+}
+
+static void map_blended(const lv_area_t * disp_area, lv_color_t * disp_buf, const lv_area_t * draw_area,
+ const lv_area_t * map_area, const lv_color_t * map_buf, lv_opa_t opa,
+ const lv_opa_t * mask, lv_draw_mask_res_t mask_res, lv_blend_mode_t mode)
+{
+
+ /*Get the width of the `disp_area` it will be used to go to the next line*/
+ lv_coord_t disp_w = lv_area_get_width(disp_area);
+
+ /*Get the width of the `draw_area` it will be used to go to the next line of the mask*/
+ lv_coord_t draw_area_w = lv_area_get_width(draw_area);
+
+ /*Get the width of the `mask_area` it will be used to go to the next line*/
+ lv_coord_t map_w = lv_area_get_width(map_area);
+
+ /*Create a temp. disp_buf which always point to current line to draw*/
+ lv_color_t * disp_buf_tmp = disp_buf + disp_w * draw_area->y1;
+
+ /*Create a temp. map_buf which always point to current line to draw*/
+ const lv_color_t * map_buf_tmp = map_buf + map_w * (draw_area->y1 - (map_area->y1 - disp_area->y1));
+
+ lv_color_t (*blend_fp)(lv_color_t, lv_color_t, lv_opa_t);
+ switch (mode) {
+ case LV_BLEND_MODE_ADDITIVE:
+ blend_fp = color_blend_true_color_additive;
+ break;
+ case LV_BLEND_MODE_SUBTRACTIVE:
+ blend_fp = color_blend_true_color_subtractive;
+ break;
+ default:
+ LV_LOG_WARN("fill_blended: unsupported blend mode");
+ return;
+ break;
+ }
+
+ lv_coord_t x;
+ lv_coord_t y;
+
+ /*Simple fill (maybe with opacity), no masking*/
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) {
+ /*Go to the first px of the row*/
+ map_buf_tmp += (draw_area->x1 - (map_area->x1 - disp_area->x1));
+
+ /*The map will be indexed from `draw_area->x1` so compensate it.*/
+ map_buf_tmp -= draw_area->x1;
+
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ disp_buf_tmp[x] = blend_fp(map_buf_tmp[x], disp_buf_tmp[x], opa);
+ }
+ disp_buf_tmp += disp_w;
+ map_buf_tmp += map_w;
+ }
+ }
+ /*Masked*/
+ else {
+ /* The mask is relative to the clipped area.
+ * In the cycles below mask will be indexed from `draw_area.x1`
+ * but it corresponds to zero index. So prepare `mask_tmp` accordingly. */
+ const lv_opa_t * mask_tmp = mask - draw_area->x1;
+
+ map_buf_tmp -= draw_area->x1;
+ for(y = draw_area->y1; y <= draw_area->y2; y++) {
+ for(x = draw_area->x1; x <= draw_area->x2; x++) {
+ if(mask_tmp[x] == 0) continue;
+ lv_opa_t opa_tmp = mask_tmp[x] >= LV_OPA_MAX ? opa : ((opa * mask_tmp[x]) >> 8);
+ disp_buf_tmp[x] = blend_fp(map_buf_tmp[x], disp_buf_tmp[x], opa_tmp);
+ }
+ disp_buf_tmp += disp_w;
+ mask_tmp += draw_area_w;
+ map_buf_tmp += map_w;
+ }
+ }
+}
+
+static inline lv_color_t color_blend_true_color_additive(lv_color_t fg, lv_color_t bg, lv_opa_t opa)
+{
+
+ if(opa <= LV_OPA_MIN) return bg;
+
+ uint16_t tmp;
+ tmp = bg.ch.red + fg.ch.red;
+#if LV_COLOR_DEPTH == 8
+ fg.ch.red = LV_MATH_MIN(tmp, 7);
+#elif LV_COLOR_DEPTH == 16
+ fg.ch.red = LV_MATH_MIN(tmp, 31);
+#elif LV_COLOR_DEPTH == 32
+ fg.ch.red = LV_MATH_MIN(tmp, 255);
+#endif
+
+#if LV_COLOR_DEPTH == 8
+ fg.ch.green = LV_MATH_MIN(tmp, 7);
+#elif LV_COLOR_DEPTH == 16
+#if LV_COLOR_16_SWAP == 0
+ tmp = bg.ch.green + fg.ch.green;
+ fg.ch.green = LV_MATH_MIN(tmp, 63);
+#else
+ tmp = (bg.ch.green_h << 3) + bg.ch.green_l + (fg.ch.green_h << 3) + fg.ch.green_l;
+ tmp = LV_MATH_MIN(tmp, 63);
+ fg.ch.green_h = tmp >> 3;
+ fg.ch.green_l = tmp & 0x7;
+#endif
+
+#elif LV_COLOR_DEPTH == 32
+ fg.ch.green = LV_MATH_MIN(tmp, 255);
+#endif
+
+ tmp = bg.ch.blue + fg.ch.blue;
+#if LV_COLOR_DEPTH == 8
+ fg.ch.blue = LV_MATH_MIN(tmp, 4);
+#elif LV_COLOR_DEPTH == 16
+ fg.ch.blue = LV_MATH_MIN(tmp, 31);
+#elif LV_COLOR_DEPTH == 32
+ fg.ch.blue = LV_MATH_MIN(tmp, 255);
+#endif
+
+ if(opa == LV_OPA_COVER) return fg;
+
+ return lv_color_mix(fg, bg, opa);
+}
+
+static inline lv_color_t color_blend_true_color_subtractive(lv_color_t fg, lv_color_t bg, lv_opa_t opa)
+{
+
+ if(opa <= LV_OPA_MIN) return bg;
+
+ int16_t tmp;
+ tmp = bg.ch.red - fg.ch.red;
+ fg.ch.red = LV_MATH_MAX(tmp, 0);
+
+#if LV_COLOR_16_SWAP == 0
+ tmp = bg.ch.green - fg.ch.green;
+ fg.ch.green = LV_MATH_MAX(tmp, 0);
+#else
+ tmp = (bg.ch.green_h << 3) + bg.ch.green_l + (fg.ch.green_h << 3) + fg.ch.green_l;
+ tmp = LV_MATH_MAX(tmp, 0);
+ fg.ch.green_h = tmp >> 3;
+ fg.ch.green_l = tmp & 0x7;
+#endif
+
+ tmp = bg.ch.blue - fg.ch.blue;
+ fg.ch.blue = LV_MATH_MAX(tmp, 0);
+
+ if(opa == LV_OPA_COVER) return fg;
+
+ return lv_color_mix(fg, bg, opa);
+}
diff --git a/src/lv_draw/lv_draw_blend.h b/src/lv_draw/lv_draw_blend.h
new file mode 100644
index 000000000..c2ebe2849
--- /dev/null
+++ b/src/lv_draw/lv_draw_blend.h
@@ -0,0 +1,54 @@
+/**
+ * @file lv_draw_blend.h
+ *
+ */
+
+#ifndef LV_DRAW_BLEND_H
+#define LV_DRAW_BLEND_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "../lv_misc/lv_color.h"
+#include "../lv_misc/lv_area.h"
+#include "lv_draw_mask.h"
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+enum {
+ LV_BLEND_MODE_NORMAL,
+ LV_BLEND_MODE_ADDITIVE,
+ LV_BLEND_MODE_SUBTRACTIVE,
+};
+
+typedef uint8_t lv_blend_mode_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+void lv_blend_fill(const lv_area_t * clip_area, const lv_area_t * fill_area, lv_color_t color,
+ lv_opa_t * mask, lv_draw_mask_res_t mask_res, lv_opa_t opa, lv_blend_mode_t mode);
+
+
+void lv_blend_map(const lv_area_t * clip_area, const lv_area_t * map_area, const lv_color_t * map_buf,
+ lv_opa_t * mask, lv_draw_mask_res_t mask_res, lv_opa_t opa, lv_blend_mode_t mode);
+
+/**********************
+ * MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_DRAW_BLEND_H*/
diff --git a/src/lv_draw/lv_draw_img.c b/src/lv_draw/lv_draw_img.c
index 8b5048bf6..a52537bdb 100644
--- a/src/lv_draw/lv_draw_img.c
+++ b/src/lv_draw/lv_draw_img.c
@@ -8,7 +8,11 @@
*********************/
#include "lv_draw_img.h"
#include "lv_img_cache.h"
+#include "../lv_hal/lv_hal_disp.h"
#include "../lv_misc/lv_log.h"
+#include "../lv_core/lv_refr.h"
+#include "../lv_misc/lv_mem.h"
+#include "../lv_misc/lv_math.h"
/*********************
* DEFINES
@@ -22,7 +26,10 @@
* STATIC PROTOTYPES
**********************/
static lv_res_t lv_img_draw_core(const lv_area_t * coords, const lv_area_t * mask, const void * src,
- const lv_style_t * style, lv_opa_t opa_scale);
+ const lv_style_t * style, uint16_t angle, lv_point_t * pivot, uint16_t zoom, bool antialaias, lv_opa_t opa_scale);
+
+static void lv_draw_map(const lv_area_t * map_area, const lv_area_t * clip_area, const uint8_t * map_p, lv_opa_t opa,
+ bool chroma_key, bool alpha_byte, const lv_style_t * style, uint16_t angle, lv_point_t * pivot, uint16_t zoom, bool antialaias);
/**********************
* STATIC VARIABLES
@@ -42,348 +49,56 @@ static lv_res_t lv_img_draw_core(const lv_area_t * coords, const lv_area_t * mas
* @param mask the image will be drawn only in this area
* @param src pointer to a lv_color_t array which contains the pixels of the image
* @param style style of the image
+ * @param angle rotation angle of the image
+ * @param center rotation center of the image
+ * @param antialias anti-alias transformations (rotate, zoom) or not
* @param opa_scale scale down all opacities by the factor
*/
void lv_draw_img(const lv_area_t * coords, const lv_area_t * mask, const void * src, const lv_style_t * style,
- lv_opa_t opa_scale)
+ uint16_t angle, lv_point_t * center, uint16_t zoom, bool antialias, lv_opa_t opa_scale)
{
if(src == NULL) {
LV_LOG_WARN("Image draw: src is NULL");
lv_draw_rect(coords, mask, &lv_style_plain, LV_OPA_COVER);
- lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, -1, -1, NULL);
+ lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, NULL, NULL, LV_BIDI_DIR_LTR);
return;
}
lv_res_t res;
- res = lv_img_draw_core(coords, mask, src, style, opa_scale);
+ res = lv_img_draw_core(coords, mask, src, style, angle, center, zoom, antialias, opa_scale);
if(res == LV_RES_INV) {
LV_LOG_WARN("Image draw error");
lv_draw_rect(coords, mask, &lv_style_plain, LV_OPA_COVER);
- lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, -1, -1, NULL);
+ lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, "No\ndata", LV_TXT_FLAG_NONE, NULL, NULL, NULL, LV_BIDI_DIR_LTR);
return;
}
}
-/**
- * Get the color of an image's pixel
- * @param dsc an image descriptor
- * @param x x coordinate of the point to get
- * @param y x coordinate of the point to get
- * @param style style of the image. In case of `LV_IMG_CF_ALPHA_1/2/4/8` `style->image.color` shows
- * the color. Can be `NULL` but for `ALPHA` images black will be returned. In other cases it is not
- * used.
- * @return color of the point
- */
-lv_color_t lv_img_buf_get_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, const lv_style_t * style)
-{
- lv_color_t p_color = LV_COLOR_BLACK;
- if(x >= dsc->header.w) {
- x = dsc->header.w - 1;
- LV_LOG_WARN("lv_canvas_get_px: x is too large (out of canvas)");
- } else if(x < 0) {
- x = 0;
- LV_LOG_WARN("lv_canvas_get_px: x is < 0 (out of canvas)");
- }
-
- if(y >= dsc->header.h) {
- y = dsc->header.h - 1;
- LV_LOG_WARN("lv_canvas_get_px: y is too large (out of canvas)");
- } else if(y < 0) {
- y = 0;
- LV_LOG_WARN("lv_canvas_get_px: y is < 0 (out of canvas)");
- }
-
- uint8_t * buf_u8 = (uint8_t *)dsc->data;
-
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR || dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED ||
- dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf) >> 3;
- uint32_t px = dsc->header.w * y * px_size + x * px_size;
- memcpy(&p_color, &buf_u8[px], sizeof(lv_color_t));
-#if LV_COLOR_SIZE == 32
- p_color.ch.alpha = 0xFF; /*Only the color should be get so use a deafult alpha value*/
-#endif
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT) {
- buf_u8 += 4 * 2;
- uint8_t bit = x & 0x7;
- x = x >> 3;
-
- /* Get the current pixel.
- * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 8, 16, 24 ...*/
- uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
- p_color.full = (buf_u8[px] & (1 << (7 - bit))) >> (7 - bit);
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_2BIT) {
- buf_u8 += 4 * 4;
- uint8_t bit = (x & 0x3) * 2;
- x = x >> 2;
-
- /* Get the current pixel.
- * dsc->header.w + 3 means rounding up to 4 because the lines are byte aligned
- * so the possible real width are 4, 8, 12 ...*/
- uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
- p_color.full = (buf_u8[px] & (3 << (6 - bit))) >> (6 - bit);
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_4BIT) {
- buf_u8 += 4 * 16;
- uint8_t bit = (x & 0x1) * 4;
- x = x >> 1;
-
- /* Get the current pixel.
- * dsc->header.w + 1 means rounding up to 2 because the lines are byte aligned
- * so the possible real width are 2, 4, 6 ...*/
- uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
- p_color.full = (buf_u8[px] & (0xF << (4 - bit))) >> (4 - bit);
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_8BIT) {
- buf_u8 += 4 * 256;
- uint32_t px = dsc->header.w * y + x;
- p_color.full = buf_u8[px];
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT || dsc->header.cf == LV_IMG_CF_ALPHA_2BIT ||
- dsc->header.cf == LV_IMG_CF_ALPHA_4BIT || dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
- if(style)
- p_color = style->image.color;
- else
- p_color = LV_COLOR_BLACK;
- }
- return p_color;
-}
-
-/**
- * Get the alpha value of an image's pixel
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @return alpha value of the point
- */
-lv_opa_t lv_img_buf_get_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y)
-{
- if(x >= dsc->header.w) {
- x = dsc->header.w - 1;
- LV_LOG_WARN("lv_canvas_get_px: x is too large (out of canvas)");
- } else if(x < 0) {
- x = 0;
- LV_LOG_WARN("lv_canvas_get_px: x is < 0 (out of canvas)");
- }
-
- if(y >= dsc->header.h) {
- y = dsc->header.h - 1;
- LV_LOG_WARN("lv_canvas_get_px: y is too large (out of canvas)");
- } else if(y < 0) {
- y = 0;
- LV_LOG_WARN("lv_canvas_get_px: y is < 0 (out of canvas)");
- }
-
- uint8_t * buf_u8 = (uint8_t *)dsc->data;
-
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
- uint32_t px = dsc->header.w * y * LV_IMG_PX_SIZE_ALPHA_BYTE + x * LV_IMG_PX_SIZE_ALPHA_BYTE;
- return buf_u8[px + LV_IMG_PX_SIZE_ALPHA_BYTE - 1];
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT) {
- uint8_t bit = x & 0x7;
- x = x >> 3;
-
- /* Get the current pixel.
- * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 8 ,16, 24 ...*/
- uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
- uint8_t px_opa = (buf_u8[px] & (1 << (7 - bit))) >> (7 - bit);
- return px_opa ? LV_OPA_TRANSP : LV_OPA_COVER;
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_2BIT) {
- const uint8_t opa_table[4] = {0, 85, 170, 255}; /*Opacity mapping with bpp = 2*/
-
- uint8_t bit = (x & 0x3) * 2;
- x = x >> 2;
-
- /* Get the current pixel.
- * dsc->header.w + 4 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 4 ,8, 12 ...*/
- uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
- uint8_t px_opa = (buf_u8[px] & (3 << (6 - bit))) >> (6 - bit);
- return opa_table[px_opa];
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_4BIT) {
- const uint8_t opa_table[16] = {0, 17, 34, 51, /*Opacity mapping with bpp = 4*/
- 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255};
-
- uint8_t bit = (x & 0x1) * 4;
- x = x >> 1;
-
- /* Get the current pixel.
- * dsc->header.w + 1 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 2 ,4, 6 ...*/
- uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
- uint8_t px_opa = (buf_u8[px] & (0xF << (4 - bit))) >> (4 - bit);
- return opa_table[px_opa];
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
- uint32_t px = dsc->header.w * y + x;
- return buf_u8[px];
- }
-
- return LV_OPA_COVER;
-}
-
-/**
- * Set the color of a pixel of an image. The alpha channel won't be affected.
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param c color of the point
- */
-void lv_img_buf_set_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t c)
-{
- uint8_t * buf_u8 = (uint8_t *)dsc->data;
-
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR || dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf) >> 3;
- uint32_t px = dsc->header.w * y * px_size + x * px_size;
- memcpy(&buf_u8[px], &c, px_size);
- } else if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf) >> 3;
- uint32_t px = dsc->header.w * y * px_size + x * px_size;
- memcpy(&buf_u8[px], &c, px_size - 1); /*-1 to not overwrite the alpha value*/
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT) {
- buf_u8 += sizeof(lv_color32_t) * 2; /*Skip the palette*/
-
- uint8_t bit = x & 0x7;
- x = x >> 3;
-
- /* Get the current pixel.
- * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 8 ,16, 24 ...*/
- uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
- buf_u8[px] = buf_u8[px] & ~(1 << (7 - bit));
- buf_u8[px] = buf_u8[px] | ((c.full & 0x1) << (7 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_2BIT) {
- buf_u8 += sizeof(lv_color32_t) * 4; /*Skip the palette*/
- uint8_t bit = (x & 0x3) * 2;
- x = x >> 2;
-
- /* Get the current pixel.
- * dsc->header.w + 3 means rounding up to 4 because the lines are byte aligned
- * so the possible real width are 4, 8 ,12 ...*/
- uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
-
- buf_u8[px] = buf_u8[px] & ~(3 << (6 - bit));
- buf_u8[px] = buf_u8[px] | ((c.full & 0x3) << (6 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_4BIT) {
- buf_u8 += sizeof(lv_color32_t) * 16; /*Skip the palette*/
- uint8_t bit = (x & 0x1) * 4;
- x = x >> 1;
-
- /* Get the current pixel.
- * dsc->header.w + 1 means rounding up to 2 because the lines are byte aligned
- * so the possible real width are 2 ,4, 6 ...*/
- uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
- buf_u8[px] = buf_u8[px] & ~(0xF << (4 - bit));
- buf_u8[px] = buf_u8[px] | ((c.full & 0xF) << (4 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_INDEXED_8BIT) {
- buf_u8 += sizeof(lv_color32_t) * 256; /*Skip the palette*/
- uint32_t px = dsc->header.w * y + x;
- buf_u8[px] = c.full;
- }
-}
-
-/**
- * Set the alpha value of a pixel of an image. The color won't be affected
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param opa the desired opacity
- */
-void lv_img_buf_set_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_opa_t opa)
-{
- uint8_t * buf_u8 = (uint8_t *)dsc->data;
-
- if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf) >> 3;
- uint32_t px = dsc->header.w * y * px_size + x * px_size;
- buf_u8[px + px_size - 1] = opa;
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT) {
- opa = opa >> 7; /*opa -> [0,1]*/
- uint8_t bit = x & 0x7;
- x = x >> 3;
-
- /* Get the current pixel.
- * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 8 ,16, 24 ...*/
- uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
- buf_u8[px] = buf_u8[px] & ~(1 << (7 - bit));
- buf_u8[px] = buf_u8[px] | ((opa & 0x1) << (7 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_2BIT) {
- opa = opa >> 6; /*opa -> [0,3]*/
- uint8_t bit = (x & 0x3) * 2;
- x = x >> 2;
-
- /* Get the current pixel.
- * dsc->header.w + 4 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 4 ,8, 12 ...*/
- uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
- buf_u8[px] = buf_u8[px] & ~(3 << (6 - bit));
- buf_u8[px] = buf_u8[px] | ((opa & 0x3) << (6 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_4BIT) {
- opa = opa >> 4; /*opa -> [0,15]*/
- uint8_t bit = (x & 0x1) * 4;
- x = x >> 1;
-
- /* Get the current pixel.
- * dsc->header.w + 1 means rounding up to 8 because the lines are byte aligned
- * so the possible real width are 2 ,4, 6 ...*/
- uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
- buf_u8[px] = buf_u8[px] & ~(0xF << (4 - bit));
- buf_u8[px] = buf_u8[px] | ((opa & 0xF) << (4 - bit));
- } else if(dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
- uint32_t px = dsc->header.w * y + x;
- buf_u8[px] = opa;
- }
-}
-
-/**
- * Set the palette color of an indexed image. Valid only for `LV_IMG_CF_INDEXED1/2/4/8`
- * @param dsc pointer to an image descriptor
- * @param id the palette color to set:
- * - for `LV_IMG_CF_INDEXED1`: 0..1
- * - for `LV_IMG_CF_INDEXED2`: 0..3
- * - for `LV_IMG_CF_INDEXED4`: 0..15
- * - for `LV_IMG_CF_INDEXED8`: 0..255
- * @param c the color to set
- */
-void lv_img_buf_set_palette(lv_img_dsc_t * dsc, uint8_t id, lv_color_t c)
-{
- if((dsc->header.cf == LV_IMG_CF_ALPHA_1BIT && id > 1) || (dsc->header.cf == LV_IMG_CF_ALPHA_2BIT && id > 3) ||
- (dsc->header.cf == LV_IMG_CF_ALPHA_4BIT && id > 15) || (dsc->header.cf == LV_IMG_CF_ALPHA_8BIT)) {
- LV_LOG_WARN("lv_img_buf_set_px_alpha: invalid 'id'");
- return;
- }
-
- lv_color32_t c32;
- c32.full = lv_color_to32(c);
- uint8_t * buf = (uint8_t *)dsc->data;
- memcpy(&buf[id * sizeof(c32)], &c32, sizeof(c32));
-}
-
/**
* Get the pixel size of a color format in bits
* @param cf a color format (`LV_IMG_CF_...`)
* @return the pixel size in bits
*/
-uint8_t lv_img_color_format_get_px_size(lv_img_cf_t cf)
+uint8_t lv_img_cf_get_px_size(lv_img_cf_t cf)
{
uint8_t px_size = 0;
switch(cf) {
- case LV_IMG_CF_UNKNOWN:
- case LV_IMG_CF_RAW: px_size = 0; break;
- case LV_IMG_CF_TRUE_COLOR:
- case LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED: px_size = LV_COLOR_SIZE; break;
- case LV_IMG_CF_TRUE_COLOR_ALPHA: px_size = LV_IMG_PX_SIZE_ALPHA_BYTE << 3; break;
- case LV_IMG_CF_INDEXED_1BIT:
- case LV_IMG_CF_ALPHA_1BIT: px_size = 1; break;
- case LV_IMG_CF_INDEXED_2BIT:
- case LV_IMG_CF_ALPHA_2BIT: px_size = 2; break;
- case LV_IMG_CF_INDEXED_4BIT:
- case LV_IMG_CF_ALPHA_4BIT: px_size = 4; break;
- case LV_IMG_CF_INDEXED_8BIT:
- case LV_IMG_CF_ALPHA_8BIT: px_size = 8; break;
- default: px_size = 0; break;
+ case LV_IMG_CF_UNKNOWN:
+ case LV_IMG_CF_RAW: px_size = 0; break;
+ case LV_IMG_CF_TRUE_COLOR:
+ case LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED: px_size = LV_COLOR_SIZE; break;
+ case LV_IMG_CF_TRUE_COLOR_ALPHA: px_size = LV_IMG_PX_SIZE_ALPHA_BYTE << 3; break;
+ case LV_IMG_CF_INDEXED_1BIT:
+ case LV_IMG_CF_ALPHA_1BIT: px_size = 1; break;
+ case LV_IMG_CF_INDEXED_2BIT:
+ case LV_IMG_CF_ALPHA_2BIT: px_size = 2; break;
+ case LV_IMG_CF_INDEXED_4BIT:
+ case LV_IMG_CF_ALPHA_4BIT: px_size = 4; break;
+ case LV_IMG_CF_INDEXED_8BIT:
+ case LV_IMG_CF_ALPHA_8BIT: px_size = 8; break;
+ default: px_size = 0; break;
}
return px_size;
@@ -394,18 +109,22 @@ uint8_t lv_img_color_format_get_px_size(lv_img_cf_t cf)
* @param cf a color format (`LV_IMG_CF_...`)
* @return true: chroma keyed; false: not chroma keyed
*/
-bool lv_img_color_format_is_chroma_keyed(lv_img_cf_t cf)
+bool lv_img_cf_is_chroma_keyed(lv_img_cf_t cf)
{
bool is_chroma_keyed = false;
switch(cf) {
- case LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED:
- case LV_IMG_CF_RAW_CHROMA_KEYED:
- case LV_IMG_CF_INDEXED_1BIT:
- case LV_IMG_CF_INDEXED_2BIT:
- case LV_IMG_CF_INDEXED_4BIT:
- case LV_IMG_CF_INDEXED_8BIT: is_chroma_keyed = true; break;
- default: is_chroma_keyed = false; break;
+ case LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED:
+ case LV_IMG_CF_RAW_CHROMA_KEYED:
+#if LV_INDEXED_CHROMA
+ case LV_IMG_CF_INDEXED_1BIT:
+ case LV_IMG_CF_INDEXED_2BIT:
+ case LV_IMG_CF_INDEXED_4BIT:
+ case LV_IMG_CF_INDEXED_8BIT:
+#endif
+ is_chroma_keyed = true; break;
+
+ default: is_chroma_keyed = false; break;
}
return is_chroma_keyed;
@@ -416,18 +135,22 @@ bool lv_img_color_format_is_chroma_keyed(lv_img_cf_t cf)
* @param cf a color format (`LV_IMG_CF_...`)
* @return true: has alpha channel; false: doesn't have alpha channel
*/
-bool lv_img_color_format_has_alpha(lv_img_cf_t cf)
+bool lv_img_cf_has_alpha(lv_img_cf_t cf)
{
bool has_alpha = false;
switch(cf) {
- case LV_IMG_CF_TRUE_COLOR_ALPHA:
- case LV_IMG_CF_RAW_ALPHA:
- case LV_IMG_CF_ALPHA_1BIT:
- case LV_IMG_CF_ALPHA_2BIT:
- case LV_IMG_CF_ALPHA_4BIT:
- case LV_IMG_CF_ALPHA_8BIT: has_alpha = true; break;
- default: has_alpha = false; break;
+ case LV_IMG_CF_TRUE_COLOR_ALPHA:
+ case LV_IMG_CF_RAW_ALPHA:
+ case LV_IMG_CF_INDEXED_1BIT:
+ case LV_IMG_CF_INDEXED_2BIT:
+ case LV_IMG_CF_INDEXED_4BIT:
+ case LV_IMG_CF_INDEXED_8BIT:
+ case LV_IMG_CF_ALPHA_1BIT:
+ case LV_IMG_CF_ALPHA_2BIT:
+ case LV_IMG_CF_ALPHA_4BIT:
+ case LV_IMG_CF_ALPHA_8BIT: has_alpha = true; break;
+ default: has_alpha = false; break;
}
return has_alpha;
@@ -469,44 +192,96 @@ lv_img_src_t lv_img_src_get_type(const void * src)
**********************/
static lv_res_t lv_img_draw_core(const lv_area_t * coords, const lv_area_t * mask, const void * src,
- const lv_style_t * style, lv_opa_t opa_scale)
+ const lv_style_t * style, uint16_t angle, lv_point_t * pivot, uint16_t zoom, bool antialias, lv_opa_t opa_scale)
{
-
- lv_area_t mask_com; /*Common area of mask and coords*/
- bool union_ok;
- union_ok = lv_area_intersect(&mask_com, mask, coords);
- if(union_ok == false) {
- return LV_RES_OK; /*Out of mask. There is nothing to draw so the image is drawn
- successfully.*/
- }
-
lv_opa_t opa =
- opa_scale == LV_OPA_COVER ? style->image.opa : (uint16_t)((uint16_t)style->image.opa * opa_scale) >> 8;
+ opa_scale == LV_OPA_COVER ? style->image.opa : (uint16_t)((uint16_t)style->image.opa * opa_scale) >> 8;
lv_img_cache_entry_t * cdsc = lv_img_cache_open(src, style);
if(cdsc == NULL) return LV_RES_INV;
- bool chroma_keyed = lv_img_color_format_is_chroma_keyed(cdsc->dec_dsc.header.cf);
- bool alpha_byte = lv_img_color_format_has_alpha(cdsc->dec_dsc.header.cf);
+ bool chroma_keyed = lv_img_cf_is_chroma_keyed(cdsc->dec_dsc.header.cf);
+ bool alpha_byte = lv_img_cf_has_alpha(cdsc->dec_dsc.header.cf);
if(cdsc->dec_dsc.error_msg != NULL) {
LV_LOG_WARN("Image draw error");
lv_draw_rect(coords, mask, &lv_style_plain, LV_OPA_COVER);
- lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, cdsc->dec_dsc.error_msg, LV_TXT_FLAG_NONE, NULL, -1,
- -1, NULL);
+ lv_draw_label(coords, mask, &lv_style_plain, LV_OPA_COVER, cdsc->dec_dsc.error_msg, LV_TXT_FLAG_NONE, NULL, NULL, NULL, LV_BIDI_DIR_LTR);
}
/* The decoder open could open the image and gave the entire uncompressed image.
* Just draw it!*/
else if(cdsc->dec_dsc.img_data) {
- lv_draw_map(coords, mask, cdsc->dec_dsc.img_data, opa, chroma_keyed, alpha_byte, style->image.color,
- style->image.intense);
+ lv_area_t map_area_rot;
+ lv_area_copy(&map_area_rot, coords);
+ if(angle || zoom != LV_IMG_ZOOM_NONE) {
+ /*Get the exact area which is required to show the rotated image*/
+ lv_coord_t pivot_x = lv_area_get_width(coords) / 2 + coords->x1;
+ lv_coord_t pivot_y = lv_area_get_height(coords) / 2 + coords->y1;
+
+ if (pivot){
+ pivot_x = pivot->x + coords->x1;
+ pivot_y = pivot->y + coords->y1;
+ }
+ lv_coord_t w = lv_area_get_width(coords);
+ lv_coord_t w_zoom = (((w * zoom) >> 8) - w) / 2;
+ lv_coord_t h = lv_area_get_height(coords);
+ lv_coord_t h_zoom = (((h * zoom) >> 8) - h) / 2;
+
+ lv_area_t norm;
+ norm.x1 = coords->x1 - pivot_x - w_zoom;
+ norm.y1 = coords->y1 - pivot_y - h_zoom;
+ norm.x2 = coords->x2 - pivot_x + w_zoom;
+ norm.y2 = coords->y2 - pivot_y + h_zoom;
+
+ int16_t sinma = lv_trigo_sin(angle);
+ int16_t cosma = lv_trigo_sin(angle + 90);
+
+ lv_point_t lt;
+ lv_point_t rt;
+ lv_point_t lb;
+ lv_point_t rb;
+ lt.x = ((cosma * norm.x1 - sinma * norm.y1) >> (LV_TRIGO_SHIFT)) + pivot_x;
+ lt.y = ((sinma * norm.x1 + cosma * norm.y1) >> (LV_TRIGO_SHIFT)) + pivot_y;
+
+ rt.x = ((cosma * norm.x2 - sinma * norm.y1) >> (LV_TRIGO_SHIFT)) + pivot_x;
+ rt.y = ((sinma * norm.x2 + cosma * norm.y1) >> (LV_TRIGO_SHIFT)) + pivot_y;
+
+ lb.x = ((cosma * norm.x1 - sinma * norm.y2) >> (LV_TRIGO_SHIFT)) + pivot_x;
+ lb.y = ((sinma * norm.x1 + cosma * norm.y2) >> (LV_TRIGO_SHIFT)) + pivot_y;
+
+ rb.x = ((cosma * norm.x2 - sinma * norm.y2) >> (LV_TRIGO_SHIFT)) + pivot_x;
+ rb.y = ((sinma * norm.x2 + cosma * norm.y2) >> (LV_TRIGO_SHIFT)) + pivot_y;
+
+ map_area_rot.x1 = LV_MATH_MIN(LV_MATH_MIN(LV_MATH_MIN(lb.x, lt.x), rb.x), rt.x);
+ map_area_rot.x2 = LV_MATH_MAX(LV_MATH_MAX(LV_MATH_MAX(lb.x, lt.x), rb.x), rt.x);
+ map_area_rot.y1 = LV_MATH_MIN(LV_MATH_MIN(LV_MATH_MIN(lb.y, lt.y), rb.y), rt.y);
+ map_area_rot.y2 = LV_MATH_MAX(LV_MATH_MAX(LV_MATH_MAX(lb.y, lt.y), rb.y), rt.y);
+ }
+
+ lv_area_t mask_com; /*Common area of mask and coords*/
+ bool union_ok;
+ union_ok = lv_area_intersect(&mask_com, mask, &map_area_rot);
+ if(union_ok == false) {
+ return LV_RES_OK; /*Out of mask. There is nothing to draw so the image is drawn
+ successfully.*/
+ }
+
+ lv_draw_map(coords, &mask_com, cdsc->dec_dsc.img_data, opa, chroma_keyed, alpha_byte, style, angle, pivot, zoom, antialias);
}
/* The whole uncompressed image is not available. Try to read it line-by-line*/
else {
+ lv_area_t mask_com; /*Common area of mask and coords*/
+ bool union_ok;
+ union_ok = lv_area_intersect(&mask_com, mask, coords);
+ if(union_ok == false) {
+ return LV_RES_OK; /*Out of mask. There is nothing to draw so the image is drawn
+ successfully.*/
+ }
+
lv_coord_t width = lv_area_get_width(&mask_com);
- uint8_t * buf = lv_draw_get_buf(lv_area_get_width(&mask_com) * ((LV_COLOR_DEPTH >> 3) + 1)); /*+1 because of the possible alpha byte*/
+ uint8_t * buf = lv_mem_buf_get(lv_area_get_width(&mask_com) * LV_IMG_PX_SIZE_ALPHA_BYTE); /*+1 because of the possible alpha byte*/
lv_area_t line;
lv_area_copy(&line, &mask_com);
@@ -516,18 +291,228 @@ static lv_res_t lv_img_draw_core(const lv_area_t * coords, const lv_area_t * mas
lv_coord_t row;
lv_res_t read_res;
for(row = mask_com.y1; row <= mask_com.y2; row++) {
+ lv_area_t mask_line;
+ union_ok = lv_area_intersect(&mask_line, mask, &line);
+ if(union_ok == false) continue;
+
read_res = lv_img_decoder_read_line(&cdsc->dec_dsc, x, y, width, buf);
if(read_res != LV_RES_OK) {
lv_img_decoder_close(&cdsc->dec_dsc);
LV_LOG_WARN("Image draw can't read the line");
+ lv_mem_buf_release(buf);
return LV_RES_INV;
}
- lv_draw_map(&line, mask, buf, opa, chroma_keyed, alpha_byte, style->image.color, style->image.intense);
+
+
+ lv_draw_map(&line, &mask_line, buf, opa, chroma_keyed, alpha_byte, style, 0, NULL, LV_IMG_ZOOM_NONE, false);
line.y1++;
line.y2++;
y++;
}
+ lv_mem_buf_release(buf);
}
return LV_RES_OK;
}
+
+/**
+ * Draw a color map to the display (image)
+ * @param cords_p coordinates the color map
+ * @param mask_p the map will drawn only on this area (truncated to VDB area)
+ * @param map_p pointer to a lv_color_t array
+ * @param opa opacity of the map
+ * @param chroma_keyed true: enable transparency of LV_IMG_LV_COLOR_TRANSP color pixels
+ * @param alpha_byte true: extra alpha byte is inserted for every pixel
+ * @param style style of the image
+ * @param angle angle in degree
+ * @param pivot center of rotation
+ * @param zoom zoom factor
+ * @param antialias anti-alias transformations (rotate, zoom) or not
+ */
+static void lv_draw_map(const lv_area_t * map_area, const lv_area_t * clip_area, const uint8_t * map_p, lv_opa_t opa,
+ bool chroma_key, bool alpha_byte, const lv_style_t * style, uint16_t angle, lv_point_t * pivot, uint16_t zoom, bool antialaias)
+{
+
+ if(opa < LV_OPA_MIN) return;
+ if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
+
+ /* Use the clip area as draw area*/
+ lv_area_t draw_area;
+ lv_area_copy(&draw_area, clip_area);
+
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
+ const lv_area_t * disp_area = &vdb->area;
+
+ /* Now `draw_area` has absolute coordinates.
+ * Make it relative to `disp_area` to simplify draw to `disp_buf`*/
+ draw_area.x1 -= disp_area->x1;
+ draw_area.y1 -= disp_area->y1;
+ draw_area.x2 -= disp_area->x1;
+ draw_area.y2 -= disp_area->y1;
+
+ uint8_t other_mask_cnt = lv_draw_mask_get_cnt();
+
+ /*The simplest case just copy the pixels into the VDB*/
+ if(other_mask_cnt == 0 && angle == 0 && zoom == LV_IMG_ZOOM_NONE &&
+ chroma_key == false && alpha_byte == false &&
+ opa == LV_OPA_COVER && style->image.intense == LV_OPA_TRANSP) {
+ lv_blend_map(clip_area, map_area, (lv_color_t *)map_p, NULL, LV_DRAW_MASK_RES_FULL_COVER, LV_OPA_COVER, style->image.blend_mode);
+ }
+ /*In the other cases every pixel need to be checked one-by-one*/
+ else {
+ /*The pixel size in byte is different if an alpha byte is added too*/
+ uint8_t px_size_byte = alpha_byte ? LV_IMG_PX_SIZE_ALPHA_BYTE : sizeof(lv_color_t);
+
+ /*Build the image and a mask line-by-line*/
+ uint32_t mask_buf_size = lv_area_get_size(&draw_area) > LV_HOR_RES_MAX ? LV_HOR_RES_MAX : lv_area_get_size(&draw_area);
+ lv_color_t * map2 = lv_mem_buf_get(mask_buf_size * sizeof(lv_color_t));
+ lv_opa_t * mask_buf = lv_mem_buf_get(mask_buf_size);
+
+ /*Go to the first displayed pixel of the map*/
+ lv_coord_t map_w = lv_area_get_width(map_area);
+ lv_coord_t map_h = lv_area_get_height(map_area);
+ const uint8_t * map_buf_tmp = map_p;
+ map_buf_tmp += map_w * (draw_area.y1 - (map_area->y1 - disp_area->y1)) * px_size_byte;
+ map_buf_tmp += (draw_area.x1 - (map_area->x1 - disp_area->x1)) * px_size_byte;
+
+ lv_color_t c;
+ lv_color_t chroma_keyed_color = LV_COLOR_TRANSP;
+ uint32_t px_i = 0;
+ uint32_t px_i_start;
+
+ const uint8_t * map_px;
+
+ lv_area_t blend_area;
+ blend_area.x1 = draw_area.x1 + disp_area->x1;
+ blend_area.x2 = blend_area.x1 + lv_area_get_width(&draw_area) - 1;
+ blend_area.y1 = disp_area->y1 + draw_area.y1;
+ blend_area.y2 = blend_area.y1;
+
+ /*Prepare the `mask_buf`if there are other masks*/
+ if(other_mask_cnt) {
+ memset(mask_buf, 0xFF, mask_buf_size);
+ }
+
+
+ bool transform = angle != 0 || zoom != LV_IMG_ZOOM_NONE ? true : false;
+ lv_img_transform_dsc_t trans_dsc;
+ memset(&trans_dsc, 0, sizeof(lv_img_transform_dsc_t));
+ if(transform) {
+ lv_img_cf_t cf = LV_IMG_CF_TRUE_COLOR;
+ if(alpha_byte) cf = LV_IMG_CF_TRUE_COLOR_ALPHA;
+ else if(chroma_key) cf = LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED;
+
+
+ trans_dsc.cfg.angle = angle;
+ trans_dsc.cfg.zoom = zoom;
+ trans_dsc.cfg.src = map_p;
+ trans_dsc.cfg.src_w = map_w;
+ trans_dsc.cfg.src_h = map_h;
+ trans_dsc.cfg.cf = cf;
+ trans_dsc.cfg.pivot_x = map_w / 2;
+ trans_dsc.cfg.pivot_y = map_h / 2;
+ if (pivot){
+ trans_dsc.cfg.pivot_x = pivot->x;
+ trans_dsc.cfg.pivot_y = pivot->y;
+ }
+ trans_dsc.cfg.color = style->image.color;
+ trans_dsc.cfg.antialias = antialaias;
+
+ lv_img_buf_transform_init(&trans_dsc);
+ }
+
+ lv_draw_mask_res_t mask_res;
+ mask_res = (alpha_byte || chroma_key || angle) ? LV_DRAW_MASK_RES_CHANGED : LV_DRAW_MASK_RES_FULL_COVER;
+ lv_coord_t x;
+ lv_coord_t y;
+ for(y = 0; y < lv_area_get_height(&draw_area); y++) {
+ map_px = map_buf_tmp;
+ px_i_start = px_i;
+
+ for(x = 0; x < lv_area_get_width(&draw_area); x++, map_px += px_size_byte, px_i++) {
+
+ if(transform == false) {
+ if(alpha_byte) {
+ lv_opa_t px_opa = map_px[LV_IMG_PX_SIZE_ALPHA_BYTE - 1];
+ mask_buf[px_i] = px_opa;
+ if(px_opa < LV_OPA_MIN) continue;
+ } else {
+ mask_buf[px_i] = LV_OPA_COVER;
+ }
+
+#if LV_COLOR_DEPTH == 8
+ c.full = map_px[0];
+#elif LV_COLOR_DEPTH == 16
+ c.full = map_px[0] + (map_px[1] << 8);
+#elif LV_COLOR_DEPTH == 32
+ c.full = *((uint32_t*)map_px);
+#endif
+ if (chroma_key) {
+ if(c.full == chroma_keyed_color.full) {
+ mask_buf[px_i] = LV_OPA_TRANSP;
+ continue;
+ }
+ }
+ } else {
+ /*Rotate*/
+ bool ret;
+ lv_coord_t rot_x = x + (disp_area->x1 + draw_area.x1) - map_area->x1;
+ lv_coord_t rot_y = y + (disp_area->y1 + draw_area.y1) - map_area->y1;
+ ret = lv_img_buf_transform(&trans_dsc, rot_x, rot_y);
+ if(ret == false) {
+ mask_buf[px_i] = LV_OPA_TRANSP;
+ continue;
+ } else {
+ mask_buf[px_i] = trans_dsc.res.opa;
+ c.full = trans_dsc.res.color.full;
+ }
+ }
+
+ if(style->image.intense != 0) {
+ c = lv_color_mix(style->image.color, c, style->image.intense);
+ }
+
+ map2[px_i].full = c.full;
+ }
+
+ /*Apply the masks if any*/
+ if(other_mask_cnt) {
+ lv_draw_mask_res_t mask_res_sub;
+ mask_res_sub = lv_draw_mask_apply(mask_buf + px_i_start, draw_area.x1 + vdb->area.x1, y + draw_area.y1 + vdb->area.y1, lv_area_get_width(&draw_area));
+ if(mask_res_sub == LV_DRAW_MASK_RES_FULL_TRANSP) {
+ memset(mask_buf + px_i_start, 0x00, lv_area_get_width(&draw_area));
+ mask_res = LV_DRAW_MASK_RES_CHANGED;
+ } else if(mask_res_sub == LV_DRAW_MASK_RES_CHANGED) {
+ mask_res = LV_DRAW_MASK_RES_CHANGED;
+ }
+ }
+
+ map_buf_tmp += map_w * px_size_byte;
+ if(px_i + lv_area_get_width(&draw_area) < mask_buf_size) {
+ blend_area.y2 ++;
+ } else {
+ lv_blend_map(clip_area, &blend_area, map2, mask_buf, mask_res, opa, style->image.blend_mode);
+
+ blend_area.y1 = blend_area.y2 + 1;
+ blend_area.y2 = blend_area.y1;
+
+ px_i = 0;
+ mask_res = (alpha_byte || chroma_key || angle) ? LV_DRAW_MASK_RES_CHANGED : LV_DRAW_MASK_RES_FULL_COVER;
+
+ /*Prepare the `mask_buf`if there are other masks*/
+ if(other_mask_cnt) {
+ memset(mask_buf, 0xFF, mask_buf_size);
+ }
+ }
+ }
+ /*Flush the last part*/
+ if(blend_area.y1 != blend_area.y2) {
+ blend_area.y2--;
+ lv_blend_map(clip_area, &blend_area, map2, mask_buf, mask_res, opa, style->image.blend_mode);
+ }
+
+ lv_mem_buf_release(mask_buf);
+ lv_mem_buf_release(map2);
+ }
+}
diff --git a/src/lv_draw/lv_draw_img.h b/src/lv_draw/lv_draw_img.h
index 61c604805..47d15132e 100644
--- a/src/lv_draw/lv_draw_img.h
+++ b/src/lv_draw/lv_draw_img.h
@@ -15,15 +15,21 @@ extern "C" {
*********************/
#include "lv_draw.h"
#include "lv_img_decoder.h"
+#include "lv_img_buf.h"
/*********************
* DEFINES
*********************/
+/**********************
+ * MACROS
+ **********************/
+
/**********************
* TYPEDEFS
**********************/
+
/**********************
* GLOBAL PROTOTYPES
**********************/
@@ -34,10 +40,13 @@ extern "C" {
* @param mask the image will be drawn only in this area
* @param src pointer to a lv_color_t array which contains the pixels of the image
* @param style style of the image
+ * @param angle rotation angle of the image
+ * @param center rotation center of the image
+ * @param antialias anti-alias transformations (rotate, zoom) or not
* @param opa_scale scale down all opacities by the factor
*/
void lv_draw_img(const lv_area_t * coords, const lv_area_t * mask, const void * src, const lv_style_t * style,
- lv_opa_t opa_scale);
+ uint16_t angle, lv_point_t * center, uint16_t zoom, bool antialaias, lv_opa_t opa_scale);
/**
* Get the type of an image source
@@ -49,80 +58,27 @@ void lv_draw_img(const lv_area_t * coords, const lv_area_t * mask, const void *
*/
lv_img_src_t lv_img_src_get_type(const void * src);
-/**
- * Get the color of an image's pixel
- * @param dsc an image descriptor
- * @param x x coordinate of the point to get
- * @param y x coordinate of the point to get
- * @param style style of the image. In case of `LV_IMG_CF_ALPHA_1/2/4/8` `style->image.color` shows
- * the color. Can be `NULL` but for `ALPHA` images black will be returned. In other cases it is not
- * used.
- * @return color of the point
- */
-lv_color_t lv_img_buf_get_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, const lv_style_t * style);
-/**
- * Get the alpha value of an image's pixel
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @return alpha value of the point
- */
-lv_opa_t lv_img_buf_get_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y);
-
-/**
- * Set the color of a pixel of an image. The alpha channel won't be affected.
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param c color of the point
- */
-void lv_img_buf_set_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t c);
-
-/**
- * Set the alpha value of a pixel of an image. The color won't be affected
- * @param dsc pointer to an image descriptor
- * @param x x coordinate of the point to set
- * @param y x coordinate of the point to set
- * @param opa the desired opacity
- */
-void lv_img_buf_set_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_opa_t opa);
-
-/**
- * Set the palette color of an indexed image. Valid only for `LV_IMG_CF_INDEXED1/2/4/8`
- * @param dsc pointer to an image descriptor
- * @param id the palette color to set:
- * - for `LV_IMG_CF_INDEXED1`: 0..1
- * - for `LV_IMG_CF_INDEXED2`: 0..3
- * - for `LV_IMG_CF_INDEXED4`: 0..15
- * - for `LV_IMG_CF_INDEXED8`: 0..255
- * @param c the color to set
- */
-void lv_img_buf_set_palette(lv_img_dsc_t * dsc, uint8_t id, lv_color_t c);
-
/**
* Get the pixel size of a color format in bits
* @param cf a color format (`LV_IMG_CF_...`)
* @return the pixel size in bits
*/
-uint8_t lv_img_color_format_get_px_size(lv_img_cf_t cf);
+uint8_t lv_img_cf_get_px_size(lv_img_cf_t cf);
/**
* Check if a color format is chroma keyed or not
* @param cf a color format (`LV_IMG_CF_...`)
* @return true: chroma keyed; false: not chroma keyed
*/
-bool lv_img_color_format_is_chroma_keyed(lv_img_cf_t cf);
+bool lv_img_cf_is_chroma_keyed(lv_img_cf_t cf);
/**
* Check if a color format has alpha channel or not
* @param cf a color format (`LV_IMG_CF_...`)
* @return true: has alpha channel; false: doesn't have alpha channel
*/
-bool lv_img_color_format_has_alpha(lv_img_cf_t cf);
+bool lv_img_cf_has_alpha(lv_img_cf_t cf);
-/**********************
- * MACROS
- **********************/
#ifdef __cplusplus
} /* extern "C" */
diff --git a/src/lv_draw/lv_draw_label.c b/src/lv_draw/lv_draw_label.c
index aa3445dd2..65a9ccaf1 100644
--- a/src/lv_draw/lv_draw_label.c
+++ b/src/lv_draw/lv_draw_label.c
@@ -8,6 +8,9 @@
*********************/
#include "lv_draw_label.h"
#include "../lv_misc/lv_math.h"
+#include "../lv_hal/lv_hal_disp.h"
+#include "../lv_core/lv_refr.h"
+#include "../lv_misc/lv_bidi.h"
/*********************
* DEFINES
@@ -28,11 +31,25 @@ typedef uint8_t cmd_state_t;
/**********************
* STATIC PROTOTYPES
**********************/
+static void lv_draw_letter(const lv_point_t * pos_p, const lv_area_t * clip_area, const lv_font_t * font_p, uint32_t letter,
+ lv_color_t color, lv_opa_t opa);
+static void draw_letter_normal(lv_coord_t pos_x, lv_coord_t pos_y, lv_font_glyph_dsc_t * g, const lv_area_t * clip_area, const uint8_t * map_p, lv_color_t color, lv_opa_t opa);
+static void draw_letter_subpx(lv_coord_t pos_x, lv_coord_t pos_y, lv_font_glyph_dsc_t * g, const lv_area_t * clip_area, const uint8_t * map_p, lv_color_t color, lv_opa_t opa);
+
+
static uint8_t hex_char_to_num(char hex);
/**********************
* STATIC VARIABLES
**********************/
+/*clang-format off*/
+static const uint8_t bpp1_opa_table[2] = {0, 255}; /*Opacity mapping with bpp = 1 (Just for compatibility)*/
+static const uint8_t bpp2_opa_table[4] = {0, 85, 170, 255}; /*Opacity mapping with bpp = 2*/
+static const uint8_t bpp4_opa_table[16] = {0, 17, 34, 51, /*Opacity mapping with bpp = 4*/
+ 68, 85, 102, 119,
+ 136, 153, 170, 187,
+ 204, 221, 238, 255};
+ /*clang-format on*/
/**********************
* MACROS
@@ -51,15 +68,18 @@ static uint8_t hex_char_to_num(char hex);
* @param txt 0 terminated text to write
* @param flag settings for the text from 'txt_flag_t' enum
* @param offset text offset in x and y direction (NULL if unused)
- * @param sel_start start index of selected area (`LV_LABEL_TXT_SEL_OFF` if none)
- * @param sel_end end index of selected area (`LV_LABEL_TXT_SEL_OFF` if none)
+ * @param sel make the text selected in the range by drawing a background there
*/
void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale,
- const char * txt, lv_txt_flag_t flag, lv_point_t * offset, uint16_t sel_start, uint16_t sel_end,
- lv_draw_label_hint_t * hint)
+ const char * txt, lv_txt_flag_t flag, lv_point_t * offset, lv_draw_label_txt_sel_t * sel,
+ lv_draw_label_hint_t * hint, lv_bidi_dir_t bidi_dir)
{
const lv_font_t * font = style->text.font;
lv_coord_t w;
+
+ /*No need to waste processor time if string is empty*/
+ if (txt[0] == '\0') return;
+
if((flag & LV_TXT_FLAG_EXPAND) == 0) {
/*Normally use the label's width as width*/
w = lv_area_get_width(coords);
@@ -67,7 +87,7 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
/*If EXAPND is enabled then not limit the text's width to the object's width*/
lv_point_t p;
lv_txt_get_size(&p, txt, style->text.font, style->text.letter_space, style->text.line_space, LV_COORD_MAX,
- flag);
+ flag);
w = p.x;
}
@@ -105,6 +125,7 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
pos.y += hint->y;
}
+
uint32_t line_end = line_start + lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, w, flag);
/*Go the first visible line*/
@@ -139,6 +160,27 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->text.opa : (uint16_t)((uint16_t)style->text.opa * opa_scale) >> 8;
+ uint16_t sel_start = 0xFFFF;
+ uint16_t sel_end = 0xFFFF;
+ if(sel) {
+ sel_start = sel->start;
+ sel_end = sel->end;
+ if(sel_start > sel_end) {
+ uint16_t tmp = sel_start;
+ sel_start = sel_end;
+ sel_end = tmp;
+ }
+ }
+
+ lv_style_t line_style;
+ if(style->text.underline || style->text.strikethrough) {
+ lv_style_copy(&line_style, style);
+ line_style.line.color = style->text.color;
+ line_style.line.width = (style->text.font->line_height + 5) / 10; /*+5 for rounding*/
+ line_style.line.opa = style->text.opa;
+ line_style.line.blend_mode = style->text.blend_mode;
+ }
+
cmd_state_t cmd_state = CMD_STATE_WAIT;
uint32_t i;
uint16_t par_start = 0;
@@ -147,20 +189,38 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
lv_style_t sel_style;
lv_style_copy(&sel_style, &lv_style_plain_color);
sel_style.body.main_color = sel_style.body.grad_color = style->text.sel_color;
-
+ lv_coord_t pos_x_start = pos.x;
/*Write out all lines*/
while(txt[line_start] != '\0') {
- if(offset != NULL) {
- pos.x += x_ofs;
- }
+ if(offset != NULL) pos.x += x_ofs;
+
/*Write all letter of a line*/
cmd_state = CMD_STATE_WAIT;
- i = line_start;
+ i = 0;
uint32_t letter;
uint32_t letter_next;
- while(i < line_end) {
- letter = lv_txt_encoded_next(txt, &i);
- letter_next = lv_txt_encoded_next(&txt[i], NULL);
+#if LV_USE_BIDI
+ char *bidi_txt = lv_mem_buf_get(line_end - line_start + 1);
+ lv_bidi_process_paragraph(txt + line_start, bidi_txt, line_end - line_start, bidi_dir, NULL, 0);
+#else
+ const char *bidi_txt = txt + line_start;
+#endif
+
+ while(i < line_end - line_start) {
+ uint16_t logical_char_pos = 0;
+ if(sel_start != 0xFFFF && sel_end != 0xFFFF) {
+#if LV_USE_BIDI
+ logical_char_pos = lv_txt_encoded_get_char_id(txt, line_start);
+ uint16_t t = lv_txt_encoded_get_char_id(bidi_txt, i);
+ logical_char_pos += lv_bidi_get_logical_pos(bidi_txt, NULL, line_end - line_start, bidi_dir, t, NULL);
+#else
+ logical_char_pos = lv_txt_encoded_get_char_id(txt, line_start + i);
+#endif
+ }
+
+ letter = lv_txt_encoded_next(bidi_txt, &i);
+ letter_next = lv_txt_encoded_next(&bidi_txt[i], NULL);
+
/*Handle the re-color command*/
if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
@@ -183,7 +243,7 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
/*Get the parameter*/
if(i - par_start == LABEL_RECOLOR_PAR_LENGTH + 1) {
char buf[LABEL_RECOLOR_PAR_LENGTH + 1];
- memcpy(buf, &txt[par_start], LABEL_RECOLOR_PAR_LENGTH);
+ memcpy(buf, &bidi_txt[par_start], LABEL_RECOLOR_PAR_LENGTH);
buf[LABEL_RECOLOR_PAR_LENGTH] = '\0';
int r, g, b;
r = (hex_char_to_num(buf[0]) << 4) + hex_char_to_num(buf[1]);
@@ -206,9 +266,7 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
letter_w = lv_font_get_glyph_width(font, letter, letter_next);
if(sel_start != 0xFFFF && sel_end != 0xFFFF) {
- int char_ind = lv_encoded_get_char_id(txt, i);
- /*Do not draw the rectangle on the character at `sel_start`.*/
- if(char_ind > sel_start && char_ind <= sel_end) {
+ if(logical_char_pos >= sel_start && logical_char_pos < sel_end) {
lv_area_t sel_coords;
sel_coords.x1 = pos.x;
sel_coords.y1 = pos.y;
@@ -217,12 +275,38 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
lv_draw_rect(&sel_coords, mask, &sel_style, opa);
}
}
+
lv_draw_letter(&pos, mask, font, letter, color, opa);
if(letter_w > 0) {
pos.x += letter_w + style->text.letter_space;
}
}
+
+ if(style->text.strikethrough) {
+ lv_point_t p1;
+ lv_point_t p2;
+ p1.x = pos_x_start;
+ p1.y = pos.y + (style->text.font->line_height / 2) + style->line.width / 2;
+ p2.x = pos.x;
+ p2.y = p1.y;
+ lv_draw_line(&p1, &p2, mask, &line_style, opa_scale);
+ }
+
+ if(style->text.underline) {
+ lv_point_t p1;
+ lv_point_t p2;
+ p1.x = pos_x_start;
+ p1.y = pos.y + style->text.font->line_height - style->text.font->base_line + style->line.width / 2 + 1;
+ p2.x = pos.x;
+ p2.y = p1.y;
+ lv_draw_line(&p1, &p2, mask, &line_style, opa_scale);
+ }
+
+#if LV_USE_BIDI
+ lv_mem_buf_release(bidi_txt);
+ bidi_txt = NULL;
+#endif
/*Go to next line*/
line_start = line_end;
line_end += lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, w, flag);
@@ -231,7 +315,7 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
/*Align to middle*/
if(flag & LV_TXT_FLAG_CENTER) {
line_width =
- lv_txt_get_width(&txt[line_start], line_end - line_start, font, style->text.letter_space, flag);
+ lv_txt_get_width(&txt[line_start], line_end - line_start, font, style->text.letter_space, flag);
pos.x += (lv_area_get_width(coords) - line_width) / 2;
@@ -239,7 +323,7 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
/*Align to the right*/
else if(flag & LV_TXT_FLAG_RIGHT) {
line_width =
- lv_txt_get_width(&txt[line_start], line_end - line_start, font, style->text.letter_space, flag);
+ lv_txt_get_width(&txt[line_start], line_end - line_start, font, style->text.letter_space, flag);
pos.x += lv_area_get_width(coords) - line_width;
}
@@ -254,6 +338,396 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
* STATIC FUNCTIONS
**********************/
+
+/**
+ * Draw a letter in the Virtual Display Buffer
+ * @param pos_p left-top coordinate of the latter
+ * @param mask_p the letter will be drawn only on this area (truncated to VDB area)
+ * @param font_p pointer to font
+ * @param letter a letter to draw
+ * @param color color of letter
+ * @param opa opacity of letter (0..255)
+ */
+static void lv_draw_letter(const lv_point_t * pos_p, const lv_area_t * clip_area, const lv_font_t * font_p, uint32_t letter,
+ lv_color_t color, lv_opa_t opa)
+{
+ if(opa < LV_OPA_MIN) return;
+ if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
+
+ if(font_p == NULL) {
+ LV_LOG_WARN("lv_draw_letter: font is NULL");
+ return;
+ }
+
+ lv_font_glyph_dsc_t g;
+ bool g_ret = lv_font_get_glyph_dsc(font_p, &g, letter, '\0');
+ if(g_ret == false) {
+ /* Add waring if the dsc is not found
+ * but do not print warning for non printable ASCII chars (e.g. '\n')*/
+ if(letter >= 0x20) {
+ LV_LOG_WARN("lv_draw_letter: glyph dsc. not found");
+ }
+ return;
+ }
+
+ lv_coord_t pos_x = pos_p->x + g.ofs_x;
+ lv_coord_t pos_y = pos_p->y + (font_p->line_height - font_p->base_line) - g.box_h - g.ofs_y;
+
+ /*If the letter is completely out of mask don't draw it */
+ if(pos_x + g.box_w < clip_area->x1 ||
+ pos_x > clip_area->x2 ||
+ pos_y + g.box_h < clip_area->y1 ||
+ pos_y > clip_area->y2) return;
+
+
+ const uint8_t * map_p = lv_font_get_glyph_bitmap(font_p, letter);
+ if(map_p == NULL) {
+ LV_LOG_WARN("lv_draw_letter: character's bitmap not found");
+ return;
+ }
+
+ if(font_p->subpx) {
+ draw_letter_subpx(pos_x, pos_y, &g, clip_area, map_p, color, opa);
+ } else {
+ draw_letter_normal(pos_x, pos_y, &g, clip_area, map_p, color, opa);
+ }
+}
+
+
+static void draw_letter_normal(lv_coord_t pos_x, lv_coord_t pos_y, lv_font_glyph_dsc_t * g, const lv_area_t * clip_area, const uint8_t * map_p, lv_color_t color, lv_opa_t opa)
+{
+
+ const uint8_t * bpp_opa_table;
+ uint8_t bitmask_init;
+ uint8_t bitmask;
+
+ if(g->bpp == 3) g->bpp = 4;
+
+ switch(g->bpp) {
+ case 1:
+ bpp_opa_table = bpp1_opa_table;
+ bitmask_init = 0x80;
+ break;
+ case 2:
+ bpp_opa_table = bpp2_opa_table;
+ bitmask_init = 0xC0;
+ break;
+ case 4:
+ bpp_opa_table = bpp4_opa_table;
+ bitmask_init = 0xF0;
+ break;
+ case 8:
+ bpp_opa_table = NULL;
+ bitmask_init = 0xFF;
+ break; /*No opa table, pixel value will be used directly*/
+ default:
+ LV_LOG_WARN("lv_draw_letter: invalid bpp not found");
+ return; /*Invalid bpp. Can't render the letter*/
+ }
+
+
+
+ lv_coord_t col, row;
+
+ uint8_t width_byte_scr = g->box_w >> 3; /*Width in bytes (on the screen finally) (e.g. w = 11 -> 2 bytes wide)*/
+ if(g->box_w & 0x7) width_byte_scr++;
+ uint16_t width_bit = g->box_w * g->bpp; /*Letter width in bits*/
+
+
+ /* Calculate the col/row start/end on the map*/
+ lv_coord_t col_start = pos_x >= clip_area->x1 ? 0 : clip_area->x1 - pos_x;
+ lv_coord_t col_end = pos_x + g->box_w <= clip_area->x2 ? g->box_w : clip_area->x2 - pos_x + 1;
+ lv_coord_t row_start = pos_y >= clip_area->y1 ? 0 : clip_area->y1 - pos_y;
+ lv_coord_t row_end = pos_y + g->box_h <= clip_area->y2 ? g->box_h : clip_area->y2 - pos_y + 1;
+
+ /*Move on the map too*/
+ uint32_t bit_ofs = (row_start * width_bit) + (col_start * g->bpp);
+ map_p += bit_ofs >> 3;
+
+ uint8_t letter_px;
+ lv_opa_t px_opa;
+ uint16_t col_bit;
+ col_bit = bit_ofs & 0x7; /* "& 0x7" equals to "% 8" just faster */
+
+ uint32_t mask_buf_size = g->box_w * g->box_h > LV_HOR_RES_MAX ? g->box_w * g->box_h : LV_HOR_RES_MAX;
+ lv_opa_t * mask_buf = lv_mem_buf_get(mask_buf_size);
+ lv_coord_t mask_p = 0;
+ lv_coord_t mask_p_start;
+
+ lv_area_t fill_area;
+ fill_area.x1 = col_start + pos_x;
+ fill_area.x2 = col_end + pos_x - 1;
+ fill_area.y1 = row_start + pos_y;
+ fill_area.y2 = fill_area.y1;
+
+ uint8_t other_mask_cnt = lv_draw_mask_get_cnt();
+
+ for(row = row_start ; row < row_end; row++) {
+ bitmask = bitmask_init >> col_bit;
+ mask_p_start = mask_p;
+ for(col = col_start; col < col_end; col++) {
+
+ /*Load the pixel's opacity into the mask*/
+ letter_px = (*map_p & bitmask) >> (8 - col_bit - g->bpp);
+ if(letter_px != 0) {
+ if(opa == LV_OPA_COVER) {
+ px_opa = g->bpp == 8 ? letter_px : bpp_opa_table[letter_px];
+ } else {
+ px_opa = g->bpp == 8 ? (uint16_t)((uint16_t)letter_px * opa) >> 8
+ : (uint16_t)((uint16_t)bpp_opa_table[letter_px] * opa) >> 8;
+ }
+
+ mask_buf[mask_p] = px_opa;
+
+ } else {
+ mask_buf[mask_p] = 0;
+ }
+
+ /*Go to the next column*/
+ if(col_bit < 8 - g->bpp) {
+ col_bit += g->bpp;
+ bitmask = bitmask >> g->bpp;
+ } else {
+ col_bit = 0;
+ bitmask = bitmask_init;
+ map_p++;
+ }
+
+ /*Next mask byte*/
+ mask_p++;
+ }
+
+ /*Apply masks if any*/
+ if(other_mask_cnt) {
+ lv_draw_mask_res_t mask_res = lv_draw_mask_apply(mask_buf + mask_p_start, fill_area.x1, fill_area.y2, lv_area_get_width(&fill_area));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_TRANSP) {
+ memset(mask_buf + mask_p_start, 0x00, lv_area_get_width(&fill_area));
+ }
+ }
+
+ if((uint32_t) mask_p + (row_end - row_start) < mask_buf_size) {
+ fill_area.y2 ++;
+ } else {
+ lv_blend_fill(clip_area, &fill_area,
+ color, mask_buf, LV_DRAW_MASK_RES_CHANGED, opa,
+ LV_BLEND_MODE_NORMAL);
+
+ fill_area.y1 = fill_area.y2 + 1;
+ fill_area.y2 = fill_area.y1;
+ mask_p = 0;
+ }
+
+ col_bit += ((g->box_w - col_end) + col_start) * g->bpp;
+
+ map_p += (col_bit >> 3);
+ col_bit = col_bit & 0x7;
+ }
+
+ /*Flush the last part*/
+ if(fill_area.y1 != fill_area.y2) {
+ fill_area.y2--;
+ lv_blend_fill(clip_area, &fill_area,
+ color, mask_buf, LV_DRAW_MASK_RES_CHANGED, opa,
+ LV_BLEND_MODE_NORMAL);
+ mask_p = 0;
+ }
+
+ lv_mem_buf_release(mask_buf);
+}
+
+static void draw_letter_subpx(lv_coord_t pos_x, lv_coord_t pos_y, lv_font_glyph_dsc_t * g, const lv_area_t * clip_area, const uint8_t * map_p, lv_color_t color, lv_opa_t opa)
+{
+ const uint8_t * bpp_opa_table;
+ uint8_t bitmask_init;
+ uint8_t bitmask;
+
+ if(g->bpp == 3) g->bpp = 4;
+
+ switch(g->bpp) {
+ case 1:
+ bpp_opa_table = bpp1_opa_table;
+ bitmask_init = 0x80;
+ break;
+ case 2:
+ bpp_opa_table = bpp2_opa_table;
+ bitmask_init = 0xC0;
+ break;
+ case 4:
+ bpp_opa_table = bpp4_opa_table;
+ bitmask_init = 0xF0;
+ break;
+ case 8:
+ bpp_opa_table = NULL;
+ bitmask_init = 0xFF;
+ break; /*No opa table, pixel value will be used directly*/
+ default:
+ LV_LOG_WARN("lv_draw_letter: invalid bpp not found");
+ return; /*Invalid bpp. Can't render the letter*/
+ }
+
+ lv_coord_t col, row;
+
+ uint8_t width_byte_scr = g->box_w >> 3; /*Width in bytes (on the screen finally) (e.g. w = 11 -> 2 bytes wide)*/
+ if(g->box_w & 0x7) width_byte_scr++;
+ uint16_t width_bit = g->box_w * g->bpp; /*Letter width in bits*/
+
+
+ /* Calculate the col/row start/end on the map*/
+ lv_coord_t col_start = pos_x >= clip_area->x1 ? 0 : (clip_area->x1 - pos_x) * 3;
+ lv_coord_t col_end = pos_x + g->box_w / 3 <= clip_area->x2 ? g->box_w : (clip_area->x2 - pos_x + 1) * 3;
+ lv_coord_t row_start = pos_y >= clip_area->y1 ? 0 : clip_area->y1 - pos_y;
+ lv_coord_t row_end = pos_y + g->box_h <= clip_area->y2 ? g->box_h : clip_area->y2 - pos_y + 1;
+
+ /*Move on the map too*/
+ uint32_t bit_ofs = (row_start * width_bit) + (col_start * g->bpp);
+ map_p += bit_ofs >> 3;
+
+ uint8_t letter_px;
+ lv_opa_t px_opa;
+ uint16_t col_bit;
+ col_bit = bit_ofs & 0x7; /* "& 0x7" equals to "% 8" just faster */
+
+ uint32_t mask_buf_size = g->box_w * g->box_h > LV_HOR_RES_MAX ? g->box_w * g->box_h : LV_HOR_RES_MAX;
+ lv_opa_t * mask_buf = lv_mem_buf_get(mask_buf_size);
+ lv_coord_t mask_p = 0;
+ lv_coord_t mask_p_start;
+ lv_color_t * color_buf = lv_mem_buf_get(mask_buf_size * sizeof(lv_color_t));
+
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
+
+ lv_coord_t vdb_width = lv_area_get_width(&vdb->area);
+ lv_color_t * vdb_buf_tmp = vdb->buf_act;
+
+ /*Set a pointer on VDB to the first pixel of the letter*/
+ vdb_buf_tmp += ((pos_y - vdb->area.y1) * vdb_width) + pos_x - vdb->area.x1;
+
+ /*If the letter is partially out of mask the move there on VDB*/
+ vdb_buf_tmp += (row_start * vdb_width) + col_start / 3;
+
+ lv_area_t map_area;
+ map_area.x1 = col_start / 3 + pos_x;
+ map_area.x2 = col_end / 3 + pos_x - 1;
+ map_area.y1 = row_start + pos_y;
+ map_area.y2 = map_area.y1;
+
+ uint8_t other_mask_cnt = lv_draw_mask_get_cnt();
+
+ uint8_t font_rgb[3];
+
+#if LV_COLOR_16_SWAP == 0
+ uint8_t txt_rgb[3] = {color.ch.red, color.ch.green, color.ch.blue};
+#else
+ uint8_t txt_rgb[3] = {color.ch.red, (color.ch.green_h << 3) + color.ch.green_l, color.ch.blue};
+#endif
+
+ for(row = row_start ; row < row_end; row++) {
+ uint8_t subpx_cnt = 0;
+ bitmask = bitmask_init >> col_bit;
+ mask_p_start = mask_p;
+ for(col = col_start; col < col_end; col++) {
+ /*Load the pixel's opacity into the mask*/
+ letter_px = (*map_p & bitmask) >> (8 - col_bit - g->bpp);
+ if(letter_px != 0) {
+ if(opa == LV_OPA_COVER) {
+ px_opa = g->bpp == 8 ? letter_px : bpp_opa_table[letter_px];
+ } else {
+ px_opa = g->bpp == 8 ? (uint16_t)((uint16_t)letter_px * opa) >> 8
+ : (uint16_t)((uint16_t)bpp_opa_table[letter_px] * opa) >> 8;
+ }
+ } else {
+ px_opa = 0;
+ }
+
+ font_rgb[subpx_cnt] = px_opa;
+
+ subpx_cnt ++;
+ if(subpx_cnt == 3) {
+ subpx_cnt = 0;
+
+ lv_color_t res_color;
+#if LV_COLOR_16_SWAP == 0
+ uint8_t bg_rgb[3] = {vdb_buf_tmp->ch.red, vdb_buf_tmp->ch.green, vdb_buf_tmp->ch.blue};
+#else
+ uint8_t bg_rgb[3] = {vdb_buf_tmp->ch.red,
+ (vdb_buf_tmp->ch.green_h << 3) + vdb_buf_tmp->ch.green_l,
+ vdb_buf_tmp->ch.blue};
+#endif
+
+#if LV_SUBPX_BGR
+ res_color.ch.blue = (uint16_t)((uint16_t)txt_rgb[0] * font_rgb[0] + (bg_rgb[0] * (255 - font_rgb[0]))) >> 8;
+ res_color.ch.red = (uint16_t)((uint16_t)txt_rgb[2] * font_rgb[2] + (bg_rgb[2] * (255 - font_rgb[2]))) >> 8;
+#else
+ res_color.ch.red = (uint16_t)((uint16_t)txt_rgb[0] * font_rgb[0] + (bg_rgb[0] * (255 - font_rgb[0]))) >> 8;
+ res_color.ch.blue = (uint16_t)((uint16_t)txt_rgb[2] * font_rgb[2] + (bg_rgb[2] * (255 - font_rgb[2]))) >> 8;
+#endif
+
+#if LV_COLOR_16_SWAP == 0
+ res_color.ch.green = (uint16_t)((uint16_t)txt_rgb[1] * font_rgb[1] + (bg_rgb[1] * (255 - font_rgb[1]))) >> 8;
+#else
+ uint8_t green = (uint16_t)((uint16_t)txt_rgb[1] * font_rgb[1] + (bg_rgb[1] * (255 - font_rgb[1]))) >> 8;
+ res_color.ch.green_h = green >> 3;
+ res_color.ch.green_l = green & 0x7;
+#endif
+
+ if(font_rgb[0] == 0 && font_rgb[1] == 0 && font_rgb[2] == 0) mask_buf[mask_p] = LV_OPA_TRANSP;
+ else mask_buf[mask_p] = LV_OPA_COVER;
+ color_buf[mask_p] = res_color;
+
+ /*Next mask byte*/
+ mask_p++;
+ vdb_buf_tmp++;
+ }
+
+ /*Go to the next column*/
+ if(col_bit < 8 - g->bpp) {
+ col_bit += g->bpp;
+ bitmask = bitmask >> g->bpp;
+ } else {
+ col_bit = 0;
+ bitmask = bitmask_init;
+ map_p++;
+ }
+ }
+
+ /*Apply masks if any*/
+ if(other_mask_cnt) {
+ lv_draw_mask_res_t mask_res = lv_draw_mask_apply(mask_buf + mask_p_start, map_area.x1, map_area.y2, lv_area_get_width(&map_area));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_TRANSP) {
+ memset(mask_buf + mask_p_start, 0x00, lv_area_get_width(&map_area));
+ }
+ }
+
+ if((uint32_t) mask_p + (row_end - row_start) < mask_buf_size) {
+ map_area.y2 ++;
+ } else {
+ lv_blend_map(clip_area, &map_area, color_buf, mask_buf, LV_DRAW_MASK_RES_CHANGED, opa, LV_BLEND_MODE_NORMAL);
+
+ map_area.y1 = map_area.y2 + 1;
+ map_area.y2 = map_area.y1;
+ mask_p = 0;
+ }
+
+ col_bit += ((g->box_w - col_end) + col_start) * g->bpp;
+
+ map_p += (col_bit >> 3);
+ col_bit = col_bit & 0x7;
+
+ /*Next row in VDB*/
+ vdb_buf_tmp += vdb_width - (col_end - col_start) / 3;
+ }
+
+ /*Flush the last part*/
+ if(map_area.y1 != map_area.y2) {
+ map_area.y2--;
+ lv_blend_map(clip_area, &map_area, color_buf, mask_buf, LV_DRAW_MASK_RES_CHANGED, opa, LV_BLEND_MODE_NORMAL);
+ }
+
+ lv_mem_buf_release(mask_buf);
+ lv_mem_buf_release(color_buf);
+}
+
+
/**
* Convert a hexadecimal characters to a number (0..15)
* @param hex Pointer to a hexadecimal character (0..9, A..F)
@@ -269,13 +743,13 @@ static uint8_t hex_char_to_num(char hex)
if(hex >= 'a') hex -= 'a' - 'A'; /*Convert to upper case*/
switch(hex) {
- case 'A': result = 10; break;
- case 'B': result = 11; break;
- case 'C': result = 12; break;
- case 'D': result = 13; break;
- case 'E': result = 14; break;
- case 'F': result = 15; break;
- default: result = 0; break;
+ case 'A': result = 10; break;
+ case 'B': result = 11; break;
+ case 'C': result = 12; break;
+ case 'D': result = 13; break;
+ case 'E': result = 14; break;
+ case 'F': result = 15; break;
+ default: result = 0; break;
}
}
diff --git a/src/lv_draw/lv_draw_label.h b/src/lv_draw/lv_draw_label.h
index 2328aa2b3..6dc4d6464 100644
--- a/src/lv_draw/lv_draw_label.h
+++ b/src/lv_draw/lv_draw_label.h
@@ -14,15 +14,24 @@ extern "C" {
* INCLUDES
*********************/
#include "lv_draw.h"
+#include "../lv_misc/lv_bidi.h"
/*********************
* DEFINES
*********************/
+#define LV_DRAW_LABEL_NO_TXT_SEL (0xFFFF)
/**********************
* TYPEDEFS
**********************/
+typedef struct
+{
+ uint16_t start;
+ uint16_t end;
+}lv_draw_label_txt_sel_t;
+
+
/** Store some info to speed up drawing of very large texts
* It takes a lot of time to get the first visible character because
* all the previous characters needs to be checked to calculate the positions.
@@ -54,11 +63,11 @@ typedef struct {
* @param flag settings for the text from 'txt_flag_t' enum
* @param offset text offset in x and y direction (NULL if unused)
* @param sel_start start index of selected area (`LV_LABEL_TXT_SEL_OFF` if none)
- * @param sel_end end index of selected area (`LV_LABEL_TXT_SEL_OFF` if none)
+ * @param bidi_dir base direction of the text
*/
void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale,
- const char * txt, lv_txt_flag_t flag, lv_point_t * offset, uint16_t sel_start, uint16_t sel_end,
- lv_draw_label_hint_t * hint);
+ const char * txt, lv_txt_flag_t flag, lv_point_t * offset, lv_draw_label_txt_sel_t * sel,
+ lv_draw_label_hint_t * hint, lv_bidi_dir_t bidi_dir);
/**********************
* MACROS
diff --git a/src/lv_draw/lv_draw_line.c b/src/lv_draw/lv_draw_line.c
index a522a4b57..949860b9d 100644
--- a/src/lv_draw/lv_draw_line.c
+++ b/src/lv_draw/lv_draw_line.c
@@ -1,4 +1,4 @@
-/**
+/**lip
* @file lv_draw_line.c
*
*/
@@ -9,6 +9,8 @@
#include
#include
#include "lv_draw.h"
+#include "lv_draw_mask.h"
+#include "lv_draw_blend.h"
#include "../lv_core/lv_refr.h"
#include "../lv_misc/lv_math.h"
@@ -20,40 +22,16 @@
* TYPEDEFS
**********************/
-typedef struct
-{
- lv_point_t p1;
- lv_point_t p2;
- lv_point_t p_act;
- lv_coord_t dx;
- lv_coord_t sx; /*-1: x1 < x2; 1: x2 >= x1*/
- lv_coord_t dy;
- lv_coord_t sy; /*-1: y1 < y2; 1: y2 >= y1*/
- lv_coord_t err;
- lv_coord_t e2;
- bool hor; /*Rather horizontal or vertical*/
-} line_draw_t;
-
-typedef struct
-{
- lv_coord_t width;
- lv_coord_t width_1;
- lv_coord_t width_half;
-} line_width_t;
-
/**********************
* STATIC PROTOTYPES
**********************/
-static void line_draw_hor(line_draw_t * main_line, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void line_draw_ver(line_draw_t * main_line, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void line_draw_skew(line_draw_t * main_line, bool dir_ori, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void line_init(line_draw_t * line, const lv_point_t * p1, const lv_point_t * p2);
-static bool line_next(line_draw_t * line);
-static bool line_next_y(line_draw_t * line);
-static bool line_next_x(line_draw_t * line);
+static void draw_line_skew(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * clip,
+ const lv_style_t * style, lv_opa_t opa_scale);
+static void draw_line_hor(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * clip,
+ const lv_style_t * style, lv_opa_t opa_scale);
+static void draw_line_ver(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * clip,
+ const lv_style_t * style, lv_opa_t opa_scale);
+
/**********************
* STATIC VARIABLES
@@ -75,563 +53,297 @@ static bool line_next_x(line_draw_t * line);
* @param style pointer to a line's style
* @param opa_scale scale down all opacities by the factor
*/
-void lv_draw_line(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * mask,
- const lv_style_t * style, lv_opa_t opa_scale)
+void lv_draw_line(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * clip,
+ const lv_style_t * style, lv_opa_t opa_scale)
{
-
if(style->line.width == 0) return;
if(point1->x == point2->x && point1->y == point2->y) return;
- /*Return if the points are out of the mask*/
- if(point1->x < mask->x1 - style->line.width && point2->x < mask->x1 - style->line.width) return;
- if(point1->x > mask->x2 + style->line.width && point2->x > mask->x2 + style->line.width) return;
- if(point1->y < mask->y1 - style->line.width && point2->y < mask->y1 - style->line.width) return;
- if(point1->y > mask->y2 + style->line.width && point2->y > mask->y2 + style->line.width) return;
+ lv_area_t clip_line;
+ clip_line.x1 = LV_MATH_MIN(point1->x, point2->x) - style->line.width/2;
+ clip_line.x2 = LV_MATH_MAX(point1->x, point2->x) + style->line.width/2;
+ clip_line.y1 = LV_MATH_MIN(point1->y, point2->y) - style->line.width/2;
+ clip_line.y2 = LV_MATH_MAX(point1->y, point2->y) + style->line.width/2;
- line_draw_t main_line;
- lv_point_t p1;
- lv_point_t p2;
+ bool is_common;
+ is_common = lv_area_intersect(&clip_line, &clip_line, clip);
+ if(!is_common) return;
- /*If the line if rather vertical then be sure y1 < y2 else x1 < x2*/
-
- if(LV_MATH_ABS(point1->x - point2->x) > LV_MATH_ABS(point1->y - point2->y)) {
-
- /*Steps less in y then x -> rather horizontal*/
- if(point1->x < point2->x) {
- p1.x = point1->x;
- p1.y = point1->y;
- p2.x = point2->x;
- p2.y = point2->y;
- } else {
- p1.x = point2->x;
- p1.y = point2->y;
- p2.x = point1->x;
- p2.y = point1->y;
- }
- } else {
- /*Steps less in x then y -> rather vertical*/
- if(point1->y < point2->y) {
- p1.x = point1->x;
- p1.y = point1->y;
- p2.x = point2->x;
- p2.y = point2->y;
- } else {
- p1.x = point2->x;
- p1.y = point2->y;
- p2.x = point1->x;
- p2.y = point1->y;
- }
- }
-
- line_init(&main_line, &p1, &p2);
-
- /*Special case draw a horizontal line*/
- if(main_line.p1.y == main_line.p2.y) {
- line_draw_hor(&main_line, mask, style, opa_scale);
- }
- /*Special case draw a vertical line*/
- else if(main_line.p1.x == main_line.p2.x) {
- line_draw_ver(&main_line, mask, style, opa_scale);
- }
- /*Arbitrary skew line*/
- else {
- bool dir_ori = false;
-#if LV_ANTIALIAS
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
- if(aa) {
- lv_point_t p_tmp;
-
- if(main_line.hor) {
- if(main_line.p1.y < main_line.p2.y) {
- dir_ori = true;
- p_tmp.x = main_line.p2.x;
- p_tmp.y = main_line.p2.y - 1;
- line_init(&main_line, &p1, &p_tmp);
- main_line.sy = LV_MATH_ABS(main_line.sy); /*The sign can change if the line becomes horizontal*/
- } else if(main_line.p1.y > main_line.p2.y) {
- dir_ori = false;
- p_tmp.x = main_line.p2.x;
- p_tmp.y = main_line.p2.y + 1;
- line_init(&main_line, &p1, &p_tmp);
- main_line.sy = -LV_MATH_ABS(main_line.sy); /*The sign can change if the line becomes horizontal*/
- }
- } else {
- if(main_line.p1.x < main_line.p2.x) {
- dir_ori = true;
- p_tmp.x = main_line.p2.x - 1;
- p_tmp.y = main_line.p2.y;
- line_init(&main_line, &p1, &p_tmp);
- main_line.sx = LV_MATH_ABS(main_line.sx); /*The sign can change if the line becomes vertical*/
- } else if(main_line.p1.x > main_line.p2.x) {
- dir_ori = false;
- p_tmp.x = main_line.p2.x + 1;
- p_tmp.y = main_line.p2.y;
- line_init(&main_line, &p1, &p_tmp);
- main_line.sx = -LV_MATH_ABS(main_line.sx); /*The sign can change if the line becomes vertical*/
- }
- }
- }
-#endif
- line_draw_skew(&main_line, dir_ori, mask, style, opa_scale);
- }
+ if(point1->y == point2->y) draw_line_hor(point1, point2, &clip_line, style, opa_scale);
+ else if(point1->x == point2->x) draw_line_ver(point1, point2, &clip_line, style, opa_scale);
+ else draw_line_skew(point1, point2, &clip_line, style, opa_scale);
}
/**********************
* STATIC FUNCTIONS
**********************/
-static void line_draw_hor(line_draw_t * main_line, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale)
+static void draw_line_hor(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * clip,
+ const lv_style_t * style, lv_opa_t opa_scale)
{
- lv_coord_t width = style->line.width - 1;
- lv_coord_t width_half = width >> 1;
- lv_coord_t width_1 = width & 0x1;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->line.opa : (uint16_t)((uint16_t)style->line.opa * opa_scale) >> 8;
+ lv_opa_t opa = style->line.opa;
+ if(opa_scale != LV_OPA_COVER) opa = (opa * opa_scale) >> 8;
- lv_area_t act_area;
- act_area.x1 = main_line->p1.x;
- act_area.x2 = main_line->p2.x;
- act_area.y1 = main_line->p1.y - width_half - width_1;
- act_area.y2 = main_line->p2.y + width_half;
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
+
+ const lv_area_t * disp_area = &vdb->area;
+
+ lv_coord_t w = style->line.width - 1;
+ lv_coord_t w_half0 = w >> 1;
+ lv_coord_t w_half1 = w_half0 + (w & 0x1); /*Compensate rounding error*/
+
+
+ int16_t other_mask_cnt = lv_draw_mask_get_cnt();
lv_area_t draw_area;
- draw_area.x1 = LV_MATH_MIN(act_area.x1, act_area.x2);
- draw_area.x2 = LV_MATH_MAX(act_area.x1, act_area.x2);
- draw_area.y1 = LV_MATH_MIN(act_area.y1, act_area.y2);
- draw_area.y2 = LV_MATH_MAX(act_area.y1, act_area.y2);
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-}
+ draw_area.x1 = LV_MATH_MIN(point1->x, point2->x);
+ draw_area.x2 = LV_MATH_MAX(point1->x, point2->x) - 1;
+ draw_area.y1 = point1->y - w_half1;
+ draw_area.y2 = point1->y + w_half0;
-static void line_draw_ver(line_draw_t * main_line, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale)
-{
- lv_coord_t width = style->line.width - 1;
- lv_coord_t width_half = width >> 1;
- lv_coord_t width_1 = width & 0x1;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->line.opa : (uint16_t)((uint16_t)style->line.opa * opa_scale) >> 8;
-
- lv_area_t act_area;
- act_area.x1 = main_line->p1.x - width_half;
- act_area.x2 = main_line->p2.x + width_half + width_1;
- act_area.y1 = main_line->p1.y;
- act_area.y2 = main_line->p2.y;
-
- lv_area_t draw_area;
- draw_area.x1 = LV_MATH_MIN(act_area.x1, act_area.x2);
- draw_area.x2 = LV_MATH_MAX(act_area.x1, act_area.x2);
- draw_area.y1 = LV_MATH_MIN(act_area.y1, act_area.y2);
- draw_area.y2 = LV_MATH_MAX(act_area.y1, act_area.y2);
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-}
-
-static void line_draw_skew(line_draw_t * main_line, bool dir_ori, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
-
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->line.opa : (uint16_t)((uint16_t)style->line.opa * opa_scale) >> 8;
-#if LV_ANTIALIAS
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
-#endif
- lv_point_t vect_main, vect_norm;
- vect_main.x = main_line->p2.x - main_line->p1.x;
- vect_main.y = main_line->p2.y - main_line->p1.y;
-
- if(main_line->hor) {
- if(main_line->p1.y < main_line->p2.y + dir_ori) {
- vect_norm.x = -vect_main.y;
- vect_norm.y = vect_main.x;
- } else {
- vect_norm.x = vect_main.y;
- vect_norm.y = -vect_main.x;
- }
- } else {
- if(main_line->p1.x < main_line->p2.x + dir_ori) {
- vect_norm.x = vect_main.y;
- vect_norm.y = -vect_main.x;
- } else {
- vect_norm.x = -vect_main.y;
- vect_norm.y = vect_main.x;
- }
+ /*If there is no mask then simply draw a rectangle*/
+ if(other_mask_cnt == 0) {
+ lv_blend_fill(clip, &draw_area,
+ style->line.color, NULL, LV_DRAW_MASK_RES_FULL_COVER,opa,
+ LV_BLEND_MODE_NORMAL);
}
-
- /* In case of a short but tick line the perpendicular ending is longer then the real line.
- * it would break the calculations so make the normal vector larger*/
- vect_norm.x = vect_norm.x << 4;
- vect_norm.y = vect_norm.y << 4;
-
- lv_coord_t width;
- width = style->line.width;
-
- /* The pattern stores the points of the line ending. It has the good direction and length.
- * The worth case is the 45° line where pattern can have 1.41 x `width` points*/
-
- lv_coord_t pattern_size = width * 2;
- lv_point_t * pattern = lv_draw_get_buf(pattern_size * sizeof(lv_point_t));
- lv_coord_t i = 0;
-
- /*Create a perpendicular pattern (a small line)*/
- if(width != 0) {
- line_draw_t pattern_line;
- lv_point_t p0 = {0, 0};
- line_init(&pattern_line, &p0, &vect_norm);
-
- uint32_t width_sqr = width * width;
- /* Run for a lot of times. Meanwhile the real width will be determined as well */
- for(i = 0; i < (lv_coord_t)pattern_size - 1; i++) {
- pattern[i].x = pattern_line.p_act.x;
- pattern[i].y = pattern_line.p_act.y;
-
- /*Finish the pattern line if it's length equal to the desired width (Use Pythagoras
- * theorem)*/
- uint32_t sqr = pattern_line.p_act.x * pattern_line.p_act.x + pattern_line.p_act.y * pattern_line.p_act.y;
- if(sqr >= width_sqr) {
- width = i;
-#if LV_ANTIALIAS
- if(aa) width--;
-#endif
- break;
- }
-
- line_next(&pattern_line);
- }
- }
-
-#if LV_ANTIALIAS
- lv_coord_t aa_last_corner;
- lv_coord_t width_safe = width;
- if(aa) {
- if(width == 0) width_safe = 1;
-
- aa_last_corner = 0;
- }
-#endif
-
- lv_coord_t x_center_ofs = 0;
- lv_coord_t y_center_ofs = 0;
-
- if(width != 0) {
- x_center_ofs = pattern[width - 1].x / 2;
- y_center_ofs = pattern[width - 1].y / 2;
- } else {
- if(main_line->hor && main_line->p1.y >= main_line->p2.y + dir_ori) pattern[0].y--;
- if(!main_line->hor && main_line->p1.x >= main_line->p2.x + dir_ori) pattern[0].x--;
- }
-
- /* Make the coordinates relative to the center */
- for(i = 0; i < width; i++) {
- pattern[i].x -= x_center_ofs;
- pattern[i].y -= y_center_ofs;
-#if LV_ANTIALIAS
- if(aa) {
- if(i != 0) {
- if(main_line->hor) {
- if(pattern[i - 1].x != pattern[i].x) {
- lv_coord_t seg_w = pattern[i].y - pattern[aa_last_corner].y;
- if(main_line->sy < 0) {
- lv_draw_aa_ver_seg(main_line->p1.x + pattern[aa_last_corner].x - 1,
- main_line->p1.y + pattern[aa_last_corner].y + seg_w + 1, seg_w, mask,
- style->line.color, opa);
-
- lv_draw_aa_ver_seg(main_line->p2.x + pattern[aa_last_corner].x + 1,
- main_line->p2.y + pattern[aa_last_corner].y + seg_w + 1, -seg_w, mask,
- style->line.color, opa);
- } else {
- lv_draw_aa_ver_seg(main_line->p1.x + pattern[aa_last_corner].x - 1,
- main_line->p1.y + pattern[aa_last_corner].y, seg_w, mask,
- style->line.color, opa);
-
- lv_draw_aa_ver_seg(main_line->p2.x + pattern[aa_last_corner].x + 1,
- main_line->p2.y + pattern[aa_last_corner].y, -seg_w, mask,
- style->line.color, opa);
- }
- aa_last_corner = i;
- }
- } else {
- if(pattern[i - 1].y != pattern[i].y) {
- lv_coord_t seg_w = pattern[i].x - pattern[aa_last_corner].x;
- if(main_line->sx < 0) {
- lv_draw_aa_hor_seg(main_line->p1.x + pattern[aa_last_corner].x + seg_w + 1,
- main_line->p1.y + pattern[aa_last_corner].y - 1, seg_w, mask,
- style->line.color, opa);
-
- lv_draw_aa_hor_seg(main_line->p2.x + pattern[aa_last_corner].x + seg_w + 1,
- main_line->p2.y + pattern[aa_last_corner].y + 1, -seg_w, mask,
- style->line.color, opa);
- } else {
- lv_draw_aa_hor_seg(main_line->p1.x + pattern[aa_last_corner].x,
- main_line->p1.y + pattern[aa_last_corner].y - 1, seg_w, mask,
- style->line.color, opa);
-
- lv_draw_aa_hor_seg(main_line->p2.x + pattern[aa_last_corner].x,
- main_line->p2.y + pattern[aa_last_corner].y + 1, -seg_w, mask,
- style->line.color, opa);
- }
- aa_last_corner = i;
- }
- }
- }
- }
-#endif
- }
-
-#if LV_ANTIALIAS
- /*Add the last part of anti-aliasing for the perpendicular ending*/
- if(width != 0 && aa) { /*Due to rounding error with very thin lines it looks ugly*/
- if(main_line->hor) {
- lv_coord_t seg_w = pattern[width_safe - 1].y - pattern[aa_last_corner].y;
- if(main_line->sy < 0) {
- lv_draw_aa_ver_seg(main_line->p1.x + pattern[aa_last_corner].x - 1,
- main_line->p1.y + pattern[aa_last_corner].y + seg_w, seg_w + main_line->sy, mask,
- style->line.color, opa);
-
- lv_draw_aa_ver_seg(main_line->p2.x + pattern[aa_last_corner].x + 1,
- main_line->p2.y + pattern[aa_last_corner].y + seg_w, -(seg_w + main_line->sy), mask,
- style->line.color, opa);
-
- } else {
- lv_draw_aa_ver_seg(main_line->p1.x + pattern[aa_last_corner].x - 1,
- main_line->p1.y + pattern[aa_last_corner].y, seg_w + main_line->sy, mask,
- style->line.color, opa);
-
- lv_draw_aa_ver_seg(main_line->p2.x + pattern[aa_last_corner].x + 1,
- main_line->p2.y + pattern[aa_last_corner].y, -(seg_w + main_line->sy), mask,
- style->line.color, opa);
- }
- } else {
- lv_coord_t seg_w = pattern[width_safe - 1].x - pattern[aa_last_corner].x;
- if(main_line->sx < 0) {
- lv_draw_aa_hor_seg(main_line->p1.x + pattern[aa_last_corner].x + seg_w,
- main_line->p1.y + pattern[aa_last_corner].y - 1, seg_w + main_line->sx, mask,
- style->line.color, opa);
-
- lv_draw_aa_hor_seg(main_line->p2.x + pattern[aa_last_corner].x + seg_w,
- main_line->p2.y + pattern[aa_last_corner].y + 1, -(seg_w + main_line->sx), mask,
- style->line.color, opa);
-
- } else {
- lv_draw_aa_hor_seg(main_line->p1.x + pattern[aa_last_corner].x,
- main_line->p1.y + pattern[aa_last_corner].y - 1, seg_w + main_line->sx, mask,
- style->line.color, opa);
-
- lv_draw_aa_hor_seg(main_line->p2.x + pattern[aa_last_corner].x,
- main_line->p2.y + pattern[aa_last_corner].y + 1, -(seg_w + main_line->sx), mask,
- style->line.color, opa);
- }
- }
- }
-#endif
-
-#if LV_ANTIALIAS
-
- /*Shift the anti aliasing on the edges (-1, 1 or 0 (zero only in case width == 0))*/
- lv_coord_t aa_shift1 = 0;
- lv_coord_t aa_shift2 = 0;
- if(aa) {
- if(main_line->hor == false) {
- if(main_line->sx < 0) {
- aa_shift1 = -1;
- aa_shift2 = width == 0 ? 0 : aa_shift1;
- } else {
- aa_shift2 = 1;
- aa_shift1 = width == 0 ? 0 : aa_shift2;
- }
- } else {
- if(main_line->sy < 0) {
- aa_shift1 = -1;
- aa_shift2 = width == 0 ? 0 : aa_shift1;
- } else {
- aa_shift2 = 1;
- aa_shift1 = width == 0 ? 0 : aa_shift2;
- }
- }
- }
-#endif
-
- volatile lv_point_t prev_p;
- prev_p.x = main_line->p1.x;
- prev_p.y = main_line->p1.y;
- lv_area_t draw_area;
- bool first_run = true;
-
- if(main_line->hor) {
- while(line_next_y(main_line)) {
- for(i = 0; i < width; i++) {
- draw_area.x1 = prev_p.x + pattern[i].x;
- draw_area.y1 = prev_p.y + pattern[i].y;
- draw_area.x2 = draw_area.x1 + main_line->p_act.x - prev_p.x - 1;
- draw_area.y2 = draw_area.y1;
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-
- /* Fill the gaps
- * When stepping in y one pixel remains empty on every corner (don't do this on the
- * first segment ) */
- if(i != 0 && pattern[i].x != pattern[i - 1].x && !first_run) {
- lv_draw_px(draw_area.x1, draw_area.y1 - main_line->sy, mask, style->line.color, opa);
- }
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- lv_draw_aa_hor_seg(prev_p.x + pattern[0].x, prev_p.y + pattern[0].y - aa_shift1,
- -(main_line->p_act.x - prev_p.x), mask, style->line.color, opa);
- lv_draw_aa_hor_seg(prev_p.x + pattern[width_safe - 1].x,
- prev_p.y + pattern[width_safe - 1].y + aa_shift2, main_line->p_act.x - prev_p.x,
- mask, style->line.color, opa);
- }
-#endif
-
- first_run = false;
-
- prev_p.x = main_line->p_act.x;
- prev_p.y = main_line->p_act.y;
- }
-
- for(i = 0; i < width; i++) {
- draw_area.x1 = prev_p.x + pattern[i].x;
- draw_area.y1 = prev_p.y + pattern[i].y;
- draw_area.x2 = draw_area.x1 + main_line->p_act.x - prev_p.x;
- draw_area.y2 = draw_area.y1;
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-
- /* Fill the gaps
- * When stepping in y one pixel remains empty on every corner */
- if(i != 0 && pattern[i].x != pattern[i - 1].x && !first_run) {
- lv_draw_px(draw_area.x1, draw_area.y1 - main_line->sy, mask, style->line.color, opa);
- }
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- lv_draw_aa_hor_seg(prev_p.x + pattern[0].x, prev_p.y + pattern[0].y - aa_shift1,
- -(main_line->p_act.x - prev_p.x + 1), mask, style->line.color, opa);
- lv_draw_aa_hor_seg(prev_p.x + pattern[width_safe - 1].x, prev_p.y + pattern[width_safe - 1].y + aa_shift2,
- main_line->p_act.x - prev_p.x + 1, mask, style->line.color, opa);
- }
-#endif
- }
- /*Rather a vertical line*/
+ /*If there other mask apply it*/
else {
+ /* Get clipped fill area which is the real draw area.
+ * It is always the same or inside `fill_area` */
+ bool is_common;
+ is_common = lv_area_intersect(&draw_area, clip, &draw_area);
+ if(!is_common) return;
- while(line_next_x(main_line)) {
- for(i = 0; i < width; i++) {
- draw_area.x1 = prev_p.x + pattern[i].x;
- draw_area.y1 = prev_p.y + pattern[i].y;
- draw_area.x2 = draw_area.x1;
- draw_area.y2 = draw_area.y1 + main_line->p_act.y - prev_p.y - 1;
+ /* Now `draw_area` has absolute coordinates.
+ * Make it relative to `disp_area` to simplify draw to `disp_buf`*/
+ draw_area.x1 -= vdb->area.x1;
+ draw_area.y1 -= vdb->area.y1;
+ draw_area.x2 -= vdb->area.x1;
+ draw_area.y2 -= vdb->area.y1;
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
+ lv_coord_t draw_area_w = lv_area_get_width(&draw_area);
- /* Fill the gaps
- * When stepping in x one pixel remains empty on every corner (don't do this on the
- * first segment ) */
- if(i != 0 && pattern[i].y != pattern[i - 1].y && !first_run) {
- lv_draw_px(draw_area.x1 - main_line->sx, draw_area.y1, mask, style->line.color, opa);
- }
- }
+ lv_area_t fill_area;
+ fill_area.x1 = draw_area.x1 + disp_area->x1;
+ fill_area.x2 = draw_area.x2 + disp_area->x1;
+ fill_area.y1 = draw_area.y1 + disp_area->y1;
+ fill_area.y2 = fill_area.y1;
-#if LV_ANTIALIAS
- if(aa) {
- lv_draw_aa_ver_seg(prev_p.x + pattern[0].x - aa_shift1, prev_p.y + pattern[0].y,
- -(main_line->p_act.y - prev_p.y), mask, style->line.color, opa);
- lv_draw_aa_ver_seg(prev_p.x + pattern[width_safe - 1].x + aa_shift2,
- prev_p.y + pattern[width_safe - 1].y, main_line->p_act.y - prev_p.y, mask,
- style->line.color, opa);
- }
-#endif
+ lv_opa_t * mask_buf = lv_mem_buf_get(draw_area_w);
+ lv_coord_t h;
+ lv_draw_mask_res_t mask_res;
+ for(h = draw_area.y1; h <= draw_area.y2; h++) {
+ memset(mask_buf, LV_OPA_COVER, draw_area_w);
+ mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
- first_run = false;
+ lv_blend_fill(clip, &fill_area,
+ style->line.color, mask_buf, mask_res, style->line.opa,
+ style->line.blend_mode);
- prev_p.x = main_line->p_act.x;
- prev_p.y = main_line->p_act.y;
- }
-
- /*Draw the last part*/
- for(i = 0; i < width; i++) {
- draw_area.x1 = prev_p.x + pattern[i].x;
- draw_area.y1 = prev_p.y + pattern[i].y;
- draw_area.x2 = draw_area.x1;
- draw_area.y2 = draw_area.y1 + main_line->p_act.y - prev_p.y;
-
- lv_draw_fill(&draw_area, mask, style->line.color, opa);
-
- /* Fill the gaps
- * When stepping in x one pixel remains empty on every corner */
- if(i != 0 && pattern[i].y != pattern[i - 1].y && !first_run) {
- lv_draw_px(draw_area.x1 - main_line->sx, draw_area.y1, mask, style->line.color, opa);
- }
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- lv_draw_aa_ver_seg(prev_p.x + pattern[0].x - aa_shift1, prev_p.y + pattern[0].y,
- -(main_line->p_act.y - prev_p.y + 1), mask, style->line.color, opa);
- lv_draw_aa_ver_seg(prev_p.x + pattern[width_safe - 1].x + aa_shift2, prev_p.y + pattern[width_safe - 1].y,
- main_line->p_act.y - prev_p.y + 1, mask, style->line.color, opa);
- }
-#endif
+ fill_area.y1++;
+ fill_area.y2++;
+ }
+ lv_mem_buf_release(mask_buf);
}
}
-static void line_init(line_draw_t * line, const lv_point_t * p1, const lv_point_t * p2)
+
+static void draw_line_ver(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * clip,
+ const lv_style_t * style, lv_opa_t opa_scale)
{
- line->p1.x = p1->x;
- line->p1.y = p1->y;
- line->p2.x = p2->x;
- line->p2.y = p2->y;
+ lv_opa_t opa = style->line.opa;
+ if(opa_scale != LV_OPA_COVER) opa = (opa * opa_scale) >> 8;
- line->dx = LV_MATH_ABS(line->p2.x - line->p1.x);
- line->sx = line->p1.x < line->p2.x ? 1 : -1;
- line->dy = LV_MATH_ABS(line->p2.y - line->p1.y);
- line->sy = line->p1.y < line->p2.y ? 1 : -1;
- line->err = (line->dx > line->dy ? line->dx : -line->dy) / 2;
- line->e2 = 0;
- line->hor = line->dx > line->dy ? true : false; /*Rather horizontal or vertical*/
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
- line->p_act.x = line->p1.x;
- line->p_act.y = line->p1.y;
-}
+ const lv_area_t * disp_area = &vdb->area;
-static bool line_next(line_draw_t * line)
-{
- if(line->p_act.x == line->p2.x && line->p_act.y == line->p2.y) return false;
- line->e2 = line->err;
- if(line->e2 > -line->dx) {
- line->err -= line->dy;
- line->p_act.x += line->sx;
+ lv_coord_t w = style->line.width - 1;
+ lv_coord_t w_half0 = w >> 1;
+ lv_coord_t w_half1 = w_half0 + (w & 0x1); /*Compensate rounding error*/
+
+
+ int16_t other_mask_cnt = lv_draw_mask_get_cnt();
+
+ lv_area_t draw_area;
+ draw_area.x1 = point1->x - w_half1;
+ draw_area.x2 = point1->x + w_half0;
+ draw_area.y1 = LV_MATH_MIN(point1->y, point2->y);
+ draw_area.y2 = LV_MATH_MAX(point1->y, point2->y) - 1;
+
+ /*If there is no mask then simply draw a rectangle*/
+ if(other_mask_cnt == 0) {
+
+ lv_blend_fill(clip, &draw_area,
+ style->line.color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa,
+ style->line.blend_mode);
}
- if(line->e2 < line->dy) {
- line->err += line->dx;
- line->p_act.y += line->sy;
+ /*If there other mask apply it*/
+ else {
+ /* Get clipped fill area which is the real draw area.
+ * It is always the same or inside `fill_area` */
+ bool is_common;
+ is_common = lv_area_intersect(&draw_area, clip, &draw_area);
+ if(!is_common) return;
+
+ /* Now `draw_area` has absolute coordinates.
+ * Make it relative to `disp_area` to simplify draw to `disp_buf`*/
+ draw_area.x1 -= vdb->area.x1;
+ draw_area.y1 -= vdb->area.y1;
+ draw_area.x2 -= vdb->area.x1;
+ draw_area.y2 -= vdb->area.y1;
+
+ lv_coord_t draw_area_w = lv_area_get_width(&draw_area);
+
+ lv_area_t fill_area;
+ fill_area.x1 = draw_area.x1 + disp_area->x1;
+ fill_area.x2 = draw_area.x2 + disp_area->x1;
+ fill_area.y1 = draw_area.y1 + disp_area->y1;
+ fill_area.y2 = fill_area.y1;
+
+ lv_opa_t * mask_buf = lv_mem_buf_get(draw_area_w);
+ lv_coord_t h;
+ lv_draw_mask_res_t mask_res;
+ for(h = draw_area.y1; h <= draw_area.y2; h++) {
+ memset(mask_buf, LV_OPA_COVER, draw_area_w);
+ mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
+
+ lv_blend_fill(clip, &fill_area,
+ style->line.color, mask_buf, mask_res, style->line.opa,
+ LV_BLEND_MODE_NORMAL);
+
+ fill_area.y1++;
+ fill_area.y2++;
+ }
+ lv_mem_buf_release(mask_buf);
}
- return true;
}
-/**
- * Iterate until step one in y direction.
- * @param line
- * @return
- */
-static bool line_next_y(line_draw_t * line)
+
+static void draw_line_skew(const lv_point_t * point1, const lv_point_t * point2, const lv_area_t * clip,
+ const lv_style_t * style, lv_opa_t opa_scale)
{
- lv_coord_t last_y = line->p_act.y;
+ lv_opa_t opa = style->line.opa;
+ if(opa_scale != LV_OPA_COVER) opa = (opa * opa_scale) >> 8;
- do {
- if(!line_next(line)) return false;
- } while(last_y == line->p_act.y);
+ /*Keep the great y in p1*/
+ lv_point_t p1;
+ lv_point_t p2;
+ if(point1->y < point2->y) {
+ p1.y = point1->y;
+ p2.y = point2->y;
+ p1.x = point1->x;
+ p2.x = point2->x;
+ } else {
+ p1.y = point2->y;
+ p2.y = point1->y;
+ p1.x = point2->x;
+ p2.x = point1->x;
+ }
- return true;
-}
-
-/**
- * Iterate until step one in x direction.
- * @param line
- * @return
- */
-static bool line_next_x(line_draw_t * line)
-{
- lv_coord_t last_x = line->p_act.x;
-
- do {
- if(!line_next(line)) return false;
- } while(last_x == line->p_act.x);
-
- return true;
+ lv_coord_t xdiff = p2.x - p1.x;
+ lv_coord_t ydiff = p2.y - p1.y;
+ bool flat = LV_MATH_ABS(xdiff) > LV_MATH_ABS(ydiff) ? true : false;
+
+ static const uint8_t wcorr[] = {
+ 128, 128, 128, 129, 129, 130, 130, 131,
+ 132, 133, 134, 135, 137, 138, 140, 141,
+ 143, 145, 147, 149, 151, 153, 155, 158,
+ 160, 162, 165, 167, 170, 173, 175, 178,
+ 181,
+ };
+
+ lv_coord_t w = style->line.width;
+ lv_coord_t wcorr_i = 0;
+ if(flat) wcorr_i = (LV_MATH_ABS(ydiff) << 5) / LV_MATH_ABS(xdiff);
+ else wcorr_i = (LV_MATH_ABS(xdiff) << 5) / LV_MATH_ABS(ydiff);
+
+ w = (w * wcorr[wcorr_i]) >> 7;
+ lv_coord_t w_half0 = w >> 1;
+ lv_coord_t w_half1 = w_half0 + (w & 0x1); /*Compensate rounding error*/
+
+ lv_area_t draw_area;
+ draw_area.x1 = LV_MATH_MIN(p1.x, p2.x) - w;
+ draw_area.x2 = LV_MATH_MAX(p1.x, p2.x) + w;
+ draw_area.y1 = LV_MATH_MIN(p1.y, p2.y) - w;
+ draw_area.y2 = LV_MATH_MAX(p1.y, p2.y) + w;
+
+ /* Get the union of `coords` and `clip`*/
+ /* `clip` is already truncated to the `vdb` size
+ * in 'lv_refr_area' function */
+ bool is_common = lv_area_intersect(&draw_area, &draw_area, clip);
+ if(is_common == false) return;
+
+ lv_draw_mask_line_param_t mask_left_param;
+ lv_draw_mask_line_param_t mask_right_param;
+ lv_draw_mask_line_param_t mask_top_param;
+ lv_draw_mask_line_param_t mask_bottom_param;
+
+ if(flat) {
+ if(xdiff > 0) {
+ lv_draw_mask_line_points_init(&mask_left_param, p1.x, p1.y - w_half0, p2.x, p2.y - w_half0, LV_DRAW_MASK_LINE_SIDE_LEFT);
+ lv_draw_mask_line_points_init(&mask_right_param, p1.x, p1.y + w_half1, p2.x, p2.y + w_half1, LV_DRAW_MASK_LINE_SIDE_RIGHT);
+ } else {
+ lv_draw_mask_line_points_init(&mask_left_param, p1.x, p1.y + w_half1, p2.x, p2.y + w_half1, LV_DRAW_MASK_LINE_SIDE_LEFT);
+ lv_draw_mask_line_points_init(&mask_right_param, p1.x, p1.y - w_half0, p2.x, p2.y - w_half0, LV_DRAW_MASK_LINE_SIDE_RIGHT);
+ }
+ } else {
+ lv_draw_mask_line_points_init(&mask_left_param, p1.x + w_half1, p1.y, p2.x + w_half1, p2.y, LV_DRAW_MASK_LINE_SIDE_LEFT);
+ lv_draw_mask_line_points_init(&mask_right_param, p1.x - w_half0, p1.y, p2.x - w_half0, p2.y, LV_DRAW_MASK_LINE_SIDE_RIGHT);
+ }
+
+ /*Use the normal vector for the endings*/
+ lv_draw_mask_line_points_init(&mask_top_param, p1.x, p1.y, p1.x - ydiff, p1.y + xdiff, LV_DRAW_MASK_LINE_SIDE_BOTTOM);
+ lv_draw_mask_line_points_init(&mask_bottom_param, p2.x, p2.y,p2.x - ydiff, p2.y + xdiff, LV_DRAW_MASK_LINE_SIDE_TOP);
+
+ int16_t mask_left_id = lv_draw_mask_add(&mask_left_param, NULL);
+ int16_t mask_right_id = lv_draw_mask_add(&mask_right_param, NULL);
+ int16_t mask_top_id = lv_draw_mask_add(&mask_top_param, NULL);
+ int16_t mask_bottom_id = lv_draw_mask_add(&mask_bottom_param, NULL);
+
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
+
+ const lv_area_t * disp_area = &vdb->area;
+
+ /*Store the coordinates of the `draw_a` relative to the VDB */
+ draw_area.x1 -= disp_area->x1;
+ draw_area.y1 -= disp_area->y1;
+ draw_area.x2 -= disp_area->x1;
+ draw_area.y2 -= disp_area->y1;
+
+ lv_coord_t draw_area_w = lv_area_get_width(&draw_area);
+
+ /*Draw the background line by line*/
+ lv_coord_t h;
+ lv_draw_mask_res_t mask_res;
+ lv_opa_t * mask_buf = lv_mem_buf_get(draw_area_w);
+ lv_area_t fill_area;
+ fill_area.x1 = draw_area.x1 + disp_area->x1;
+ fill_area.x2 = draw_area.x2 + disp_area->x1;
+ fill_area.y1 = draw_area.y1 + disp_area->y1;
+ fill_area.y2 = fill_area.y1;
+
+ /*Fill the first row with 'color'*/
+ for(h = draw_area.y1; h <= draw_area.y2; h++) {
+ memset(mask_buf, LV_OPA_COVER, draw_area_w);
+ mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
+
+ lv_blend_fill(clip, &fill_area,
+ style->line.color, mask_buf, mask_res, opa,
+ style->line.blend_mode);
+
+ fill_area.y1++;
+ fill_area.y2++;
+ }
+
+ lv_mem_buf_release(mask_buf);
+
+ lv_draw_mask_remove_id(mask_left_id);
+ lv_draw_mask_remove_id(mask_right_id);
+ lv_draw_mask_remove_id(mask_top_id);
+ lv_draw_mask_remove_id(mask_bottom_id);
}
diff --git a/src/lv_draw/lv_draw_mask.c b/src/lv_draw/lv_draw_mask.c
new file mode 100644
index 000000000..891369306
--- /dev/null
+++ b/src/lv_draw/lv_draw_mask.c
@@ -0,0 +1,1127 @@
+/**
+ * @file lv_mask.c
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_draw_mask.h"
+#include "../lv_misc/lv_math.h"
+#include "../lv_misc/lv_log.h"
+#include "../lv_core/lv_debug.h"
+
+/*********************
+ * DEFINES
+ *********************/
+#define LV_MASK_MAX_NUM 16
+
+/**********************
+ * TYPEDEFS
+ **********************/
+typedef struct
+{
+ void * param;
+ void * custom_id;
+}lv_mask_saved_t;
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+static lv_draw_mask_res_t lv_draw_mask_line(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_line_param_t * param);
+static lv_draw_mask_res_t lv_draw_mask_radius(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_radius_param_t * param);
+static lv_draw_mask_res_t lv_draw_mask_angle(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_angle_param_t * param);
+static lv_draw_mask_res_t lv_draw_mask_fade(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_fade_param_t * param);
+static lv_draw_mask_res_t lv_draw_mask_map(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_map_param_t * param);
+
+static lv_draw_mask_res_t line_mask_flat(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_line_param_t * p);
+static lv_draw_mask_res_t line_mask_steep(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_line_param_t * p);
+
+static inline lv_opa_t mask_mix(lv_opa_t mask_act, lv_opa_t mask_new);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+static lv_mask_saved_t mask_list[LV_MASK_MAX_NUM];
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Add a draw mask. Everything drawn after it (until removing the mask) will be affected by the mask.
+ * @param param an initialized mask parameter. Only the pointer is saved.
+ * @param custom_id a custom pointer to identify the mask. Used in `lv_draw_mask_remove_custom`.
+ * @return the an integer, the ID of the mask. Can be used in `lv_draw_mask_remove_id`.
+ */
+int16_t lv_draw_mask_add(void * param, void * custom_id)
+{
+ /*Look for a free entry*/
+ uint8_t i;
+ for(i = 0; i < LV_MASK_MAX_NUM; i++) {
+ if(mask_list[i].param == NULL) break;
+ }
+
+ if(i >= LV_MASK_MAX_NUM) {
+ LV_LOG_WARN("lv_mask_add: no place to add the mask");
+ return LV_MASK_ID_INV;
+ }
+
+ mask_list[i].param = param;
+ mask_list[i].custom_id = custom_id;
+
+ return i;
+}
+
+/**
+ * Apply the added buffers on a line. Used internally by the library's drawing routins.
+ * @param mask_buf store the result mask here. Has to be `len` byte long. Should be initialized with `0xFF`.
+ * @param abs_x absolute X coordinate where the line to calculate start
+ * @param abs_y absolute Y coordinate where the line to calculate start
+ * @param len length of the line to calculate (in pixel count)
+ * @return Oneof these values:
+ * - `LV_DRAW_MASK_RES_FULL_TRANSP`: the whole line is transparent. `mask_buf` is not set to zero
+ * - `LV_DRAW_MASK_RES_FULL_COVER`: the whole line is fully visible. `mask_buf` is unchanged
+ * - `LV_DRAW_MASK_RES_CHANGED`: `mask_buf` has changed, it shows the desired opacity of each pixel in the given line
+ */
+lv_draw_mask_res_t lv_draw_mask_apply(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len)
+{
+ bool changed = false;
+ lv_draw_mask_common_dsc_t * dsc;
+
+ lv_draw_mask_res_t res = LV_DRAW_MASK_RES_FULL_COVER;
+ uint8_t i;
+ for(i = 0; i < LV_MASK_MAX_NUM; i++) {
+ if(mask_list[i].param) {
+ dsc = mask_list[i].param;
+ res = dsc->cb(mask_buf, abs_x, abs_y, len, (void*)mask_list[i].param);
+ if(res == LV_DRAW_MASK_RES_FULL_TRANSP) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ else if(res == LV_DRAW_MASK_RES_CHANGED) changed = true;
+ }
+ }
+
+ return changed ? LV_DRAW_MASK_RES_CHANGED : LV_DRAW_MASK_RES_FULL_COVER;
+}
+
+/**
+ * Remove a mask with a given ID
+ * @param id the ID of the mask. Returned by `lv_draw_mask_add`
+ * @return the parameter of the removed mask.
+ * If more masks have `custom_id` ID then the last mask's parameter will be returned
+ */
+void * lv_draw_mask_remove_id(int16_t id)
+{
+ void * p = NULL;
+
+ if(id != LV_MASK_ID_INV) {
+ p = mask_list[id].param;
+ mask_list[id].param = NULL;
+ mask_list[id].custom_id = NULL;
+ }
+
+ return p;
+}
+
+/**
+ * Remove all mask with a given custom ID
+ * @param custom_id a pointer used in `lv_draw_mask_add`
+ * @return return the parameter of the removed mask.
+ * If more masks have `custom_id` ID then the last mask's parameter will be returned
+ */
+void * lv_draw_mask_remove_custom(void * custom_id)
+{
+ void * p = NULL;
+ uint8_t i;
+ for(i = 0; i < LV_MASK_MAX_NUM; i++) {
+ if(mask_list[i].custom_id == custom_id) {
+ p = mask_list[i].param;
+ mask_list[i].param = NULL;
+ mask_list[i].custom_id = NULL;
+ }
+ }
+ return p;
+}
+
+/**
+ * Count the currently added masks
+ * @return number of active masks
+ */
+uint8_t lv_draw_mask_get_cnt(void)
+{
+ uint8_t cnt = 0;
+ uint8_t i;
+ for(i = 0; i < LV_MASK_MAX_NUM; i++) {
+ if(mask_list[i].param) cnt++;
+ }
+ return cnt;
+}
+
+/**
+ *Initialize a line mask from two points.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param p1x X coordinate of the first point of the line
+ * @param p1y Y coordinate of the first point of the line
+ * @param p2x X coordinate of the second point of the line
+ * @param p2y y coordinate of the second point of the line
+ * @param side and element of `lv_draw_mask_line_side_t` to describe which side to keep.
+ * With `LV_DRAW_MASK_LINE_SIDE_LEFT/RIGHT` and horizontal line all pixels are kept
+ * With `LV_DRAW_MASK_LINE_SIDE_TOP/BOTTOM` and vertical line all pixels are kept
+ */
+void lv_draw_mask_line_points_init(lv_draw_mask_line_param_t * param, lv_coord_t p1x, lv_coord_t p1y, lv_coord_t p2x, lv_coord_t p2y, lv_draw_mask_line_side_t side)
+{
+ memset(param, 0x00, sizeof(lv_draw_mask_line_param_t));
+
+ if(p1y > p2y) {
+ lv_coord_t t;
+ t = p2x;
+ p2x = p1x;
+ p1x = t;
+
+ t = p2y;
+ p2y = p1y;
+ p1y = t;
+ }
+
+ param->cfg.p1.x = p1x;
+ param->cfg.p1.y = p1y;
+ param->cfg.p2.x = p1x;
+ param->cfg.p2.y = p1y;
+ param->cfg.side = side;
+
+ param->origo.x = p1x;
+ param->origo.y = p1y;
+ param->flat = (LV_MATH_ABS(p2x-p1x) > LV_MATH_ABS(p2y-p1y)) ? 1 : 0;
+ param->yx_steep = 0;
+ param->xy_steep = 0;
+ param->dsc.cb = (lv_draw_mask_cb_t)lv_draw_mask_line;
+ param->dsc.type = LV_DRAW_MASK_TYPE_LINE;
+
+ lv_coord_t dx = p2x-p1x;
+ lv_coord_t dy = p2y-p1y;
+
+ if(param->flat) {
+ /*Normalize the steep. Delta x should be relative to delta x = 1024*/
+ int32_t m;
+
+ if(dx) {
+ m = (1 << 20) / dx; /*m is multiplier to normalize y (upscaled by 1024)*/
+ param->yx_steep = (m * dy) >> 10;
+ }
+
+ if(dy) {
+ m = (1 << 20) / dy; /*m is multiplier to normalize x (upscaled by 1024)*/
+ param->xy_steep = (m * dx) >> 10;
+ }
+ param->steep = param->yx_steep;
+ } else {
+ /*Normalize the steep. Delta y should be relative to delta x = 1024*/
+ int32_t m;
+
+ if(dy) {
+ m = (1 << 20) / dy; /*m is multiplier to normalize x (upscaled by 1024)*/
+ param->xy_steep = (m * dx) >> 10;
+ }
+
+ if(dx) {
+ m = (1 << 20) / dx; /*m is multiplier to normalize x (upscaled by 1024)*/
+ param->yx_steep = (m * dy) >> 10;
+ }
+ param->steep = param->xy_steep;
+ }
+
+ if(param->cfg.side == LV_DRAW_MASK_LINE_SIDE_LEFT) param->inv = 0;
+ else if(param->cfg.side == LV_DRAW_MASK_LINE_SIDE_RIGHT) param->inv = 1;
+ else if(param->cfg.side == LV_DRAW_MASK_LINE_SIDE_TOP) {
+ if(param->steep > 0) param->inv = 1;
+ else param->inv = 0;
+ }
+ else if(param->cfg.side == LV_DRAW_MASK_LINE_SIDE_BOTTOM) {
+ if(param->steep > 0) param->inv = 0;
+ else param->inv = 1;
+ }
+
+ param->spx = param->steep >> 2;
+ if(param->steep < 0) param->spx = -param->spx;
+}
+
+/**
+ *Initialize a line mask from a point and an angle.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param px X coordiante of a point of the line
+ * @param py X coordiante of a point of the line
+ * @param angle right 0 deg, bottom: 90
+ * @param side and element of `lv_draw_mask_line_side_t` to describe which side to keep.
+ * With `LV_DRAW_MASK_LINE_SIDE_LEFT/RIGHT` and horizontal line all pixels are kept
+ * With `LV_DRAW_MASK_LINE_SIDE_TOP/BOTTOM` and vertical line all pixels are kept
+ */
+void lv_draw_mask_line_angle_init(lv_draw_mask_line_param_t* param, lv_coord_t p1x, lv_coord_t py, int16_t angle, lv_draw_mask_line_side_t side)
+{
+ /* Find an optimal degree.
+ * lv_mask_line_points_init will swap the points to keep the smaller y in p1
+ * Theoretically a line with `angle` or `angle+180` is the same only the points are swapped
+ * Find the degree which keeps the origo in place */
+ if(angle > 180) angle -= 180; /*> 180 will swap the origo*/
+
+
+ lv_coord_t p2x;
+ lv_coord_t p2y;
+
+ p2x = (lv_trigo_sin(angle + 90) >> 5) + p1x;
+ p2y = (lv_trigo_sin(angle) >> 5) + py;
+
+ lv_draw_mask_line_points_init(param, p1x, py, p2x, p2y, side);
+}
+
+
+/**
+ * Initialize an angle mask.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param vertex_x X coordinate of the angle vertex (absolute coordinates)
+ * @param vertex_y Y coordinate of the angle vertex (absolute coordinates)
+ * @param start_angle start angle in degrees. 0 deg on the right, 90 deg, on the bottom
+ * @param end_angle end angle
+ */
+void lv_draw_mask_angle_init(lv_draw_mask_angle_param_t * param, lv_coord_t vertex_x, lv_coord_t vertex_y, lv_coord_t start_angle, lv_coord_t end_angle)
+{
+ lv_draw_mask_line_side_t start_side;
+ lv_draw_mask_line_side_t end_side;
+
+ /* Constrain the input angles */
+ if(start_angle < 0)
+ start_angle = 0;
+ else if(start_angle > 359)
+ start_angle = 359;
+
+ if(end_angle < 0)
+ end_angle = 0;
+ else if(end_angle > 359)
+ end_angle = 359;
+
+ if(end_angle < start_angle) {
+ param->delta_deg = 360 - start_angle + end_angle;
+ } else {
+ param->delta_deg = LV_MATH_ABS(end_angle - start_angle);
+ }
+
+ param->cfg.start_angle = start_angle;
+ param->cfg.end_angle = end_angle;
+ param->cfg.vertex_p.x = vertex_x;
+ param->cfg.vertex_p.y = vertex_y;
+ param->dsc.cb = (lv_draw_mask_cb_t)lv_draw_mask_angle;
+ param->dsc.type = LV_DRAW_MASK_TYPE_ANGLE;
+
+ if(start_angle >= 0 && start_angle < 180) {
+ start_side = LV_DRAW_MASK_LINE_SIDE_LEFT;
+ }
+ else if(start_angle >= 180 && start_angle < 360) {
+ start_side = LV_DRAW_MASK_LINE_SIDE_RIGHT;
+ } else {
+ LV_DEBUG_ASSERT(false, "Unexpected start_angle", start_angle);
+ }
+
+ if(end_angle >= 0 && end_angle < 180) {
+ end_side = LV_DRAW_MASK_LINE_SIDE_RIGHT;
+ }
+ else if(end_angle >= 180 && end_angle < 360) {
+ end_side = LV_DRAW_MASK_LINE_SIDE_LEFT;
+ } else {
+ LV_DEBUG_ASSERT(false, "Unexpected end_angle", end_angle);
+ }
+
+ lv_draw_mask_line_angle_init(¶m->start_line, vertex_x, vertex_y, start_angle, start_side);
+ lv_draw_mask_line_angle_init(¶m->end_line, vertex_x, vertex_y, end_angle, end_side);
+}
+
+
+/**
+ * Initialize a fade mask.
+ * @param param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param rect coordinates of the rectangle to affect (absolute coordinates)
+ * @param radius radius of the rectangle
+ * @param inv: true: keep the pixels inside teh rectangle; keep teh pixels outside of the rectangle
+ */
+void lv_draw_mask_radius_init(lv_draw_mask_radius_param_t * param, const lv_area_t * rect, lv_coord_t radius, bool inv)
+{
+
+ lv_coord_t short_side = LV_MATH_MIN(lv_area_get_width(rect), lv_area_get_height(rect));
+ if(radius > short_side >> 1) radius = short_side >> 1;
+
+ lv_area_copy(¶m->cfg.rect, rect);
+ param->cfg.radius = radius;
+ param->cfg.outer = inv ? 1 : 0;
+ param->dsc.cb = (lv_draw_mask_cb_t)lv_draw_mask_radius;
+ param->dsc.type = LV_DRAW_MASK_TYPE_RADIUS;
+}
+
+
+/**
+ * Initialize a fade mask.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param coords coordinates of the area to affect (absolute coordinates)
+ * @param opa_top opacity on the top
+ * @param y_top at which coordinate start to change to opacity to `opa_bottom`
+ * @param opa_bottom opacity at the bottom
+ * @param y_bottom at which coordinate reach `opa_bottom`.
+ */
+void lv_draw_mask_fade_init(lv_draw_mask_fade_param_t * param, lv_area_t * coords, lv_opa_t opa_top, lv_coord_t y_top, lv_opa_t opa_bottom, lv_coord_t y_bottom)
+{
+ lv_area_copy(¶m->cfg.coords, coords);
+ param->cfg.opa_top= opa_top;
+ param->cfg.opa_bottom = opa_bottom;
+ param->cfg.y_top= y_top;
+ param->cfg.y_bottom = y_bottom;
+ param->dsc.cb = (lv_draw_mask_cb_t)lv_draw_mask_fade;
+ param->dsc.type = LV_DRAW_MASK_TYPE_FADE;
+}
+
+
+/**
+ * Initialize a map mask.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param coords coordinates of the map (absolute coordinates)
+ * @param map array of bytes with the mask values
+ */
+void lv_draw_mask_map_init(lv_draw_mask_map_param_t * param, lv_area_t * coords, const lv_opa_t * map)
+{
+ lv_area_copy(¶m->cfg.coords, coords);
+ param->cfg.map = map;
+ param->dsc.cb = (lv_draw_mask_cb_t)lv_draw_mask_map;
+ param->dsc.type = LV_DRAW_MASK_TYPE_MAP;
+}
+
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+static lv_draw_mask_res_t lv_draw_mask_line(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_line_param_t * p)
+{
+ /*Make to points relative to the vertex*/
+ abs_y -= p->origo.y;
+ abs_x -= p->origo.x;
+
+ /*Handle special cases*/
+ if(p->steep == 0) {
+ /*Horizontal*/
+ if(p->flat) {
+ /*Non sense: Can't be on the right/left of a horizontal line*/
+ if(p->cfg.side == LV_DRAW_MASK_LINE_SIDE_LEFT || p->cfg.side == LV_DRAW_MASK_LINE_SIDE_RIGHT) return LV_DRAW_MASK_RES_FULL_COVER;
+ else if(p->cfg.side == LV_DRAW_MASK_LINE_SIDE_TOP && abs_y+1 < 0) return LV_DRAW_MASK_RES_FULL_COVER;
+ else if(p->cfg.side == LV_DRAW_MASK_LINE_SIDE_BOTTOM && abs_y > 0) return LV_DRAW_MASK_RES_FULL_COVER;
+ else {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ }
+ /*Vertical*/
+ else {
+ /*Non sense: Can't be on the top/bottom of a vertical line*/
+ if(p->cfg.side == LV_DRAW_MASK_LINE_SIDE_TOP || p->cfg.side == LV_DRAW_MASK_LINE_SIDE_BOTTOM) return LV_DRAW_MASK_RES_FULL_COVER;
+ else if(p->cfg.side == LV_DRAW_MASK_LINE_SIDE_RIGHT && abs_x > 0) return LV_DRAW_MASK_RES_FULL_COVER;
+ else if(p->cfg.side == LV_DRAW_MASK_LINE_SIDE_LEFT) {
+ if(abs_x + len < 0) return LV_DRAW_MASK_RES_FULL_COVER;
+ else {
+ int32_t k = - abs_x;
+ if(k < 0) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ if(k >= 0 && k < len) memset(&mask_buf[k], 0x00, len - k);
+ return LV_DRAW_MASK_RES_CHANGED;
+ }
+ }
+ else {
+ if(abs_x + len < 0) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ else {
+ int32_t k = - abs_x;
+ if(k < 0) k = 0;
+ if(k >= len) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ else if(k >= 0 && k < len) memset(&mask_buf[0], 0x00,k);
+ return LV_DRAW_MASK_RES_CHANGED;
+ }
+ }
+ }
+ }
+
+ lv_draw_mask_res_t res;
+ if(p->flat) {
+ res = line_mask_flat(mask_buf, abs_x, abs_y, len, p);
+ } else {
+ res = line_mask_steep(mask_buf, abs_x, abs_y, len, p);
+ }
+
+ return res;
+}
+
+static lv_draw_mask_res_t line_mask_flat(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_line_param_t * p)
+{
+ lv_coord_t y_at_x;
+ y_at_x = (int32_t)((int32_t)p->yx_steep * abs_x) >> 10;
+
+ if(p->yx_steep > 0) {
+ if(y_at_x > abs_y) {
+ if(p->inv) {
+ return LV_DRAW_MASK_RES_FULL_COVER;
+ } else {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ }
+ } else {
+ if(y_at_x < abs_y) {
+ if(p->inv) {
+ return LV_DRAW_MASK_RES_FULL_COVER;
+ } else {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ }
+ }
+
+ /* At the end of the mask if the limit line is smaller then the mask's y.
+ * Then the mask is in the "good" area*/
+ y_at_x = (int32_t)((int32_t)p->yx_steep * (abs_x + len)) >> 10;
+ if(p->yx_steep > 0) {
+ if(y_at_x < abs_y) {
+ if(p->inv) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ } else {
+ return LV_DRAW_MASK_RES_FULL_COVER;
+ }
+ }
+ } else {
+ if(y_at_x > abs_y) {
+ if(p->inv) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ } else {
+ return LV_DRAW_MASK_RES_FULL_COVER;
+ }
+ }
+ }
+
+ int32_t xe;
+ if(p->yx_steep > 0) xe = ((abs_y << 8) * p->xy_steep) >> 10;
+ else xe = (((abs_y + 1) << 8) * p->xy_steep) >> 10;
+
+ int32_t xei = xe >> 8;
+ int32_t xef = xe & 0xFF;
+
+ int32_t px_h;
+ if(xef == 0) px_h = 255;
+ else px_h = 255 - (((255 - xef) * p->spx) >> 8);
+ int32_t k = xei - abs_x;
+ lv_opa_t m;
+
+ if(xef) {
+ if(k >= 0 && k < len) {
+ m = 255 - (((255-xef) * (255 - px_h)) >> 9);
+ if(p->inv) m = 255 - m;
+ mask_buf[k] = mask_mix(mask_buf[k], m);
+ }
+ k++;
+ }
+
+ while(px_h > p->spx) {
+ if(k >= 0 && k < len) {
+ m = px_h - (p->spx >> 1);
+ if(p->inv) m = 255 - m;
+ mask_buf[k] = mask_mix(mask_buf[k], m);
+ }
+ px_h -= p->spx;
+ k++;
+ if(k >= len) break;
+ }
+
+
+ if(k < len && k >= 0) {
+ int32_t x_inters = (px_h * p->xy_steep) >> 10;
+ m = (x_inters * px_h) >> 9;
+ if(p->yx_steep < 0) m = 255 - m;
+ if(p->inv) m = 255 - m;
+ mask_buf[k] = mask_mix(mask_buf[k], m);
+ }
+
+
+ if(p->inv) {
+ k = xei - abs_x;
+ if(k > len) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ if(k >= 0)
+ {
+ memset(&mask_buf[0], 0x00, k);
+ }
+ } else {
+ k++;
+ if(k < 0) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ if(k <= len) {
+ memset(&mask_buf[k], 0x00, len - k);
+ }
+ }
+
+ return LV_DRAW_MASK_RES_CHANGED;
+}
+
+static lv_draw_mask_res_t line_mask_steep(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_line_param_t * p)
+{
+ int32_t k;
+ lv_coord_t x_at_y;
+ /* At the beginning of the mask if the limit line is greater then the mask's y.
+ * Then the mask is in the "wrong" area*/
+ x_at_y = (int32_t)((int32_t)p->xy_steep * abs_y) >> 10;
+ if(p->xy_steep > 0) x_at_y++;
+ if(x_at_y < abs_x) {
+ if(p->inv) {
+ return LV_DRAW_MASK_RES_FULL_COVER;
+ } else {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ }
+
+ /* At the end of the mask if the limit line is smaller then the mask's y.
+ * Then the mask is in the "good" area*/
+ x_at_y = (int32_t)((int32_t)p->xy_steep * (abs_y)) >> 10;
+ if(x_at_y > abs_x + len) {
+ if(p->inv) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ } else {
+ return LV_DRAW_MASK_RES_FULL_COVER;
+ }
+ }
+
+ int32_t xe = ((abs_y << 8) * p->xy_steep) >> 10;
+ int32_t xei = xe >> 8;
+ int32_t xef = xe & 0xFF;
+
+ int32_t xq = (((abs_y + 1) << 8) * p->xy_steep) >> 10;
+ int32_t xqi = xq >> 8;
+ int32_t xqf = xq & 0xFF;
+
+ lv_opa_t m;
+
+ k = xei - abs_x;
+ if(xei != xqi && (p->xy_steep < 0 && xef == 0)) {
+ xef = 0xFF;
+ xei = xqi;
+ k--;
+ }
+
+ if(xei == xqi) {
+ if(k >= 0 && k < len) {
+ m = (xef + xqf) >> 1;
+ if(p->inv) m = 255 - m;
+ mask_buf[k] = mask_mix(mask_buf[k], m);
+ }
+ k++;
+
+ if(p->inv) {
+ k = xei - abs_x;
+ if(k >= len) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ if(k >= 0) memset(&mask_buf[0], 0x00, k);
+
+ } else {
+ if(k > len) k = len;
+ if(k == 0) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ else if(k > 0) memset(&mask_buf[k] ,0x00, len - k);
+ }
+
+ } else {
+ int32_t y_inters;
+ if(p->xy_steep < 0) {
+ y_inters = (xef * (-p->yx_steep)) >> 10;
+ if(k >= 0 && k < len ) {
+ m = (y_inters * xef) >> 9;
+ if(p->inv) m = 255 - m;
+ mask_buf[k] = mask_mix(mask_buf[k], m);
+ }
+ k--;
+
+ int32_t x_inters = ((255-y_inters) * (-p->xy_steep)) >> 10;
+
+ if(k >= 0 && k < len ) {
+ m = 255-(((255-y_inters) * x_inters) >> 9);
+ if(p->inv) m = 255 - m;
+ mask_buf[k] = mask_mix(mask_buf[k], m);
+ }
+
+ k+=2;
+
+ if(p->inv) {
+ k = xei - abs_x - 1;
+
+ if(k > len) k = len;
+ else if(k > 0) memset(&mask_buf[0], 0x00, k);
+
+ } else {
+ if(k > len) return LV_DRAW_MASK_RES_FULL_COVER;
+ if(k >= 0) memset(&mask_buf[k] ,0x00, len - k);
+ }
+
+ } else {
+ y_inters = ((255-xef) * p->yx_steep) >> 10;
+ if(k >= 0 && k < len ) {
+ m = 255 - ((y_inters * (255-xef)) >> 9);
+ if(p->inv) m = 255 - m;
+ mask_buf[k] = mask_mix(mask_buf[k], m);
+ }
+
+ k++;
+
+ int32_t x_inters = ((255-y_inters) * p->xy_steep) >> 10;
+ if(k >= 0 && k < len ) {
+ m = ((255-y_inters) * x_inters) >> 9;
+ if(p->inv) m = 255 - m;
+ mask_buf[k] = mask_mix(mask_buf[k], m);
+ }
+ k++;
+
+ if(p->inv) {
+ k = xei - abs_x;
+ if(k > len) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ if(k >= 0) memset(&mask_buf[0], 0x00, k);
+
+ } else {
+ if(k > len) k = len;
+ if(k == 0) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ else if(k > 0) memset(&mask_buf[k] ,0x00, len - k);
+ }
+
+ }
+ }
+
+ return LV_DRAW_MASK_RES_CHANGED;
+}
+
+
+static lv_draw_mask_res_t lv_draw_mask_angle(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_angle_param_t * p)
+{
+ lv_coord_t rel_y = abs_y - p->cfg.vertex_p.y;
+ lv_coord_t rel_x = abs_x - p->cfg.vertex_p.x;
+
+
+ if(p->cfg.start_angle < 180 && p->cfg.end_angle < 180 &&
+ p->cfg.start_angle != 0 && p->cfg.end_angle != 0 &&
+ p->cfg.start_angle > p->cfg.end_angle) {
+
+ if(abs_y < p->cfg.vertex_p.y) {
+ return LV_DRAW_MASK_RES_FULL_COVER;
+ }
+
+ /*Start angle mask can work only from the end of end angle mask */
+ lv_coord_t end_angle_first = (rel_y * p->end_line.xy_steep) >> 10;
+ lv_coord_t start_angle_last= ((rel_y+1) * p->start_line.xy_steep) >> 10;
+
+
+ /*Do not let the line end cross the vertex else it will affect the opposite part*/
+ if(p->cfg.start_angle > 270 && p->cfg.start_angle <= 359 && start_angle_last < 0) start_angle_last = 0;
+ else if(p->cfg.start_angle > 0 && p->cfg.start_angle <= 90 && start_angle_last < 0) start_angle_last = 0;
+ else if(p->cfg.start_angle > 90 && p->cfg.start_angle < 270 && start_angle_last > 0) start_angle_last = 0;
+
+ if(p->cfg.end_angle > 270 && p->cfg.end_angle <= 359 && start_angle_last < 0) start_angle_last = 0;
+ else if(p->cfg.end_angle > 0 && p->cfg.end_angle <= 90 && start_angle_last < 0) start_angle_last = 0;
+ else if(p->cfg.end_angle > 90 && p->cfg.end_angle < 270 && start_angle_last > 0) start_angle_last = 0;
+
+
+ int32_t dist = (end_angle_first - start_angle_last) >> 1;
+
+ lv_draw_mask_res_t res1 = LV_DRAW_MASK_RES_FULL_COVER;
+ lv_draw_mask_res_t res2 = LV_DRAW_MASK_RES_FULL_COVER;
+
+ int32_t tmp = start_angle_last + dist - rel_x;
+ if(tmp > len) tmp = len;
+ if(tmp > 0) {
+ res1 = lv_draw_mask_line(&mask_buf[0], abs_x, abs_y, tmp, &p->start_line);
+ if(res1 == LV_DRAW_MASK_RES_FULL_TRANSP) {
+ memset(&mask_buf[0], 0x00, tmp);
+ }
+ }
+
+ if(tmp > len) tmp = len;
+ if(tmp < 0) tmp = 0;
+ res2 = lv_draw_mask_line(&mask_buf[tmp], abs_x+tmp, abs_y, len-tmp, &p->end_line);
+ if(res2 == LV_DRAW_MASK_RES_FULL_TRANSP) {
+ memset(&mask_buf[tmp], 0x00, len-tmp);
+ }
+ if(res1 == res2) return res1;
+ else return LV_DRAW_MASK_RES_CHANGED;
+ }
+ else if(p->cfg.start_angle > 180 && p->cfg.end_angle > 180 && p->cfg.start_angle > p->cfg.end_angle) {
+
+ if(abs_y > p->cfg.vertex_p.y) {
+ return LV_DRAW_MASK_RES_FULL_COVER;
+ }
+
+ /*Start angle mask can work only from the end of end angle mask */
+ lv_coord_t end_angle_first = (rel_y * p->end_line.xy_steep) >> 10;
+ lv_coord_t start_angle_last= ((rel_y+1) * p->start_line.xy_steep) >> 10;
+
+ /*Do not let the line end cross the vertex else it will affect the opposite part*/
+ if(p->cfg.start_angle > 270 && p->cfg.start_angle <= 359 && start_angle_last < 0) start_angle_last = 0;
+ else if(p->cfg.start_angle > 0 && p->cfg.start_angle <= 90 && start_angle_last < 0) start_angle_last = 0;
+ else if(p->cfg.start_angle > 90 && p->cfg.start_angle < 270 && start_angle_last > 0) start_angle_last = 0;
+
+ if(p->cfg.end_angle > 270 && p->cfg.end_angle <= 359 && start_angle_last < 0) start_angle_last = 0;
+ else if(p->cfg.end_angle > 0 && p->cfg.end_angle <= 90 && start_angle_last < 0) start_angle_last = 0;
+ else if(p->cfg.end_angle > 90 && p->cfg.end_angle < 270 && start_angle_last > 0) start_angle_last = 0;
+
+ int32_t dist = (end_angle_first - start_angle_last) >> 1;
+
+ lv_draw_mask_res_t res1 = LV_DRAW_MASK_RES_FULL_COVER;
+ lv_draw_mask_res_t res2 = LV_DRAW_MASK_RES_FULL_COVER;
+
+ int32_t tmp = start_angle_last + dist - rel_x;
+ if(tmp > len) tmp = len;
+ if(tmp > 0) {
+ res1 = lv_draw_mask_line(&mask_buf[0], abs_x, abs_y, tmp, (lv_draw_mask_line_param_t*)&p->end_line);
+ if(res1 == LV_DRAW_MASK_RES_FULL_TRANSP) {
+ memset(&mask_buf[0], 0x00, tmp);
+ }
+ }
+
+ if(tmp > len) tmp = len;
+ if(tmp < 0) tmp = 0;
+ res2 = lv_draw_mask_line(&mask_buf[tmp], abs_x+tmp, abs_y, len-tmp, (lv_draw_mask_line_param_t*)&p->start_line);
+ if(res2 == LV_DRAW_MASK_RES_FULL_TRANSP) {
+ memset(&mask_buf[tmp], 0x00, len-tmp);
+ }
+ if(res1 == res2) return res1;
+ else return LV_DRAW_MASK_RES_CHANGED;
+ }
+ else {
+
+ lv_draw_mask_res_t res1 = LV_DRAW_MASK_RES_FULL_COVER;
+ lv_draw_mask_res_t res2 = LV_DRAW_MASK_RES_FULL_COVER;
+
+ if(p->cfg.start_angle == 180) {
+ if(abs_y < p->cfg.vertex_p.y) res1 = LV_DRAW_MASK_RES_FULL_COVER;
+ else res1 = LV_DRAW_MASK_RES_UNKNOWN;
+ }
+ else if(p->cfg.start_angle == 0) {
+ if(abs_y < p->cfg.vertex_p.y) res1 = LV_DRAW_MASK_RES_UNKNOWN;
+ else res1 = LV_DRAW_MASK_RES_FULL_COVER;
+ }
+ else if((p->cfg.start_angle < 180 && abs_y < p->cfg.vertex_p.y) ||
+ (p->cfg.start_angle > 180 && abs_y >= p->cfg.vertex_p.y)) {
+ res1 = LV_DRAW_MASK_RES_UNKNOWN;
+ }
+ else {
+ res1 = lv_draw_mask_line(mask_buf, abs_x, abs_y, len, &p->start_line);
+ }
+
+ if(p->cfg.end_angle == 180) {
+ if(abs_y < p->cfg.vertex_p.y) res2 = LV_DRAW_MASK_RES_UNKNOWN;
+ else res2 = LV_DRAW_MASK_RES_FULL_COVER;
+ }
+ else if(p->cfg.end_angle == 0) {
+ if(abs_y < p->cfg.vertex_p.y) res2 = LV_DRAW_MASK_RES_FULL_COVER;
+ else res2 = LV_DRAW_MASK_RES_UNKNOWN;
+ }
+ else if((p->cfg.end_angle < 180 && abs_y < p->cfg.vertex_p.y) ||
+ (p->cfg.end_angle > 180 && abs_y >= p->cfg.vertex_p.y)) {
+ res2 = LV_DRAW_MASK_RES_UNKNOWN;
+ }
+ else {
+ res2 = lv_draw_mask_line(mask_buf, abs_x, abs_y, len, &p->end_line);
+ }
+
+ if(res1 == LV_DRAW_MASK_RES_FULL_TRANSP || res2 == LV_DRAW_MASK_RES_FULL_TRANSP) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ else if(res1 == LV_DRAW_MASK_RES_UNKNOWN && res2 == LV_DRAW_MASK_RES_UNKNOWN) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ else if(res1 == LV_DRAW_MASK_RES_FULL_COVER && res2 == LV_DRAW_MASK_RES_FULL_COVER) return LV_DRAW_MASK_RES_FULL_COVER;
+ else return LV_DRAW_MASK_RES_CHANGED;
+ }
+}
+
+static lv_draw_mask_res_t lv_draw_mask_radius(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_radius_param_t * p)
+{
+ if(p->cfg.outer == 0) {
+ if(abs_y < p->cfg.rect.y1 || abs_y > p->cfg.rect.y2) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ } else {
+ if(abs_y < p->cfg.rect.y1 || abs_y > p->cfg.rect.y2) {
+ return LV_DRAW_MASK_RES_FULL_COVER;
+ }
+ }
+
+ if((abs_x >= p->cfg.rect.x1 + p->cfg.radius && abs_x + len <= p->cfg.rect.x2 - p->cfg.radius) ||
+ (abs_y >= p->cfg.rect.y1 + p->cfg.radius && abs_y <= p->cfg.rect.y2 - p->cfg.radius)) {
+ if(p->cfg.outer == 0) {
+ /*Remove the edges*/
+ int32_t last = p->cfg.rect.x1 - abs_x;
+ if(last > len) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ if(last >= 0) {
+ memset(&mask_buf[0], 0x00, last);
+ }
+
+ int32_t first = p->cfg.rect.x2 - abs_x + 1;
+ if(first <= 0) return LV_DRAW_MASK_RES_FULL_TRANSP;
+ else if(first < len) {
+ memset(&mask_buf[first], 0x00, len-first);
+ }
+ if(last == 0 && first == len) return LV_DRAW_MASK_RES_FULL_COVER;
+ else return LV_DRAW_MASK_RES_CHANGED;
+ }
+ else {
+ int32_t first = p->cfg.rect.x1 - abs_x;
+ if(first < 0) first = 0;
+ if(first <= len) {
+ int32_t last = p->cfg.rect.x2 - abs_x - first + 1;
+ if(first + last > len) last = len - first;
+ if(last >= 0) {
+ memset(&mask_buf[first], 0x00, last);
+ }
+ }
+ }
+ return LV_DRAW_MASK_RES_CHANGED;
+ }
+
+ int32_t k = p->cfg.rect.x1 -abs_x; /*First relevant coordinate on the of the mask*/
+ lv_coord_t w = lv_area_get_width(&p->cfg.rect);
+ lv_coord_t h = lv_area_get_height(&p->cfg.rect);
+ abs_x -= p->cfg.rect.x1;
+ abs_y -= p->cfg.rect.y1;
+
+ uint32_t r2 = p->cfg.radius * p->cfg.radius;
+
+ /*Handle corner areas*/
+ if(abs_y < p->cfg.radius || abs_y > h - p->cfg.radius - 1) {
+ /* y = 0 should mean the top of the circle */
+ lv_coord_t y;
+ if(abs_y < p->cfg.radius) y = p->cfg.radius - abs_y;
+ else y = p->cfg.radius - (h - abs_y) + 1;
+
+ /* Get the x intersection points for `abs_y` and `abs_y+1`
+ * Use the circle's equation x = sqrt(r^2 - y^2) */
+ lv_sqrt_res_t x0;
+ lv_sqrt(r2 - (y * y), &x0);
+
+ lv_sqrt_res_t x1;
+ lv_sqrt(r2 - ((y-1) * (y-1)), &x1);
+
+ /* If x1 is on the next round coordinate (e.g. x0: 3.5, x1:4.0)
+ * then treat x1 as x1: 3.99 to handle them as they were on the same pixel*/
+ if(x0.i == x1.i - 1 && x1.f == 0) {
+ x1.i--;
+ x1.f = 0xFF;
+ }
+
+ /*If the two x intersections are on the same x then just get average of the fractionals*/
+ if(x0.i == x1.i) {
+ lv_opa_t m = (x0.f + x1.f) >> 1;
+ if(p->cfg.outer) m = 255 - m;
+ int32_t ofs = p->cfg.radius - x0.i - 1;
+
+ /*Left corner*/
+ int32_t kl = k + ofs;
+
+ if(kl >= 0 && kl < len) {
+ mask_buf[kl] = mask_mix(mask_buf[kl], m);
+ }
+
+ /*Right corner*/
+ int32_t kr = k+(w-ofs-1);
+ if(kr >= 0 && kr < len) {
+ mask_buf[kr] = mask_mix(mask_buf[kr], m);
+ }
+
+ /*Clear the unused parts*/
+ if(p->cfg.outer == 0) {
+ kr++;
+ if(kl > len) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ if(kl >= 0) {
+ memset(&mask_buf[0], 0x00, kl);
+ }
+ if(kr < 0) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ if(kr <= len) {
+ memset(&mask_buf[kr], 0x00, len-kr);
+ }
+ } else {
+ kl++;
+ int32_t first = kl;
+ if(first < 0) first = 0;
+
+ int32_t len_tmp = kr-first;
+ if(len_tmp + first > len) len_tmp = len - first;
+ if(first < len && len_tmp >= 0) {
+ memset(&mask_buf[first], 0x00, len_tmp);
+ }
+ }
+ }
+ /*Multiple pixels are affected. Get y intersection of the pixels*/
+ else {
+ int32_t ofs = p->cfg.radius - (x0.i + 1);
+ int32_t kl = k + ofs;
+ int32_t kr = k + (w - ofs -1);
+
+ if(p->cfg.outer) {
+ int32_t first = kl + 1;
+ if(first < 0) first = 0;
+
+ int32_t len_tmp = kr-first;
+ if(len_tmp + first > len) len_tmp = len - first;
+ if(first < len && len_tmp >= 0) {
+ memset(&mask_buf[first], 0x00, len_tmp);
+ }
+ }
+
+ uint32_t i = x0.i + 1;
+ lv_opa_t m;
+ lv_sqrt_res_t y_prev;
+ lv_sqrt_res_t y_next;
+
+ lv_sqrt(r2 - (x0.i * x0.i), &y_prev);
+
+ if(y_prev.f == 0) {
+ y_prev.i--;
+ y_prev.f = 0xFF;
+ }
+
+ /*The first y intersection is special as it might be in the previous line*/
+ if(y_prev.i >= y) {
+ lv_sqrt(r2 - (i * i), &y_next);
+ m = 255 - (((255-x0.f) * (255 - y_next.f)) >> 9);
+
+ if(p->cfg.outer) m = 255 - m;
+ if(kl >= 0 && kl < len) mask_buf[kl] = mask_mix(mask_buf[kl], m);
+ if(kr >= 0 && kr < len) mask_buf[kr] = mask_mix(mask_buf[kr], m);
+ kl--;
+ kr++;
+ y_prev.f = y_next.f;
+ i++;
+ }
+
+ /*Set all points which are crossed by the circle*/
+ for(; i <= x1.i; i++) {
+ lv_sqrt(r2 - (i * i), &y_next);
+
+ m = (y_prev.f + y_next.f) >> 1;
+ if(p->cfg.outer) m = 255 - m;
+ if(kl >= 0 && kl < len) mask_buf[kl] = mask_mix(mask_buf[kl], m);
+ if(kr >= 0 && kr < len) mask_buf[kr] = mask_mix(mask_buf[kr], m);
+ kl--;
+ kr++;
+ y_prev.f = y_next.f;
+ }
+
+ /*If the last pixel was left in its middle therefore
+ * the circle still has parts on the next one*/
+ if(y_prev.f) {
+ m = (y_prev.f * x1.f) >> 9;
+ if(p->cfg.outer) m = 255 - m;
+ if(kl >= 0 && kl < len) mask_buf[kl] = mask_mix(mask_buf[kl], m);
+ if(kr >= 0 && kr < len) mask_buf[kr] = mask_mix(mask_buf[kr], m);
+ kl--;
+ kr++;
+ }
+
+ if(p->cfg.outer == 0) {
+ kl++;
+ if(kl > len) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ if(kl >= 0) memset(&mask_buf[0], 0x00, kl);
+
+ if(kr < 0) {
+ return LV_DRAW_MASK_RES_FULL_TRANSP;
+ }
+ if(kr < len) memset(&mask_buf[kr], 0x00, len - kr);
+ }
+ }
+ }
+
+ return LV_DRAW_MASK_RES_CHANGED;
+}
+
+
+static lv_draw_mask_res_t lv_draw_mask_fade(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_fade_param_t * p)
+{
+ if(abs_y < p->cfg.coords.y1) return LV_DRAW_MASK_RES_FULL_COVER;
+ if(abs_y > p->cfg.coords.y2) return LV_DRAW_MASK_RES_FULL_COVER;
+ if(abs_x + len < p->cfg.coords.x1) return LV_DRAW_MASK_RES_FULL_COVER;
+ if(abs_x > p->cfg.coords.x2) return LV_DRAW_MASK_RES_FULL_COVER;
+
+ if(abs_x + len > p->cfg.coords.x2) len -= abs_x + len - p->cfg.coords.x2 - 1;
+
+ if(abs_x < p->cfg.coords.x1) {
+ lv_coord_t x_ofs = 0;
+ x_ofs = p->cfg.coords.x1 - abs_x;
+ len -= x_ofs;
+ mask_buf += x_ofs;
+ }
+
+ lv_coord_t i;
+
+ if(abs_y <= p->cfg.y_top) {
+ for(i = 0; i < len; i++) {
+ mask_buf[i] = mask_mix(mask_buf[i], p->cfg.opa_top);
+ }
+ return LV_DRAW_MASK_RES_CHANGED;
+ } else if(abs_y >= p->cfg.y_bottom) {
+ for(i = 0; i < len; i++) {
+ mask_buf[i] = mask_mix(mask_buf[i], p->cfg.opa_bottom);
+ }
+ return LV_DRAW_MASK_RES_CHANGED;
+ } else {
+ /*Calculate the opa proportionally*/
+ int16_t opa_diff = p->cfg.opa_bottom - p->cfg.opa_top;
+ lv_coord_t y_diff = p->cfg.y_bottom - p->cfg.y_top + 1;
+ lv_opa_t opa_act = (int32_t)((int32_t)(abs_y - p->cfg.y_top) * opa_diff) / y_diff;
+ opa_act += p->cfg.opa_top;
+
+ for(i = 0; i < len; i++) {
+ mask_buf[i] = mask_mix(mask_buf[i], opa_act);
+ }
+ return LV_DRAW_MASK_RES_CHANGED;
+
+
+ }
+ return LV_DRAW_MASK_RES_FULL_COVER;
+}
+
+static lv_draw_mask_res_t lv_draw_mask_map(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_map_param_t * p)
+{
+ /*Handle out of the mask cases*/
+ if(abs_y < p->cfg.coords.y1) return LV_DRAW_MASK_RES_FULL_COVER;
+ if(abs_y > p->cfg.coords.y2) return LV_DRAW_MASK_RES_FULL_COVER;
+ if(abs_x + len < p->cfg.coords.x1) return LV_DRAW_MASK_RES_FULL_COVER;
+ if(abs_x > p->cfg.coords.x2) return LV_DRAW_MASK_RES_FULL_COVER;
+
+ /*Got to the current row in the map*/
+ const lv_opa_t * map_tmp = p->cfg.map;
+ map_tmp += (abs_y - p->cfg.coords.y1) * lv_area_get_width(&p->cfg.coords);
+
+
+ if(abs_x + len > p->cfg.coords.x2) len -= abs_x + len - p->cfg.coords.x2 - 1;
+
+ if(abs_x < p->cfg.coords.x1) {
+ lv_coord_t x_ofs = 0;
+ x_ofs = p->cfg.coords.x1 - abs_x;
+ len -= x_ofs;
+ mask_buf += x_ofs;
+ } else {
+ map_tmp += (abs_x - p->cfg.coords.x1);
+ }
+
+ lv_coord_t i;
+ for(i = 0; i < len; i++) {
+ mask_buf[i] = mask_mix(mask_buf[i], map_tmp[i]);
+ }
+
+ return LV_DRAW_MASK_RES_CHANGED;
+}
+
+
+static inline lv_opa_t mask_mix(lv_opa_t mask_act, lv_opa_t mask_new)
+{
+ if(mask_new > LV_OPA_MAX) return mask_act;
+ if(mask_new < LV_OPA_MIN) return 0;
+
+ return (uint16_t)((uint16_t) (mask_act * mask_new) >> 8);
+
+}
diff --git a/src/lv_draw/lv_draw_mask.h b/src/lv_draw/lv_draw_mask.h
new file mode 100644
index 000000000..a0c48b900
--- /dev/null
+++ b/src/lv_draw/lv_draw_mask.h
@@ -0,0 +1,274 @@
+/**
+ * @file lv_mask.h
+ *
+ */
+
+#ifndef LV_MASK_H
+#define LV_MASK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#include
+#include "../lv_misc/lv_area.h"
+#include "../lv_misc/lv_color.h"
+
+/*********************
+ * DEFINES
+ *********************/
+#define LV_MASK_ID_INV (-1)
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+enum {
+ LV_DRAW_MASK_RES_FULL_TRANSP,
+ LV_DRAW_MASK_RES_FULL_COVER,
+ LV_DRAW_MASK_RES_CHANGED,
+ LV_DRAW_MASK_RES_UNKNOWN
+};
+
+typedef uint8_t lv_draw_mask_res_t;
+
+
+enum {
+ LV_DRAW_MASK_TYPE_LINE,
+ LV_DRAW_MASK_TYPE_ANGLE,
+ LV_DRAW_MASK_TYPE_RADIUS,
+ LV_DRAW_MASK_TYPE_FADE,
+ LV_DRAW_MASK_TYPE_MAP,
+};
+
+typedef uint8_t lv_draw_mask_type_t;
+
+enum {
+ LV_DRAW_MASK_LINE_SIDE_LEFT = 0,
+ LV_DRAW_MASK_LINE_SIDE_RIGHT,
+ LV_DRAW_MASK_LINE_SIDE_TOP,
+ LV_DRAW_MASK_LINE_SIDE_BOTTOM,
+};
+
+typedef lv_draw_mask_res_t (*lv_draw_mask_cb_t)(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, void * p);
+
+typedef uint8_t lv_draw_mask_line_side_t;
+
+typedef struct {
+ lv_draw_mask_cb_t cb;
+ lv_draw_mask_type_t type;
+}lv_draw_mask_common_dsc_t;
+
+typedef struct {
+ /*The first element must be the common descriptor*/
+ lv_draw_mask_common_dsc_t dsc;
+
+ struct {
+ /*First point */
+ lv_point_t p1;
+
+ /*Second point*/
+ lv_point_t p2;
+
+ /*Which side to keep?*/
+ lv_draw_mask_line_side_t side :2;
+ }cfg;
+
+ /*A point of the line*/
+ lv_point_t origo;
+
+ /* X / (1024*Y) steepness (X is 0..1023 range). What is the change of X in 1024 Y?*/
+ int32_t xy_steep;
+
+ /* Y / (1024*X) steepness (Y is 0..1023 range). What is the change of Y in 1024 X?*/
+ int32_t yx_steep;
+
+ /*Helper which stores yx_steep for flat lines and xy_steep for steep (non flat) lines */
+ int32_t steep;
+
+ /*Steepness in 1 px in 0..255 range. Used only by flat lines. */
+ int32_t spx;
+
+ /*1: It's a flat line? (Near to horizontal)*/
+ uint8_t flat :1;
+
+
+ /* Invert the mask. The default is: Keep the left part.
+ * It is used to select left/right/top/bottom*/
+ uint8_t inv:1;
+}lv_draw_mask_line_param_t;
+
+typedef struct {
+ /*The first element must be the common descriptor*/
+ lv_draw_mask_common_dsc_t dsc;
+
+ struct {
+ lv_point_t vertex_p;
+ lv_coord_t start_angle;
+ lv_coord_t end_angle;
+ }cfg;
+
+ lv_draw_mask_line_param_t start_line;
+ lv_draw_mask_line_param_t end_line;
+ uint16_t delta_deg;
+}lv_draw_mask_angle_param_t;
+
+typedef struct {
+ /*The first element must be the common descriptor*/
+ lv_draw_mask_common_dsc_t dsc;
+
+ struct {
+ lv_area_t rect;
+ lv_coord_t radius;
+ /* Invert the mask. 0: Keep the pixels inside.*/
+ uint8_t outer:1;
+ }cfg;
+
+}lv_draw_mask_radius_param_t;
+
+typedef struct {
+ /*The first element must be the common descriptor*/
+ lv_draw_mask_common_dsc_t dsc;
+
+ struct {
+ lv_area_t coords;
+ lv_coord_t y_top;
+ lv_coord_t y_bottom;
+ lv_opa_t opa_top;
+ lv_opa_t opa_bottom;
+ }cfg;
+
+}lv_draw_mask_fade_param_t;
+
+typedef struct _lv_draw_mask_map_param_t {
+ /*The first element must be the common descriptor*/
+ lv_draw_mask_common_dsc_t dsc;
+
+ struct {
+ lv_area_t coords;
+ const lv_opa_t * map;
+ }cfg;
+}lv_draw_mask_map_param_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Add a draw mask. Everything drawn after it (until removing the mask) will be affected by the mask.
+ * @param param an initialized mask parameter. Only the pointer is saved.
+ * @param custom_id a custom pointer to identify the mask. Used in `lv_draw_mask_remove_custom`.
+ * @return the an integer, the ID of the mask. Can be used in `lv_draw_mask_remove_id`.
+ */
+int16_t lv_draw_mask_add(void * param, void * custom_id);
+
+/**
+ * Apply the added buffers on a line. Used internally by the library's drawing routines.
+ * @param mask_buf store the result mask here. Has to be `len` byte long. Should be initialized with `0xFF`.
+ * @param abs_x absolute X coordinate where the line to calculate start
+ * @param abs_y absolute Y coordinate where the line to calculate start
+ * @param len length of the line to calculate (in pixel count)
+ * @return Oneof these values:
+ * - `LV_DRAW_MASK_RES_FULL_TRANSP`: the whole line is transparent. `mask_buf` is not set to zero
+ * - `LV_DRAW_MASK_RES_FULL_COVER`: the whole line is fully visible. `mask_buf` is unchanged
+ * - `LV_DRAW_MASK_RES_CHANGED`: `mask_buf` has changed, it shows the desired opacity of each pixel in the given line
+ */
+lv_draw_mask_res_t lv_draw_mask_apply(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len);
+
+/**
+ * Remove a mask with a given ID
+ * @param id the ID of the mask. Returned by `lv_draw_mask_add`
+ * @return the parameter of the removed mask.
+ * If more masks have `custom_id` ID then the last mask's parameter will be returned
+ */
+void * lv_draw_mask_remove_id(int16_t id);
+
+/**
+ * Remove all mask with a given custom ID
+ * @param custom_id a pointer used in `lv_draw_mask_add`
+ * @return return the parameter of the removed mask.
+ * If more masks have `custom_id` ID then the last mask's parameter will be returned
+ */
+void * lv_draw_mask_remove_custom(void * custom_id);
+
+/**
+ * Count the currently added masks
+ * @return number of active masks
+ */
+uint8_t lv_draw_mask_get_cnt(void);
+
+/**
+ *Initialize a line mask from two points.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param p1x X coordinate of the first point of the line
+ * @param p1y Y coordinate of the first point of the line
+ * @param p2x X coordinate of the second point of the line
+ * @param p2y y coordinate of the second point of the line
+ * @param side and element of `lv_draw_mask_line_side_t` to describe which side to keep.
+ * With `LV_DRAW_MASK_LINE_SIDE_LEFT/RIGHT` and horizontal line all pixels are kept
+ * With `LV_DRAW_MASK_LINE_SIDE_TOP/BOTTOM` and vertical line all pixels are kept
+ */
+void lv_draw_mask_line_points_init(lv_draw_mask_line_param_t * param, lv_coord_t p1x, lv_coord_t p1y, lv_coord_t p2x, lv_coord_t p2y, lv_draw_mask_line_side_t side);
+
+/**
+ *Initialize a line mask from a point and an angle.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param px X coordiante of a point of the line
+ * @param py X coordiante of a point of the line
+ * @param angle right 0 deg, bottom: 90
+ * @param side and element of `lv_draw_mask_line_side_t` to describe which side to keep.
+ * With `LV_DRAW_MASK_LINE_SIDE_LEFT/RIGHT` and horizontal line all pixels are kept
+ * With `LV_DRAW_MASK_LINE_SIDE_TOP/BOTTOM` and vertical line all pixels are kept
+ */
+void lv_draw_mask_line_angle_init(lv_draw_mask_line_param_t * param, lv_coord_t p1x, lv_coord_t py, int16_t angle, lv_draw_mask_line_side_t side);
+
+/**
+ * Initialize an angle mask.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param vertex_x X coordinate of the angle vertex (absolute coordinates)
+ * @param vertex_y Y coordinate of the angle vertex (absolute coordinates)
+ * @param start_angle start angle in degrees. 0 deg on the right, 90 deg, on the bottom
+ * @param end_angle end angle
+ */
+void lv_draw_mask_angle_init(lv_draw_mask_angle_param_t * param, lv_coord_t vertex_x, lv_coord_t vertex_y, lv_coord_t start_angle, lv_coord_t end_angle);
+
+/**
+ * Initialize a fade mask.
+ * @param param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param rect coordinates of the rectangle to affect (absolute coordinates)
+ * @param radius radius of the rectangle
+ * @param inv: true: keep the pixels inside teh rectangle; keep teh pixels outside of the rectangle
+ */
+void lv_draw_mask_radius_init(lv_draw_mask_radius_param_t * param, const lv_area_t * rect, lv_coord_t radius, bool inv);
+
+/**
+ * Initialize a fade mask.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param coords coordinates of the area to affect (absolute coordinates)
+ * @param opa_top opacity on the top
+ * @param y_top at which coordinate start to change to opacity to `opa_bottom`
+ * @param opa_bottom opacity at the bottom
+ * @param y_bottom at which coordinate reach `opa_bottom`.
+ */
+void lv_draw_mask_fade_init(lv_draw_mask_fade_param_t * param, lv_area_t * coords, lv_opa_t opa_top, lv_coord_t y_top, lv_opa_t opa_bottom, lv_coord_t y_bottom);
+
+/**
+ * Initialize a map mask.
+ * @param param pointer to a `lv_draw_mask_param_t` to initialize
+ * @param coords coordinates of the map (absolute coordinates)
+ * @param map array of bytes with the mask values
+ */
+void lv_draw_mask_map_init(lv_draw_mask_map_param_t * param, lv_area_t * coords, const lv_opa_t * map);
+
+/**********************
+ * MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_MASK_H*/
diff --git a/src/lv_draw/lv_draw_rect.c b/src/lv_draw/lv_draw_rect.c
index 0964a46aa..aa8f04cdf 100644
--- a/src/lv_draw/lv_draw_rect.c
+++ b/src/lv_draw/lv_draw_rect.c
@@ -7,6 +7,8 @@
* INCLUDES
*********************/
#include "lv_draw_rect.h"
+#include "lv_draw_blend.h"
+#include "lv_draw_mask.h"
#include "../lv_misc/lv_circ.h"
#include "../lv_misc/lv_math.h"
#include "../lv_core/lv_refr.h"
@@ -14,15 +16,8 @@
/*********************
* DEFINES
*********************/
-/*Circle segment greater then this value will be anti-aliased by a non-linear (cos) opacity
- * mapping*/
-#define CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD 1
-
-/*Calculate with 2^x bigger shadow opacity values to avoid rounding errors*/
-#define SHADOW_OPA_EXTRA_PRECISION 8
-
-/*Add extra radius with LV_SHADOW_BOTTOM to cover anti-aliased corners*/
-#define SHADOW_BOTTOM_AA_EXTRA_RADIUS 3
+#define SHADOW_UPSACALE_SHIFT 6
+#define SHADOW_ENHANCE 1
/**********************
* TYPEDEFS
@@ -31,31 +26,12 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static void lv_draw_rect_main_mid(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_rect_main_corner(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_rect_border_straight(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_rect_border_corner(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-
-#if LV_USE_SHADOW
-static void lv_draw_shadow(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_shadow_full(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_shadow_bottom(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale);
-static void lv_draw_shadow_full_straight(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- const lv_opa_t * map);
-#endif
-
-static uint16_t lv_draw_cont_radius_corr(uint16_t r, lv_coord_t w, lv_coord_t h);
-
-#if LV_ANTIALIAS
-static lv_opa_t antialias_get_opa_circ(lv_coord_t seg, lv_coord_t px_id, lv_opa_t opa);
-#endif
+static void draw_bg(const lv_area_t * coords, const lv_area_t * clip, const lv_style_t * style, lv_opa_t opa_scale);
+static void draw_border(const lv_area_t * coords, const lv_area_t * clip, const lv_style_t * style, lv_opa_t opa_scale);
+static void draw_shadow(const lv_area_t * coords, const lv_area_t * clip, const lv_style_t * style, lv_opa_t opa_scale);
+static lv_color_t grad_get(const lv_style_t * style, lv_coord_t s, lv_coord_t i);
+static void shadow_draw_corner_buf(const lv_area_t * coords, lv_opa_t * sh_buf, lv_coord_t s, lv_coord_t r);
+static void shadow_blur_corner(lv_coord_t size, lv_coord_t sw, lv_opa_t * res_buf, uint16_t * sh_ups_buf);
/**********************
* STATIC VARIABLES
@@ -76,35 +52,44 @@ static lv_opa_t antialias_get_opa_circ(lv_coord_t seg, lv_coord_t px_id, lv_opa_
* @param style pointer to a style
* @param opa_scale scale down all opacities by the factor
*/
-void lv_draw_rect(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale)
+void lv_draw_rect(const lv_area_t * coords, const lv_area_t * clip, const lv_style_t * style, lv_opa_t opa_scale)
{
if(lv_area_get_height(coords) < 1 || lv_area_get_width(coords) < 1) return;
-#if LV_USE_SHADOW
- if(style->body.shadow.width != 0) {
- lv_draw_shadow(coords, mask, style, opa_scale);
- }
-#endif
+ draw_shadow(coords, clip, style, opa_scale);
+ draw_bg(coords, clip, style, opa_scale);
+ draw_border(coords, clip, style, opa_scale);
+}
- /* If the object is out of the mask there is nothing to draw.
- * Draw shadow before it because the shadow is out of `coords`*/
- if(lv_area_is_on(coords, mask) == false) return;
+/**
+ * Draw a pixel
+ * @param point the coordinates of the point to draw
+ * @param mask the pixel will be drawn only in this mask
+ * @param style pointer to a style
+ * @param opa_scale scale down the opacity by the factor
+ */
+void lv_draw_px(const lv_point_t * point, const lv_area_t * clip_area, const lv_style_t * style, lv_opa_t opa_scale)
+{
+ lv_opa_t opa = style->body.opa;
+ if(opa_scale != LV_OPA_COVER) opa = (opa * opa_scale) >> 8;
- if(style->body.opa > LV_OPA_MIN) {
- lv_draw_rect_main_mid(coords, mask, style, opa_scale);
+ if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
- if(style->body.radius != 0) {
- lv_draw_rect_main_corner(coords, mask, style, opa_scale);
- }
- }
+ lv_area_t fill_area;
+ fill_area.x1 = point->x;
+ fill_area.y1 = point->y;
+ fill_area.x2 = point->x;
+ fill_area.y2 = point->y;
- if(style->body.border.width != 0 && style->body.border.part != LV_BORDER_NONE &&
- style->body.border.opa >= LV_OPA_MIN) {
- lv_draw_rect_border_straight(coords, mask, style, opa_scale);
+ uint8_t mask_cnt = lv_draw_mask_get_cnt();
- if(style->body.radius != 0) {
- lv_draw_rect_border_corner(coords, mask, style, opa_scale);
- }
+ if(mask_cnt == 0) {
+ lv_blend_fill(clip_area, &fill_area, style->body.main_color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa, style->body.blend_mode);
+ } else {
+ uint8_t mask_buf;
+ lv_draw_mask_res_t mask_res;
+ mask_res = lv_draw_mask_apply(&mask_buf, point->x, point->y, 1);
+ lv_blend_fill(clip_area, &fill_area, style->body.main_color, &mask_buf, mask_res, opa, style->body.blend_mode);
}
}
@@ -112,1410 +97,928 @@ void lv_draw_rect(const lv_area_t * coords, const lv_area_t * mask, const lv_sty
* STATIC FUNCTIONS
**********************/
-/**
- * Draw the middle part (rectangular) of a rectangle
- * @param coords the coordinates of the original rectangle
- * @param mask the rectangle will be drawn only on this area
- * @param rects_p pointer to a rectangle style
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_rect_main_mid(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
+static void draw_bg(const lv_area_t * coords, const lv_area_t * clip, const lv_style_t * style, lv_opa_t opa_scale)
{
- uint16_t radius = style->body.radius;
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
+ lv_area_t coords_bg;
+ lv_area_copy(&coords_bg, coords);
- lv_color_t mcolor = style->body.main_color;
- lv_color_t gcolor = style->body.grad_color;
- uint8_t mix;
- lv_coord_t height = lv_area_get_height(coords);
- lv_coord_t width = lv_area_get_width(coords);
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
-
- /*If the radius is too big then there is no body*/
- if(radius > height / 2) return;
-
- lv_area_t work_area;
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x2;
-
- if(mcolor.full == gcolor.full) {
- work_area.y1 = coords->y1 + radius;
- work_area.y2 = coords->y2 - radius;
-
- if(style->body.radius != 0) {
-
- if(aa) {
- work_area.y1 += 2;
- work_area.y2 -= 2;
- } else {
- work_area.y1 += 1;
- work_area.y2 -= 1;
- }
- }
-
- lv_draw_fill(&work_area, mask, mcolor, opa);
- } else {
- lv_coord_t row;
- lv_coord_t row_start = coords->y1 + radius;
- lv_coord_t row_end = coords->y2 - radius;
- lv_color_t act_color;
-
- if(style->body.radius != 0) {
- if(aa) {
- row_start += 2;
- row_end -= 2;
- } else {
- row_start += 1;
- row_end -= 1;
- }
- }
- if(row_start < 0) row_start = 0;
-
- for(row = row_start; row <= row_end; row++) {
- work_area.y1 = row;
- work_area.y2 = row;
- mix = (uint32_t)((uint32_t)(coords->y2 - work_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
-
- lv_draw_fill(&work_area, mask, act_color, opa);
- }
+ /*If the border fully covers make the bg area 1px smaller to avoid artifacts on the corners*/
+ if(style->body.border.width > 1 && style->body.border.opa >= LV_OPA_MAX && style->body.radius != 0) {
+ coords_bg.x1++;
+ coords_bg.y1++;
+ coords_bg.x2--;
+ coords_bg.y2--;
}
-}
-/**
- * Draw the top and bottom parts (corners) of a rectangle
- * @param coords the coordinates of the original rectangle
- * @param mask the rectangle will be drawn only on this area
- * @param rects_p pointer to a rectangle style
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_rect_main_corner(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- uint16_t radius = style->body.radius;
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
- lv_color_t mcolor = style->body.main_color;
- lv_color_t gcolor = style->body.grad_color;
- lv_color_t act_color;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
- uint8_t mix;
- lv_coord_t height = lv_area_get_height(coords);
- lv_coord_t width = lv_area_get_width(coords);
+ lv_opa_t opa = style->body.opa;
+ if(opa_scale != LV_OPA_COVER) opa = (opa * opa_scale) >> 8;
- radius = lv_draw_cont_radius_corr(radius, width, height);
+ if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
- lv_point_t lt_origo; /*Left Top origo*/
- lv_point_t lb_origo; /*Left Bottom origo*/
- lv_point_t rt_origo; /*Right Top origo*/
- lv_point_t rb_origo; /*Left Bottom origo*/
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
- lt_origo.x = coords->x1 + radius + aa;
- lt_origo.y = coords->y1 + radius + aa;
+ /* Get clipped fill area which is the real draw area.
+ * It is always the same or inside `fill_area` */
+ lv_area_t draw_area;
+ bool is_common;
+ is_common = lv_area_intersect(&draw_area, &coords_bg, clip);
+ if(is_common == false) return;
- lb_origo.x = coords->x1 + radius + aa;
- lb_origo.y = coords->y2 - radius - aa;
+ const lv_area_t * disp_area = &vdb->area;
- rt_origo.x = coords->x2 - radius - aa;
- rt_origo.y = coords->y1 + radius + aa;
+ /* Now `draw_area` has absolute coordinates.
+ * Make it relative to `disp_area` to simplify draw to `disp_buf`*/
+ draw_area.x1 -= disp_area->x1;
+ draw_area.y1 -= disp_area->y1;
+ draw_area.x2 -= disp_area->x1;
+ draw_area.y2 -= disp_area->y1;
- rb_origo.x = coords->x2 - radius - aa;
- rb_origo.y = coords->y2 - radius - aa;
+ lv_coord_t draw_area_w = lv_area_get_width(&draw_area);
- lv_area_t edge_top_area;
- lv_area_t mid_top_area;
- lv_area_t mid_bot_area;
- lv_area_t edge_bot_area;
+ /*Create a mask if there is a radius*/
+ lv_opa_t * mask_buf = lv_mem_buf_get(draw_area_w);
- lv_point_t cir;
- lv_coord_t cir_tmp;
- lv_circ_init(&cir, &cir_tmp, radius);
+ bool simple_mode = true;
+ if(lv_draw_mask_get_cnt()!= 0) simple_mode = false;
+ else if(style->body.border.part != LV_BORDER_PART_FULL) simple_mode = false;
+ else if(style->body.grad_dir == LV_GRAD_DIR_HOR) simple_mode = false;
- /*Init the areas*/
- lv_area_set(&mid_bot_area, lb_origo.x + LV_CIRC_OCT4_X(cir), lb_origo.y + LV_CIRC_OCT4_Y(cir),
- rb_origo.x + LV_CIRC_OCT1_X(cir), rb_origo.y + LV_CIRC_OCT1_Y(cir));
+ int16_t mask_rout_id = LV_MASK_ID_INV;
- lv_area_set(&edge_bot_area, lb_origo.x + LV_CIRC_OCT3_X(cir), lb_origo.y + LV_CIRC_OCT3_Y(cir),
- rb_origo.x + LV_CIRC_OCT2_X(cir), rb_origo.y + LV_CIRC_OCT2_Y(cir));
+ lv_coord_t coords_w = lv_area_get_width(&coords_bg);
+ lv_coord_t coords_h = lv_area_get_height(&coords_bg);
- lv_area_set(&mid_top_area, lt_origo.x + LV_CIRC_OCT5_X(cir), lt_origo.y + LV_CIRC_OCT5_Y(cir),
- rt_origo.x + LV_CIRC_OCT8_X(cir), rt_origo.y + LV_CIRC_OCT8_Y(cir));
+ /*Get the real radius*/
+ lv_coord_t rout = style->body.radius;
+ lv_coord_t short_side = LV_MATH_MIN(coords_w, coords_h);
+ if(rout > short_side >> 1) rout = short_side >> 1;
- lv_area_set(&edge_top_area, lt_origo.x + LV_CIRC_OCT6_X(cir), lt_origo.y + LV_CIRC_OCT6_Y(cir),
- rt_origo.x + LV_CIRC_OCT7_X(cir), rt_origo.y + LV_CIRC_OCT7_Y(cir));
-#if LV_ANTIALIAS
- /*Store some internal states for anti-aliasing*/
- lv_coord_t out_y_seg_start = 0;
- lv_coord_t out_y_seg_end = 0;
- lv_coord_t out_x_last = radius;
+ /*Most simple case: just a plain rectangle*/
+ if(simple_mode && rout == 0 && style->body.main_color.full == style->body.grad_color.full) {
+ lv_blend_fill(clip, &coords_bg,
+ style->body.main_color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa,
+ style->body.blend_mode);
+ }
+ /*More complex case: there is a radius, gradient or mask.*/
+ else {
+ lv_draw_mask_radius_param_t mask_rout_param;
+ if(rout > 0) {
+ lv_draw_mask_radius_init(&mask_rout_param, &coords_bg, rout, false);
+ mask_rout_id = lv_draw_mask_add(&mask_rout_param, NULL);
+ }
- lv_color_t aa_color_hor_top;
- lv_color_t aa_color_hor_bottom;
- lv_color_t aa_color_ver;
-#endif
+ if(opa >= LV_OPA_MIN) {
+ /*Draw the background line by line*/
+ lv_coord_t h;
+ lv_draw_mask_res_t mask_res = LV_DRAW_MASK_RES_FULL_COVER;
+ lv_color_t grad_color = style->body.main_color;
- while(lv_circ_cont(&cir)) {
-#if LV_ANTIALIAS
- if(aa) {
- /*New step in y on the outter circle*/
- if(out_x_last != cir.x) {
- out_y_seg_end = cir.y;
- lv_coord_t seg_size = out_y_seg_end - out_y_seg_start;
- lv_point_t aa_p;
- aa_p.x = out_x_last;
- aa_p.y = out_y_seg_start;
-
- mix = (uint32_t)((uint32_t)(radius - out_x_last) * 255) / height;
- aa_color_hor_top = lv_color_mix(gcolor, mcolor, mix);
- aa_color_hor_bottom = lv_color_mix(mcolor, gcolor, mix);
+ lv_color_t * grad_map = NULL;
+ /*In case of horizontal gradient pre-compute a line with a gradient*/
+ if(style->body.grad_dir == LV_GRAD_DIR_HOR && style->body.main_color.full != style->body.grad_color.full) {
+ grad_map = lv_mem_buf_get(coords_w * sizeof(lv_color_t));
lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa;
- if(seg_size > CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD) { /*Use non-linear opa mapping
- on the first segment*/
- aa_opa = antialias_get_opa_circ(seg_size, i, opa);
- } else {
- aa_opa = opa - lv_draw_aa_get_opa(seg_size, i, opa);
+ for(i = 0; i < coords_w; i++) {
+ grad_map[i] = grad_get(style, coords_w, i);
+ }
+ }
+
+ lv_area_t fill_area;
+ fill_area.x1 = coords_bg.x1;
+ fill_area.x2 = coords_bg.x2;
+ fill_area.y1 = disp_area->y1 + draw_area.y1;
+ fill_area.y2 = fill_area.y1;
+ for(h = draw_area.y1; h <= draw_area.y2; h++) {
+ lv_coord_t y = h + vdb->area.y1;
+
+ /*In not corner areas apply the mask only if required*/
+ if(y > coords_bg.y1 + rout + 1 &&
+ y < coords_bg.y2 - rout - 1) {
+ mask_res = LV_DRAW_MASK_RES_FULL_COVER;
+ if(simple_mode == false) {
+ memset(mask_buf, LV_OPA_COVER, draw_area_w);
+ mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
}
-
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) + 1, mask,
- aa_color_hor_bottom, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) + 1, mask,
- aa_color_hor_bottom, aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) - 1, mask,
- aa_color_hor_top, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) - 1, mask,
- aa_color_hor_top, aa_opa);
-
- mix = (uint32_t)((uint32_t)(radius - out_y_seg_start + i) * 255) / height;
- aa_color_ver = lv_color_mix(mcolor, gcolor, mix);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) + 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- aa_color_ver, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) - 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask,
- aa_color_ver, aa_opa);
-
- aa_color_ver = lv_color_mix(gcolor, mcolor, mix);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) - 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- aa_color_ver, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) + 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask,
- aa_color_ver, aa_opa);
+ }
+ /*In corner areas apply the mask anyway*/
+ else {
+ memset(mask_buf, LV_OPA_COVER, draw_area_w);
+ mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
}
- out_x_last = cir.x;
- out_y_seg_start = out_y_seg_end;
+ /*Get the current line color*/
+ if(style->body.grad_dir == LV_GRAD_DIR_VER && style->body.main_color.full != style->body.grad_color.full) {
+ grad_color = grad_get(style, lv_area_get_height(&coords_bg), y - coords_bg.y1);
+ }
+
+ /* If there is not other mask and drawing the corner area split the drawing to corner and middle areas
+ * because it the middle mask shuldn't be taken into account (therefore its faster)*/
+ if(simple_mode &&
+ (y < coords_bg.y1 + rout + 1 ||
+ y > coords_bg.y2 - rout - 1)) {
+
+ /*Left part*/
+ lv_area_t fill_area2;
+ fill_area2.x1 = coords_bg.x1;
+ fill_area2.x2 = coords_bg.x1 + rout - 1;
+ fill_area2.y1 = fill_area.y1;
+ fill_area2.y2 = fill_area.y2;
+
+ lv_blend_fill(clip, &fill_area2,
+ grad_color, mask_buf, mask_res, opa, style->body.blend_mode);
+
+
+ /*Central part*/
+ fill_area2.x1 = coords_bg.x1 + rout;
+ fill_area2.x2 = coords_bg.x2 - rout;
+
+ lv_blend_fill(clip, &fill_area2,
+ grad_color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa, style->body.blend_mode);
+
+ fill_area2.x1 = coords_bg.x2 - rout + 1;
+ fill_area2.x2 = coords_bg.x2;
+
+ lv_coord_t mask_ofs = (coords_bg.x2 - rout + 1) - (vdb->area.x1 + draw_area.x1);
+ if(mask_ofs < 0) mask_ofs = 0;
+ lv_blend_fill(clip, &fill_area2,
+ grad_color, mask_buf + mask_ofs, mask_res, opa, style->body.blend_mode);
+ } else {
+ if(grad_map == NULL) {
+ lv_blend_fill(clip, &fill_area,
+ grad_color,mask_buf, mask_res, opa, style->body.blend_mode);
+ } else {
+ lv_blend_map(clip, &fill_area, grad_map, mask_buf, mask_res, opa, style->body.blend_mode);
+ }
+
+ }
+ fill_area.y1++;
+ fill_area.y2++;
}
- }
-#endif
- uint8_t edge_top_refr = 0;
- uint8_t mid_top_refr = 0;
- uint8_t mid_bot_refr = 0;
- uint8_t edge_bot_refr = 0;
- /* If a new row coming draw the previous
- * The y coordinate can remain the same so wait for a new*/
- if(mid_bot_area.y1 != LV_CIRC_OCT4_Y(cir) + lb_origo.y) mid_bot_refr = 1;
-
- if(edge_bot_area.y1 != LV_CIRC_OCT2_Y(cir) + lb_origo.y) edge_bot_refr = 1;
-
- if(mid_top_area.y1 != LV_CIRC_OCT8_Y(cir) + lt_origo.y) mid_top_refr = 1;
-
- if(edge_top_area.y1 != LV_CIRC_OCT7_Y(cir) + lt_origo.y) edge_top_refr = 1;
-
- /*Draw the areas which are not disabled*/
- if(edge_top_refr != 0) {
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - edge_top_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&edge_top_area, mask, act_color, opa);
+ if(grad_map) lv_mem_buf_release(grad_map);
}
- if(mid_top_refr != 0) {
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - mid_top_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&mid_top_area, mask, act_color, opa);
- }
-
- if(mid_bot_refr != 0) {
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - mid_bot_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&mid_bot_area, mask, act_color, opa);
- }
-
- if(edge_bot_refr != 0) {
-
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - edge_bot_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&edge_bot_area, mask, act_color, opa);
- }
-
- /*Save the current coordinates*/
- lv_area_set(&mid_bot_area, lb_origo.x + LV_CIRC_OCT4_X(cir), lb_origo.y + LV_CIRC_OCT4_Y(cir),
- rb_origo.x + LV_CIRC_OCT1_X(cir), rb_origo.y + LV_CIRC_OCT1_Y(cir));
-
- lv_area_set(&edge_bot_area, lb_origo.x + LV_CIRC_OCT3_X(cir), lb_origo.y + LV_CIRC_OCT3_Y(cir),
- rb_origo.x + LV_CIRC_OCT2_X(cir), rb_origo.y + LV_CIRC_OCT2_Y(cir));
-
- lv_area_set(&mid_top_area, lt_origo.x + LV_CIRC_OCT5_X(cir), lt_origo.y + LV_CIRC_OCT5_Y(cir),
- rt_origo.x + LV_CIRC_OCT8_X(cir), rt_origo.y + LV_CIRC_OCT8_Y(cir));
-
- lv_area_set(&edge_top_area, lt_origo.x + LV_CIRC_OCT6_X(cir), lt_origo.y + LV_CIRC_OCT6_Y(cir),
- rt_origo.x + LV_CIRC_OCT7_X(cir), rt_origo.y + LV_CIRC_OCT7_Y(cir));
-
- lv_circ_next(&cir, &cir_tmp);
+ lv_draw_mask_remove_id(mask_rout_id);
}
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - edge_top_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&edge_top_area, mask, act_color, opa);
+ lv_mem_buf_release(mask_buf);
- if(edge_top_area.y1 != mid_top_area.y1) {
-
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - mid_top_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&mid_top_area, mask, act_color, opa);
- }
-
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - mid_bot_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&mid_bot_area, mask, act_color, opa);
-
- if(edge_bot_area.y1 != mid_bot_area.y1) {
-
- if(mcolor.full == gcolor.full)
- act_color = mcolor;
- else {
- mix = (uint32_t)((uint32_t)(coords->y2 - edge_bot_area.y1) * 255) / height;
- act_color = lv_color_mix(mcolor, gcolor, mix);
- }
- lv_draw_fill(&edge_bot_area, mask, act_color, opa);
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- /*The first and the last line is not drawn*/
- edge_top_area.x1 = coords->x1 + radius + 2;
- edge_top_area.x2 = coords->x2 - radius - 2;
- edge_top_area.y1 = coords->y1;
- edge_top_area.y2 = coords->y1;
- lv_draw_fill(&edge_top_area, mask, style->body.main_color, opa);
-
- edge_top_area.y1 = coords->y2;
- edge_top_area.y2 = coords->y2;
- lv_draw_fill(&edge_top_area, mask, style->body.grad_color, opa);
-
- /*Last parts of the anti-alias*/
- out_y_seg_end = cir.y;
- lv_coord_t seg_size = out_y_seg_end - out_y_seg_start;
- lv_point_t aa_p;
-
- aa_p.x = out_x_last;
- aa_p.y = out_y_seg_start;
-
- mix = (uint32_t)((uint32_t)(radius - out_x_last) * 255) / height;
- aa_color_hor_bottom = lv_color_mix(gcolor, mcolor, mix);
- aa_color_hor_top = lv_color_mix(mcolor, gcolor, mix);
-
- lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa = opa - lv_draw_aa_get_opa(seg_size, i, opa);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) + 1, mask,
- aa_color_hor_top, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) + 1, mask,
- aa_color_hor_top, aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) - 1, mask,
- aa_color_hor_bottom, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) - 1, mask,
- aa_color_hor_bottom, aa_opa);
-
- mix = (uint32_t)((uint32_t)(radius - out_y_seg_start + i) * 255) / height;
- aa_color_ver = lv_color_mix(mcolor, gcolor, mix);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) + 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask, aa_color_ver,
- aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) - 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask, aa_color_ver,
- aa_opa);
-
- aa_color_ver = lv_color_mix(gcolor, mcolor, mix);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) - 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask, aa_color_ver,
- aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) + 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask, aa_color_ver,
- aa_opa);
- }
-
- /*In some cases the last pixel is not drawn*/
- if(LV_MATH_ABS(aa_p.x - aa_p.y) == seg_size) {
- aa_p.x = out_x_last;
- aa_p.y = out_x_last;
-
- mix = (uint32_t)((uint32_t)(out_x_last)*255) / height;
- aa_color_hor_top = lv_color_mix(gcolor, mcolor, mix);
- aa_color_hor_bottom = lv_color_mix(mcolor, gcolor, mix);
-
- lv_opa_t aa_opa = opa >> 1;
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p), rb_origo.y + LV_CIRC_OCT2_Y(aa_p), mask, aa_color_hor_bottom,
- aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p), lb_origo.y + LV_CIRC_OCT4_Y(aa_p), mask, aa_color_hor_bottom,
- aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p), lt_origo.y + LV_CIRC_OCT6_Y(aa_p), mask, aa_color_hor_top,
- aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p), rt_origo.y + LV_CIRC_OCT8_Y(aa_p), mask, aa_color_hor_top,
- aa_opa);
- }
- }
-#endif
}
-/**
- * Draw the straight parts of a rectangle border
- * @param coords the coordinates of the original rectangle
- * @param mask_ the rectangle will be drawn only on this area
- * @param rstyle pointer to a rectangle style
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_rect_border_straight(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
+static void draw_border(const lv_area_t * coords, const lv_area_t * clip, const lv_style_t * style, lv_opa_t opa_scale)
{
- uint16_t radius = style->body.radius;
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
+ lv_coord_t border_width = style->body.border.width;
+ if(border_width == 0) return;
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
- lv_coord_t bwidth = style->body.border.width;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.border.opa
- : (uint16_t)((uint16_t)style->body.border.opa * opa_scale) >> 8;
- lv_border_part_t part = style->body.border.part;
- lv_color_t color = style->body.border.color;
- lv_area_t work_area;
- lv_coord_t length_corr = 0;
- lv_coord_t corner_size = 0;
+ lv_opa_t opa = style->body.border.opa;
+ if(opa_scale != LV_OPA_COVER) opa = (opa * opa_scale) >> 8;
- /*the 0 px border width drawn as 1 px, so decrement the b_width*/
- bwidth--;
+ if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
- radius = lv_draw_cont_radius_corr(radius, width, height);
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
- if(radius < bwidth) {
- length_corr = bwidth - radius - aa;
- corner_size = bwidth;
- } else {
- corner_size = radius + aa;
+ /* Get clipped fill area which is the real draw area.
+ * It is always the same or inside `fill_area` */
+ lv_area_t draw_area;
+ bool is_common;
+ is_common = lv_area_intersect(&draw_area, coords, clip);
+ if(is_common == false) return;
+
+ const lv_area_t * disp_area = &vdb->area;
+
+ /* Now `draw_area` has absolute coordinates.
+ * Make it relative to `disp_area` to simplify draw to `disp_buf`*/
+ draw_area.x1 -= disp_area->x1;
+ draw_area.y1 -= disp_area->y1;
+ draw_area.x2 -= disp_area->x1;
+ draw_area.y2 -= disp_area->y1;
+
+ lv_coord_t draw_area_w = lv_area_get_width(&draw_area);
+
+ /*Create a mask if there is a radius*/
+ lv_opa_t * mask_buf = lv_mem_buf_get(draw_area_w);
+
+ bool simple_mode = true;
+ if(lv_draw_mask_get_cnt()!= 0) simple_mode = false;
+ else if(style->body.border.part != LV_BORDER_PART_FULL) simple_mode = false;
+ else if(style->body.grad_dir == LV_GRAD_DIR_HOR) simple_mode = false;
+
+ int16_t mask_rout_id = LV_MASK_ID_INV;
+
+ lv_coord_t coords_w = lv_area_get_width(coords);
+ lv_coord_t coords_h = lv_area_get_height(coords);
+
+ /*Get the real radius*/
+ lv_coord_t rout = style->body.radius;
+ lv_coord_t short_side = LV_MATH_MIN(coords_w, coords_h);
+ if(rout > short_side >> 1) rout = short_side >> 1;
+
+ /*Get the outer area*/
+ lv_draw_mask_radius_param_t mask_rout_param;
+ if(rout > 0) {
+ lv_draw_mask_radius_init(&mask_rout_param, coords, rout, false);
+ mask_rout_id = lv_draw_mask_add(&mask_rout_param, NULL);
}
- /*If radius == 0 is a special case*/
- if(style->body.radius == 0) {
- /*Left top corner*/
- if(part & LV_BORDER_TOP) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y1;
- work_area.y2 = coords->y1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
+
+ /*Get the inner radius*/
+ lv_coord_t rin = rout - border_width;
+ if(rin < 0) rin = 0;
+
+ /*Get the inner area*/
+ lv_area_t area_small;
+ lv_area_copy(&area_small, coords);
+ area_small.x1 += ((style->body.border.part & LV_BORDER_PART_LEFT) ? border_width : - (border_width + rout));
+ area_small.x2 -= ((style->body.border.part & LV_BORDER_PART_RIGHT) ? border_width : - (border_width + rout));
+ area_small.y1 += ((style->body.border.part & LV_BORDER_PART_TOP) ? border_width : - (border_width + rout));
+ area_small.y2 -= ((style->body.border.part & LV_BORDER_PART_BOTTOM) ? border_width : - (border_width + rout));
+
+ /*Create inner the mask*/
+ lv_draw_mask_radius_param_t mask_rin_param;
+ lv_draw_mask_radius_init(&mask_rin_param, &area_small, rout - border_width, true);
+ int16_t mask_rin_id = lv_draw_mask_add(&mask_rin_param, NULL);
+
+ lv_coord_t corner_size = LV_MATH_MAX(rout, border_width - 1);
+
+ lv_coord_t h;
+ lv_draw_mask_res_t mask_res;
+ lv_area_t fill_area;
+
+ /*Apply some optimization if there is no other mask*/
+ if(simple_mode) {
+ /*Draw the upper corner area*/
+ lv_coord_t upper_corner_end = coords->y1 - disp_area->y1 + corner_size;
+
+ fill_area.x1 = coords->x1;
+ fill_area.x2 = coords->x2;
+ fill_area.y1 = disp_area->y1 + draw_area.y1;
+ fill_area.y2 = fill_area.y1;
+ for(h = draw_area.y1; h <= upper_corner_end; h++) {
+ memset(mask_buf, LV_OPA_COVER, draw_area_w);
+ mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
+
+ lv_area_t fill_area2;
+ fill_area2.y1 = fill_area.y1;
+ fill_area2.y2 = fill_area.y2;
+
+ fill_area2.x1 = coords->x1;
+ fill_area2.x2 = coords->x1 + rout - 1;
+
+ lv_blend_fill(clip, &fill_area2,
+ style->body.border.color, mask_buf, mask_res, opa, style->body.border.blend_mode);
+
+ if(fill_area2.y2 < coords->y1 + style->body.border.width) {
+ fill_area2.x1 = coords->x1 + rout;
+ fill_area2.x2 = coords->x2 - rout;
+
+ lv_blend_fill(clip, &fill_area2,
+ style->body.border.color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa, style->body.border.blend_mode);
+ }
+
+ fill_area2.x1 = coords->x2 - rout + 1;
+ fill_area2.x2 = coords->x2;
+
+ lv_coord_t mask_ofs = (coords->x2 - rout + 1) - (vdb->area.x1 + draw_area.x1);
+ if(mask_ofs < 0) mask_ofs = 0;
+ lv_blend_fill(clip, &fill_area2,
+ style->body.border.color, mask_buf + mask_ofs, mask_res, opa, style->body.border.blend_mode);
+
+ fill_area.y1++;
+ fill_area.y2++;
}
- /*Right top corner*/
- if(part & LV_BORDER_RIGHT) {
- work_area.x1 = coords->x2 - bwidth;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y1 + (part & LV_BORDER_TOP ? bwidth + 1 : 0);
- work_area.y2 = coords->y2 - (part & LV_BORDER_BOTTOM ? bwidth + 1 : 0);
- lv_draw_fill(&work_area, mask, color, opa);
+ /*Draw the lower corner area corner area*/
+ if(style->body.border.part & LV_BORDER_PART_BOTTOM) {
+ lv_coord_t lower_corner_end = coords->y2 - disp_area->y1 - corner_size;
+ if(lower_corner_end <= upper_corner_end) lower_corner_end = upper_corner_end + 1;
+ fill_area.y1 = disp_area->y1 + lower_corner_end;
+ fill_area.y2 = fill_area.y1;
+ for(h = lower_corner_end; h <= draw_area.y2; h++) {
+ memset(mask_buf, LV_OPA_COVER, draw_area_w);
+ mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
+
+ lv_area_t fill_area2;
+ fill_area2.x1 = coords->x1;
+ fill_area2.x2 = coords->x1 + rout - 1;
+ fill_area2.y1 = fill_area.y1;
+ fill_area2.y2 = fill_area.y2;
+
+ lv_blend_fill(clip, &fill_area2,
+ style->body.border.color, mask_buf, mask_res, opa, style->body.border.blend_mode);
+
+
+ if(fill_area2.y2 > coords->y2 - style->body.border.width ) {
+ fill_area2.x1 = coords->x1 + rout;
+ fill_area2.x2 = coords->x2 - rout;
+
+ lv_blend_fill(clip, &fill_area2,
+ style->body.border.color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa, style->body.border.blend_mode);
+ }
+ fill_area2.x1 = coords->x2 - rout + 1;
+ fill_area2.x2 = coords->x2;
+
+ lv_coord_t mask_ofs = (coords->x2 - rout + 1) - (vdb->area.x1 + draw_area.x1);
+ if(mask_ofs < 0) mask_ofs = 0;
+ lv_blend_fill(clip, &fill_area2,
+ style->body.border.color, mask_buf + mask_ofs, mask_res, opa, style->body.border.blend_mode);
+
+
+ fill_area.y1++;
+ fill_area.y2++;
+ }
}
- /*Left bottom corner*/
- if(part & LV_BORDER_LEFT) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + bwidth;
- work_area.y1 = coords->y1 + (part & LV_BORDER_TOP ? bwidth + 1 : 0);
- work_area.y2 = coords->y2 - (part & LV_BORDER_BOTTOM ? bwidth + 1 : 0);
- lv_draw_fill(&work_area, mask, color, opa);
- }
+ /*Draw the left vertical border part*/
+ fill_area.y1 = coords->y1 + corner_size + 1;
+ fill_area.y2 = coords->y2 - corner_size - 1;
+
+ fill_area.x1 = coords->x1;
+ fill_area.x2 = coords->x1 + border_width - 1;
+ lv_blend_fill(clip, &fill_area,
+ style->body.border.color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa, style->body.border.blend_mode);
+
+ /*Draw the right vertical border*/
+ fill_area.x1 = coords->x2 - border_width + 1;
+ fill_area.x2 = coords->x2;
+
+ lv_blend_fill(clip, &fill_area,
+ style->body.border.color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa, style->body.border.blend_mode);
+ }
+ /*Process line by line if there is other mask too*/
+ else {
+ fill_area.x1 = coords->x1;
+ fill_area.x2 = coords->x2;
+ fill_area.y1 = disp_area->y1 + draw_area.y1;
+ fill_area.y2 = fill_area.y1;
+ for(h = draw_area.y1; h <= draw_area.y2; h++) {
+ memset(mask_buf, LV_OPA_COVER, draw_area_w);
+ mask_res = lv_draw_mask_apply(mask_buf, vdb->area.x1 + draw_area.x1, vdb->area.y1 + h, draw_area_w);
+
+ lv_blend_fill( clip, &fill_area,
+ style->body.border.color, mask_buf, mask_res, opa, style->body.border.blend_mode);
+
+ fill_area.y1++;
+ fill_area.y2++;
- /*Right bottom corner*/
- if(part & LV_BORDER_BOTTOM) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y2 - bwidth;
- work_area.y2 = coords->y2;
- lv_draw_fill(&work_area, mask, color, opa);
}
+ }
+ lv_draw_mask_remove_id(mask_rin_id);
+ lv_draw_mask_remove_id(mask_rout_id);
+ lv_mem_buf_release(mask_buf);
+}
+
+static lv_color_t grad_get(const lv_style_t * style, lv_coord_t s, lv_coord_t i)
+{
+ lv_coord_t min = (style->body.main_color_stop * s) >> 8;
+ if(i <= min) return style->body.main_color;
+
+ lv_coord_t max = (style->body.grad_color_stop * s) >> 8;
+ if(i >= max) return style->body.grad_color;
+
+ lv_coord_t d = style->body.grad_color_stop - style->body.main_color_stop;
+ d = (s * d) >> 8;
+ i -= min;
+ lv_opa_t mix = (i * 255) / d;
+ return lv_color_mix(style->body.grad_color, style->body.main_color, mix);
+}
+
+static void draw_shadow(const lv_area_t * coords, const lv_area_t * clip, const lv_style_t * style, lv_opa_t opa_scale)
+{
+ /*Check whether the shadow is visible*/
+ if(style->body.shadow.width == 0) return;
+
+ if(style->body.shadow.width == 1 && style->body.shadow.offset.x == 0 &&
+ style->body.shadow.offset.y == 0 && style->body.shadow.spread <= 0) {
return;
}
- /* Modify the corner_size if corner is drawn */
- corner_size++;
+ lv_coord_t sw = style->body.shadow.width;
- /*Depending one which part's are drawn modify the area lengths */
- if(part & LV_BORDER_TOP)
- work_area.y1 = coords->y1 + corner_size;
- else
- work_area.y1 = coords->y1 + radius;
+ lv_area_t sh_rect_area;
+ sh_rect_area.x1 = coords->x1 + style->body.shadow.offset.x - style->body.shadow.spread;
+ sh_rect_area.x2 = coords->x2 + style->body.shadow.offset.x + style->body.shadow.spread;
+ sh_rect_area.y1 = coords->y1 + style->body.shadow.offset.y - style->body.shadow.spread;
+ sh_rect_area.y2 = coords->y2 + style->body.shadow.offset.y + style->body.shadow.spread;
- if(part & LV_BORDER_BOTTOM)
- work_area.y2 = coords->y2 - corner_size;
- else
- work_area.y2 = coords->y2 - radius;
+ lv_area_t sh_area;
+ sh_area.x1 = sh_rect_area.x1 - sw / 2 - 1;
+ sh_area.x2 = sh_rect_area.x2 + sw / 2 + 1;
+ sh_area.y1 = sh_rect_area.y1 - sw / 2 - 1;
+ sh_area.y2 = sh_rect_area.y2 + sw / 2 + 1;
- /*Left border*/
- if(part & LV_BORDER_LEFT) {
- work_area.x1 = coords->x1;
- work_area.x2 = work_area.x1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
+ lv_opa_t opa = style->body.shadow.opa;
+
+ if(opa_scale != LV_OPA_COVER) opa = (opa * opa_scale) >> 8;
+
+ if(opa > LV_OPA_MAX) opa = LV_OPA_COVER;
+
+ lv_disp_t * disp = lv_refr_get_disp_refreshing();
+ lv_disp_buf_t * vdb = lv_disp_get_buf(disp);
+
+ /* Get clipped fill area which is the real draw area.
+ * It is always the same or inside `fill_area` */
+ lv_area_t draw_area;
+ bool is_common;
+ is_common = lv_area_intersect(&draw_area, &sh_area, clip);
+ if(is_common == false) return;
+
+ const lv_area_t * disp_area = &vdb->area;
+
+ /* Now `draw_area` has absolute coordinates.
+ * Make it relative to `disp_area` to simplify draw to `disp_buf`*/
+ draw_area.x1 -= disp_area->x1;
+ draw_area.y1 -= disp_area->y1;
+ draw_area.x2 -= disp_area->x1;
+ draw_area.y2 -= disp_area->y1;
+
+ /*Consider 1 px smaller bg to be sure the edge will be covered by the shadow*/
+ lv_area_t bg_coords;
+ lv_area_copy(&bg_coords, coords);
+ bg_coords.x1 += 1;
+ bg_coords.y1 += 1;
+ bg_coords.x2 -= 1;
+ bg_coords.y2 -= 1;
+
+ /*Get the real radius*/
+ lv_coord_t r_bg = style->body.radius;
+ lv_coord_t short_side = LV_MATH_MIN(lv_area_get_width(&bg_coords), lv_area_get_height(&bg_coords));
+ if(r_bg > short_side >> 1) r_bg = short_side >> 1;
+
+ lv_coord_t r_sh = style->body.radius;
+ short_side = LV_MATH_MIN(lv_area_get_width(&sh_rect_area), lv_area_get_height(&sh_rect_area));
+ if(r_sh > short_side >> 1) r_sh = short_side >> 1;
+
+
+ lv_coord_t corner_size = sw + r_sh;
+
+ lv_opa_t * sh_buf = lv_mem_buf_get(corner_size * corner_size);
+ shadow_draw_corner_buf(&sh_rect_area, sh_buf, style->body.shadow.width, r_sh);
+
+ bool simple_mode = true;
+ if(lv_draw_mask_get_cnt() > 0) simple_mode = false;
+ else if(style->body.shadow.offset.x != 0 || style->body.shadow.offset.y != 0) simple_mode = false;
+ else if(style->body.shadow.spread != 0) simple_mode = false;
+
+ lv_coord_t y_max;
+
+ /*Create a mask*/
+ lv_draw_mask_res_t mask_res;
+ lv_opa_t * mask_buf = lv_mem_buf_get(lv_area_get_width(&sh_rect_area));
+
+ lv_draw_mask_radius_param_t mask_rout_param;
+ lv_draw_mask_radius_init(&mask_rout_param, &bg_coords, r_bg, true);
+
+ int16_t mask_rout_id = LV_MASK_ID_INV;
+ mask_rout_id = lv_draw_mask_add(&mask_rout_param, NULL);
+
+ lv_area_t a;
+
+ /*Draw the top right corner*/
+ a.x2 = sh_area.x2;
+ a.x1 = a.x2 - corner_size + 1;
+ a.y1 = sh_area.y1;
+ a.y2 = a.y1;
+
+ lv_coord_t first_px;
+ first_px = 0;
+ if(disp_area->x1 > a.x1) {
+ first_px = disp_area->x1 - a.x1;
}
- /*Right border*/
- if(part & LV_BORDER_RIGHT) {
- work_area.x2 = coords->x2;
- work_area.x1 = work_area.x2 - bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
+ lv_coord_t hor_mid_dist = (sh_area.x1 + lv_area_get_width(&sh_area) / 2) - (a.x1 + first_px);
+ if(hor_mid_dist > 0) {
+ first_px += hor_mid_dist;
+ }
+ a.x1 += first_px;
+
+ lv_coord_t ver_mid_dist = (a.y1 + corner_size) - (sh_area.y1 + lv_area_get_height(&sh_area) / 2);
+ lv_coord_t ver_mid_corr = 0;
+ if(ver_mid_dist <= 0) ver_mid_dist = 0;
+ else {
+ if(lv_area_get_height(&sh_area) & 0x1) ver_mid_corr = 1;
+ }
+ lv_opa_t * sh_buf_tmp = sh_buf;
+
+ lv_coord_t y;
+ for(y = 0; y < corner_size - ver_mid_dist + ver_mid_corr; y++) {
+ memcpy(mask_buf, sh_buf_tmp, corner_size);
+ mask_res = lv_draw_mask_apply(mask_buf + first_px, a.x1, a.y1, lv_area_get_width(&a));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask_res = LV_DRAW_MASK_RES_CHANGED;
+
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, mask_buf + first_px, mask_res, opa, style->body.shadow.blend_mode);
+ a.y1++;
+ a.y2++;
+ sh_buf_tmp += corner_size;
}
- work_area.x1 = coords->x1 + corner_size - length_corr;
- work_area.x2 = coords->x2 - corner_size + length_corr;
+ /*Draw the bottom right corner*/
+ a.y1 = sh_area.y2;
+ a.y2 = a.y1;
- /*Upper border*/
- if(part & LV_BORDER_TOP) {
- work_area.y1 = coords->y1;
- work_area.y2 = coords->y1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
+ sh_buf_tmp = sh_buf ;
+
+ for(y = 0; y < corner_size - ver_mid_dist; y++) {
+ memcpy(mask_buf, sh_buf_tmp, corner_size);
+ mask_res = lv_draw_mask_apply(mask_buf + first_px, a.x1, a.y1, lv_area_get_width(&a));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask_res = LV_DRAW_MASK_RES_CHANGED;
+
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, mask_buf + first_px, mask_res, opa, style->body.shadow.blend_mode);
+ a.y1--;
+ a.y2--;
+ sh_buf_tmp += corner_size;
}
- /*Lower border*/
- if(part & LV_BORDER_BOTTOM) {
- work_area.y2 = coords->y2;
- work_area.y1 = work_area.y2 - bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
+ /*Fill the right side*/
+ a.y1 = sh_area.y1 + corner_size;
+ a.y2 = a.y1;
+ sh_buf_tmp = sh_buf + corner_size * (corner_size - 1);
- /*Draw the a remaining rectangles if the radius is smaller then bwidth */
- if(length_corr != 0) {
- /*Left top correction*/
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + radius + aa;
- work_area.y1 = coords->y1 + radius + 1 + aa;
- work_area.y2 = coords->y1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
+ lv_coord_t x;
- /*Right top correction*/
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- work_area.x1 = coords->x2 - radius - aa;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y1 + radius + 1 + aa;
- work_area.y2 = coords->y1 + bwidth;
- lv_draw_fill(&work_area, mask, color, opa);
- }
+ if(simple_mode) {
+ /*Draw vertical lines*/
+ lv_area_t va;
+ va.x1 = a.x1;
+ va.x2 = a.x1;
+ va.y1 = sh_area.y1 + corner_size;
+ va.y2 = sh_area.y2 - corner_size;
- /*Left bottom correction*/
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + radius + aa;
- work_area.y1 = coords->y2 - bwidth;
- work_area.y2 = coords->y2 - radius - 1 - aa;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right bottom correction*/
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- work_area.x1 = coords->x2 - radius - aa;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y2 - bwidth;
- work_area.y2 = coords->y2 - radius - 1 - aa;
- lv_draw_fill(&work_area, mask, color, opa);
- }
- }
-
- /*If radius == 0 one px on the corners are not drawn by main drawer*/
- if(style->body.radius == 0) {
- /*Left top corner*/
- if(part & (LV_BORDER_TOP | LV_BORDER_LEFT)) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + aa;
- work_area.y1 = coords->y1;
- work_area.y2 = coords->y1 + aa;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right top corner*/
- if(part & (LV_BORDER_TOP | LV_BORDER_RIGHT)) {
- work_area.x1 = coords->x2 - aa;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y1;
- work_area.y2 = coords->y1 + aa;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Left bottom corner*/
- if(part & (LV_BORDER_BOTTOM | LV_BORDER_LEFT)) {
- work_area.x1 = coords->x1;
- work_area.x2 = coords->x1 + aa;
- work_area.y1 = coords->y2 - aa;
- work_area.y2 = coords->y2;
- lv_draw_fill(&work_area, mask, color, opa);
- }
-
- /*Right bottom corner*/
- if(part & (LV_BORDER_BOTTOM | LV_BORDER_RIGHT)) {
- work_area.x1 = coords->x2 - aa;
- work_area.x2 = coords->x2;
- work_area.y1 = coords->y2 - aa;
- work_area.y2 = coords->y2;
- lv_draw_fill(&work_area, mask, color, opa);
- }
- }
-}
-
-/**
- * Draw the corners of a rectangle border
- * @param coords the coordinates of the original rectangle
- * @param mask the rectangle will be drawn only on this area
- * @param style pointer to a style
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_rect_border_corner(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- uint16_t radius = style->body.radius;
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
- lv_coord_t bwidth = style->body.border.width;
- lv_color_t color = style->body.border.color;
- lv_border_part_t part = style->body.border.part;
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.border.opa
- : (uint16_t)((uint16_t)style->body.border.opa * opa_scale) >> 8;
- /*0 px border width drawn as 1 px, so decrement the bwidth*/
- bwidth--;
-
-#if LV_ANTIALIAS
- if(aa) bwidth--; /*Because of anti-aliasing the border seems one pixel ticker*/
-#endif
-
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
-
- lv_point_t lt_origo; /*Left Top origo*/
- lv_point_t lb_origo; /*Left Bottom origo*/
- lv_point_t rt_origo; /*Right Top origo*/
- lv_point_t rb_origo; /*Left Bottom origo*/
-
- lt_origo.x = coords->x1 + radius + aa;
- lt_origo.y = coords->y1 + radius + aa;
-
- lb_origo.x = coords->x1 + radius + aa;
- lb_origo.y = coords->y2 - radius - aa;
-
- rt_origo.x = coords->x2 - radius - aa;
- rt_origo.y = coords->y1 + radius + aa;
-
- rb_origo.x = coords->x2 - radius - aa;
- rb_origo.y = coords->y2 - radius - aa;
-
- lv_point_t cir_out;
- lv_coord_t tmp_out;
- lv_circ_init(&cir_out, &tmp_out, radius);
-
- lv_point_t cir_in;
- lv_coord_t tmp_in;
- lv_coord_t radius_in = radius - bwidth;
-
- if(radius_in < 0) {
- radius_in = 0;
- }
-
- lv_circ_init(&cir_in, &tmp_in, radius_in);
-
- lv_area_t circ_area;
- lv_coord_t act_w1;
- lv_coord_t act_w2;
-
-#if LV_ANTIALIAS
- /*Store some internal states for anti-aliasing*/
- lv_coord_t out_y_seg_start = 0;
- lv_coord_t out_y_seg_end = 0;
- lv_coord_t out_x_last = radius;
-
- lv_coord_t in_y_seg_start = 0;
- lv_coord_t in_y_seg_end = 0;
- lv_coord_t in_x_last = radius - bwidth;
-#endif
-
- while(cir_out.y <= cir_out.x) {
-
- /*Calculate the actual width to avoid overwriting pixels*/
- if(cir_in.y < cir_in.x) {
- act_w1 = cir_out.x - cir_in.x;
- act_w2 = act_w1;
- } else {
- act_w1 = cir_out.x - cir_out.y;
- act_w2 = act_w1 - 1;
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- /*New step in y on the outter circle*/
- if(out_x_last != cir_out.x) {
- out_y_seg_end = cir_out.y;
- lv_coord_t seg_size = out_y_seg_end - out_y_seg_start;
- lv_point_t aa_p;
-
- aa_p.x = out_x_last;
- aa_p.y = out_y_seg_start;
-
- lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa;
-
- if(seg_size > CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD) { /*Use non-linear opa mapping
- on the first segment*/
- aa_opa = antialias_get_opa_circ(seg_size, i, opa);
- } else {
- aa_opa = opa - lv_draw_aa_get_opa(seg_size, i, opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) + 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) - 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) - 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) + 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- }
- }
-
- out_x_last = cir_out.x;
- out_y_seg_start = out_y_seg_end;
- }
-
- /*New step in y on the inner circle*/
- if(in_x_last != cir_in.x) {
- in_y_seg_end = cir_out.y;
- lv_coord_t seg_size = in_y_seg_end - in_y_seg_start;
- lv_point_t aa_p;
-
- aa_p.x = in_x_last;
- aa_p.y = in_y_seg_start;
-
- lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa;
-
- if(seg_size > CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD) { /*Use non-linear opa mapping
- on the first segment*/
- aa_opa = opa - antialias_get_opa_circ(seg_size, i, opa);
- } else {
- aa_opa = lv_draw_aa_get_opa(seg_size, i, opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) - 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) + 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- /*Be sure the pixels on the middle are not drawn twice*/
- if(LV_CIRC_OCT1_X(aa_p) - 1 != LV_CIRC_OCT2_X(aa_p) + i) {
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) - 1,
- mask, style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) + 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i,
- mask, style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) + 1,
- mask, style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) - 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i,
- mask, style->body.border.color, aa_opa);
- }
- }
- }
-
- in_x_last = cir_in.x;
- in_y_seg_start = in_y_seg_end;
- }
- }
-#endif
-
- /*Draw the octets to the right bottom corner*/
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- circ_area.x1 = rb_origo.x + LV_CIRC_OCT1_X(cir_out) - act_w2;
- circ_area.x2 = rb_origo.x + LV_CIRC_OCT1_X(cir_out);
- circ_area.y1 = rb_origo.y + LV_CIRC_OCT1_Y(cir_out);
- circ_area.y2 = rb_origo.y + LV_CIRC_OCT1_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
-
- circ_area.x1 = rb_origo.x + LV_CIRC_OCT2_X(cir_out);
- circ_area.x2 = rb_origo.x + LV_CIRC_OCT2_X(cir_out);
- circ_area.y1 = rb_origo.y + LV_CIRC_OCT2_Y(cir_out) - act_w1;
- circ_area.y2 = rb_origo.y + LV_CIRC_OCT2_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
- }
-
- /*Draw the octets to the left bottom corner*/
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- circ_area.x1 = lb_origo.x + LV_CIRC_OCT3_X(cir_out);
- circ_area.x2 = lb_origo.x + LV_CIRC_OCT3_X(cir_out);
- circ_area.y1 = lb_origo.y + LV_CIRC_OCT3_Y(cir_out) - act_w2;
- circ_area.y2 = lb_origo.y + LV_CIRC_OCT3_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
-
- circ_area.x1 = lb_origo.x + LV_CIRC_OCT4_X(cir_out);
- circ_area.x2 = lb_origo.x + LV_CIRC_OCT4_X(cir_out) + act_w1;
- circ_area.y1 = lb_origo.y + LV_CIRC_OCT4_Y(cir_out);
- circ_area.y2 = lb_origo.y + LV_CIRC_OCT4_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
- }
-
- /*Draw the octets to the left top corner*/
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- if(lb_origo.y + LV_CIRC_OCT4_Y(cir_out) > lt_origo.y + LV_CIRC_OCT5_Y(cir_out)) {
- /*Don't draw if the lines are common in the middle*/
- circ_area.x1 = lt_origo.x + LV_CIRC_OCT5_X(cir_out);
- circ_area.x2 = lt_origo.x + LV_CIRC_OCT5_X(cir_out) + act_w2;
- circ_area.y1 = lt_origo.y + LV_CIRC_OCT5_Y(cir_out);
- circ_area.y2 = lt_origo.y + LV_CIRC_OCT5_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
- }
-
- circ_area.x1 = lt_origo.x + LV_CIRC_OCT6_X(cir_out);
- circ_area.x2 = lt_origo.x + LV_CIRC_OCT6_X(cir_out);
- circ_area.y1 = lt_origo.y + LV_CIRC_OCT6_Y(cir_out);
- circ_area.y2 = lt_origo.y + LV_CIRC_OCT6_Y(cir_out) + act_w1;
- lv_draw_fill(&circ_area, mask, color, opa);
- }
-
- /*Draw the octets to the right top corner*/
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- circ_area.x1 = rt_origo.x + LV_CIRC_OCT7_X(cir_out);
- circ_area.x2 = rt_origo.x + LV_CIRC_OCT7_X(cir_out);
- circ_area.y1 = rt_origo.y + LV_CIRC_OCT7_Y(cir_out);
- circ_area.y2 = rt_origo.y + LV_CIRC_OCT7_Y(cir_out) + act_w2;
- lv_draw_fill(&circ_area, mask, color, opa);
-
- /*Don't draw if the lines are common in the middle*/
- if(rb_origo.y + LV_CIRC_OCT1_Y(cir_out) > rt_origo.y + LV_CIRC_OCT8_Y(cir_out)) {
- circ_area.x1 = rt_origo.x + LV_CIRC_OCT8_X(cir_out) - act_w1;
- circ_area.x2 = rt_origo.x + LV_CIRC_OCT8_X(cir_out);
- circ_area.y1 = rt_origo.y + LV_CIRC_OCT8_Y(cir_out);
- circ_area.y2 = rt_origo.y + LV_CIRC_OCT8_Y(cir_out);
- lv_draw_fill(&circ_area, mask, color, opa);
- }
- }
- lv_circ_next(&cir_out, &tmp_out);
-
- /*The internal circle will be ready faster
- * so check it! */
- if(cir_in.y < cir_in.x) {
- lv_circ_next(&cir_in, &tmp_in);
- }
- }
-
-#if LV_ANTIALIAS
- if(aa) {
- /*Last parts of the outer anti-alias*/
- out_y_seg_end = cir_out.y;
- lv_coord_t seg_size = out_y_seg_end - out_y_seg_start;
- lv_point_t aa_p;
-
- aa_p.x = out_x_last;
- aa_p.y = out_y_seg_start;
-
- lv_coord_t i;
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa = opa - lv_draw_aa_get_opa(seg_size, i, opa);
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) + 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) - 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) - 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) + 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- }
- }
-
- /*In some cases the last pixel in the outer middle is not drawn*/
- if(LV_MATH_ABS(aa_p.x - aa_p.y) == seg_size) {
- aa_p.x = out_x_last;
- aa_p.y = out_x_last;
-
- lv_opa_t aa_opa = opa >> 1;
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p), rb_origo.y + LV_CIRC_OCT2_Y(aa_p), mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p), lb_origo.y + LV_CIRC_OCT4_Y(aa_p), mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p), lt_origo.y + LV_CIRC_OCT6_Y(aa_p), mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p), rt_origo.y + LV_CIRC_OCT8_Y(aa_p), mask,
- style->body.border.color, aa_opa);
- }
- }
-
- /*Last parts of the inner anti-alias*/
- in_y_seg_end = cir_in.y;
- aa_p.x = in_x_last;
- aa_p.y = in_y_seg_start;
- seg_size = in_y_seg_end - in_y_seg_start;
-
- for(i = 0; i < seg_size; i++) {
- lv_opa_t aa_opa = lv_draw_aa_get_opa(seg_size, i, opa);
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT1_X(aa_p) - 1, rb_origo.y + LV_CIRC_OCT1_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT3_X(aa_p) - i, lb_origo.y + LV_CIRC_OCT3_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT5_X(aa_p) + 1, lt_origo.y + LV_CIRC_OCT5_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT7_X(aa_p) + i, rt_origo.y + LV_CIRC_OCT7_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if(LV_CIRC_OCT1_X(aa_p) - 1 != LV_CIRC_OCT2_X(aa_p) + i) {
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rb_origo.x + LV_CIRC_OCT2_X(aa_p) + i, rb_origo.y + LV_CIRC_OCT2_Y(aa_p) - 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_BOTTOM) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lb_origo.x + LV_CIRC_OCT4_X(aa_p) + 1, lb_origo.y + LV_CIRC_OCT4_Y(aa_p) + i, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_LEFT)) {
- lv_draw_px(lt_origo.x + LV_CIRC_OCT6_X(aa_p) - i, lt_origo.y + LV_CIRC_OCT6_Y(aa_p) + 1, mask,
- style->body.border.color, aa_opa);
- }
-
- if((part & LV_BORDER_TOP) && (part & LV_BORDER_RIGHT)) {
- lv_draw_px(rt_origo.x + LV_CIRC_OCT8_X(aa_p) - 1, rt_origo.y + LV_CIRC_OCT8_Y(aa_p) - i, mask,
- style->body.border.color, aa_opa);
+ if(va.y1 <= va.y2) {
+ for(x = a.x1; x < a.x2; x++) {
+ if(x > coords->x2) {
+ lv_opa_t opa_tmp = sh_buf_tmp[x - a.x1 + first_px];
+ if(opa_tmp != LV_OPA_COVER || opa != LV_OPA_COVER) opa_tmp = (opa * opa_tmp) >> 8;
+ lv_blend_fill(clip, &va,
+ style->body.shadow.color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa_tmp, style->body.shadow.blend_mode);
}
+ va.x1++;
+ va.x2++;
}
}
}
-#endif
-}
+ else {
+ for(y = corner_size; y < lv_area_get_height(&sh_area) - corner_size; y++) {
+ memcpy(mask_buf, sh_buf_tmp, corner_size);
+ mask_res = lv_draw_mask_apply(mask_buf + first_px, a.x1, a.y1, lv_area_get_width(&a));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask_res = LV_DRAW_MASK_RES_CHANGED;
-#if LV_USE_SHADOW
-
-/**
- * Draw a shadow
- * @param rect pointer to rectangle object
- * @param mask pointer to a mask area (from the design functions)
- * @param opa_scale scale down all opacities by the factor
- */
-static void lv_draw_shadow(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- /* If mask is in the middle of cords do not draw shadow*/
- lv_coord_t radius = style->body.radius;
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
- radius = lv_draw_cont_radius_corr(radius, width, height);
- lv_area_t area_tmp;
-
- /*Check horizontally without radius*/
- lv_area_copy(&area_tmp, coords);
- area_tmp.x1 += radius;
- area_tmp.x2 -= radius;
- if(lv_area_is_in(mask, &area_tmp) != false) return;
-
- /*Check vertically without radius*/
- lv_area_copy(&area_tmp, coords);
- area_tmp.y1 += radius;
- area_tmp.y2 -= radius;
- if(lv_area_is_in(mask, &area_tmp) != false) return;
-
- if(style->body.shadow.type == LV_SHADOW_FULL) {
- lv_draw_shadow_full(coords, mask, style, opa_scale);
- } else if(style->body.shadow.type == LV_SHADOW_BOTTOM) {
- lv_draw_shadow_bottom(coords, mask, style, opa_scale);
- }
-}
-
-static void lv_draw_shadow_full(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
-
- /* KNOWN ISSUE
- * The algorithm calculates the shadow only above the middle point of the radius (speaking about
- * the left top corner). It causes an error because it doesn't consider how long the straight
- * edge is which effects the value of bottom of the corner shadow. In addition the straight
- * shadow is drawn from the middles point of the radius however the ends of the straight parts
- * still should be effected by the corner shadow. It also causes an issue in opacity. A smaller
- * radius means smaller average shadow opacity. The solution should be to start `line` from `-
- * swidth` and handle if the straight part is short (or zero) and the value is taken from the
- * other corner. `col` also should start from `- swidth`
- */
-
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
-
- lv_coord_t radius = style->body.radius;
- lv_coord_t swidth = style->body.shadow.width;
-
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
-
- radius += aa;
-
- /*Allocate a draw buffer the buffer required to draw the shadow*/
- int16_t filter_width = 2 * swidth + 1;
- uint32_t curve_x_size = ((radius + swidth + 1) + 3) & ~0x3; /*Round to 4*/
- curve_x_size *= sizeof(lv_coord_t);
- uint32_t line_1d_blur_size = (filter_width + 3) & ~0x3; /*Round to 4*/
- line_1d_blur_size *= sizeof(uint32_t);
- uint32_t line_2d_blur_size = ((radius + swidth + 1) + 3) & ~0x3; /*Round to 4*/
- line_2d_blur_size *= sizeof(lv_opa_t);
-
- uint8_t * draw_buf = lv_draw_get_buf(curve_x_size + line_1d_blur_size + line_2d_blur_size);
-
- /*Divide the draw buffer*/
- lv_coord_t * curve_x = (lv_coord_t *)&draw_buf[0]; /*Stores the 'x' coordinates of a quarter circle.*/
- uint32_t * line_1d_blur = (uint32_t *)&draw_buf[curve_x_size];
- lv_opa_t * line_2d_blur = (lv_opa_t *)&draw_buf[curve_x_size + line_1d_blur_size];
-
- memset(curve_x, 0, curve_x_size);
- lv_point_t circ;
- lv_coord_t circ_tmp;
- lv_circ_init(&circ, &circ_tmp, radius);
- while(lv_circ_cont(&circ)) {
- curve_x[LV_CIRC_OCT1_Y(circ)] = LV_CIRC_OCT1_X(circ);
- curve_x[LV_CIRC_OCT2_Y(circ)] = LV_CIRC_OCT2_X(circ);
- lv_circ_next(&circ, &circ_tmp);
- }
- int16_t line;
- /*1D Blur horizontally*/
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
- for(line = 0; line < filter_width; line++) {
- line_1d_blur[line] = (uint32_t)((uint32_t)(filter_width - line) * (opa * 2) << SHADOW_OPA_EXTRA_PRECISION) /
- (filter_width * filter_width);
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, mask_buf+first_px, mask_res, opa, style->body.shadow.blend_mode);
+ a.y1++;
+ a.y2++;
+ }
}
- uint16_t col;
+ /*Invert the shadow corner buffer and draw the corners on the left*/
+ sh_buf_tmp = sh_buf ;
+ for(y = 0; y < corner_size; y++) {
+ for(x = 0; x < corner_size / 2; x++) {
+ lv_opa_t tmp = sh_buf_tmp[x];
+ sh_buf_tmp[x] = sh_buf_tmp[corner_size - x - 1];
+ sh_buf_tmp[corner_size - x - 1] = tmp;
+ }
+ sh_buf_tmp += corner_size;
+ }
- lv_point_t point_rt;
- lv_point_t point_rb;
- lv_point_t point_lt;
- lv_point_t point_lb;
- lv_point_t ofs_rb;
- lv_point_t ofs_rt;
- lv_point_t ofs_lb;
- lv_point_t ofs_lt;
- ofs_rb.x = coords->x2 - radius - aa;
- ofs_rb.y = coords->y2 - radius - aa;
+ /*Draw the top left corner*/
+ a.x1 = sh_area.x1;
+ a.x2 = a.x1 + corner_size - 1;
+ a.y1 = sh_area.y1;
+ a.y2 = a.y1;
- ofs_rt.x = coords->x2 - radius - aa;
- ofs_rt.y = coords->y1 + radius + aa;
+ if(a.x2 > sh_area.x1 + lv_area_get_width(&sh_area)/2 - 1) {
+ a.x2 = sh_area.x1 + lv_area_get_width(&sh_area)/2 -1 ;
+ }
- ofs_lb.x = coords->x1 + radius + aa;
- ofs_lb.y = coords->y2 - radius - aa;
+ first_px = 0;
+ if(disp_area->x1 >= a.x1) {
+ first_px = disp_area->x1 - a.x1;
+ a.x1 += first_px;
+ }
- ofs_lt.x = coords->x1 + radius + aa;
- ofs_lt.y = coords->y1 + radius + aa;
- bool line_ready;
- for(line = 0; line <= radius + swidth; line++) { /*Check all rows and make the 1D blur to 2D*/
- line_ready = false;
- for(col = 0; col <= radius + swidth; col++) { /*Check all pixels in a 1D blur line (from the origo to last
- shadow pixel (radius + swidth))*/
+ sh_buf_tmp = sh_buf ;
+ for(y = 0; y < corner_size - ver_mid_dist + ver_mid_corr; y++) {
+ memcpy(mask_buf, sh_buf_tmp, corner_size);
+ mask_res = lv_draw_mask_apply(mask_buf + first_px, a.x1, a.y1, lv_area_get_width(&a));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask_res = LV_DRAW_MASK_RES_CHANGED;
- /*Sum the opacities from the lines above and below this 'row'*/
- int16_t line_rel;
- uint32_t px_opa_sum = 0;
- for(line_rel = -swidth; line_rel <= swidth; line_rel++) {
- /*Get the relative x position of the 'line_rel' to 'line'*/
- int16_t col_rel;
- if(line + line_rel < 0) { /*Below the radius, here is the blur of the edge */
- col_rel = radius - curve_x[line] - col;
- } else if(line + line_rel > radius) { /*Above the radius, here won't be more 1D blur*/
- break;
- } else { /*Blur from the curve*/
- col_rel = curve_x[line + line_rel] - curve_x[line] - col;
- }
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, mask_buf + first_px, mask_res, opa, style->body.shadow.blend_mode);
+ a.y1++;
+ a.y2++;
+ sh_buf_tmp += corner_size;
+ }
- /*Add the value of the 1D blur on 'col_rel' position*/
- if(col_rel < -swidth) { /*Outside of the blurred area. */
- if(line_rel == -swidth)
- line_ready = true; /*If no data even on the very first line then it wont't
- be anything else in this line*/
- break; /*Break anyway because only smaller 'col_rel' values will come */
- } else if(col_rel > swidth)
- px_opa_sum += line_1d_blur[0]; /*Inside the not blurred area*/
- else
- px_opa_sum += line_1d_blur[swidth - col_rel]; /*On the 1D blur (+ swidth to align to the center)*/
- }
+ /*Draw the bottom left corner*/
+ a.y1 = sh_area.y2;
+ a.y2 = a.y1;
- line_2d_blur[col] = px_opa_sum >> SHADOW_OPA_EXTRA_PRECISION;
- if(line_ready) {
- col++; /*To make this line to the last one ( drawing will go to '< col')*/
- break;
+ sh_buf_tmp = sh_buf ;
+
+ for(y = 0; y < corner_size - ver_mid_dist; y++) {
+ memcpy(mask_buf, sh_buf_tmp, corner_size);
+ mask_res = lv_draw_mask_apply(mask_buf + first_px, a.x1, a.y1, lv_area_get_width(&a));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask_res = LV_DRAW_MASK_RES_CHANGED;
+
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, mask_buf + first_px, mask_res, opa, style->body.shadow.blend_mode);
+ a.y1--;
+ a.y2--;
+ sh_buf_tmp += corner_size;
+ }
+
+ /*Fill the left side*/
+ a.y1 = sh_area.y1+corner_size;
+ a.y2 = a.y1;
+
+ sh_buf_tmp = sh_buf + corner_size * (corner_size - 1);
+
+ if(simple_mode) {
+ /*Draw vertical lines*/
+ lv_area_t va;
+ va.x1 = a.x1;
+ va.x2 = a.x1;
+ va.y1 = sh_area.y1 + corner_size;
+ va.y2 = sh_area.y2 - corner_size;
+
+ if(va.y1 <= va.y2) {
+ for(x = a.x1; x < coords->x1; x++) {
+ lv_opa_t opa_tmp = sh_buf_tmp[x - a.x1 + first_px];
+ if(opa_tmp != LV_OPA_COVER || opa != LV_OPA_COVER) opa_tmp = (opa * opa_tmp) >> 8;
+ lv_blend_fill(clip, &va,
+ style->body.shadow.color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa_tmp, style->body.shadow.blend_mode);
+ va.x1++;
+ va.x2++;
}
}
+ }
+ else {
+ for(y = corner_size; y < lv_area_get_height(&sh_area) - corner_size; y++) {
+ memcpy(mask_buf, sh_buf_tmp, corner_size);
+ mask_res = lv_draw_mask_apply(mask_buf + first_px, a.x1, a.y1, lv_area_get_width(&a));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask_res = LV_DRAW_MASK_RES_CHANGED;
- /*Flush the line*/
- point_rt.x = curve_x[line] + ofs_rt.x + 1;
- point_rt.y = ofs_rt.y - line;
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, mask_buf + first_px, mask_res, opa, style->body.shadow.blend_mode);
+ a.y1++;
+ a.y2++;
+ }
+ }
- point_rb.x = curve_x[line] + ofs_rb.x + 1;
- point_rb.y = ofs_rb.y + line;
+ /*Fill the top side*/
- point_lt.x = ofs_lt.x - curve_x[line] - 1;
- point_lt.y = ofs_lt.y - line;
+ a.x1 = sh_area.x1 + corner_size;
+ a.x2 = sh_area.x2 - corner_size;
+ a.y1 = sh_area.y1;
+ a.y2 = a.y1;
- point_lb.x = ofs_lb.x - curve_x[line] - 1;
- point_lb.y = ofs_lb.y + line;
- uint16_t d;
- for(d = 1; d < col; d++) {
+ first_px = 0;
+ if(disp_area->x1 > a.x1) {
+ first_px = disp_area->x1 - a.x1;
+ a.x1 += first_px;
+ }
- if(point_lt.x < ofs_lt.x && point_lt.y < ofs_lt.y) {
- lv_draw_px(point_lt.x, point_lt.y, mask, style->body.shadow.color, line_2d_blur[d]);
- }
+ if(a.x1 <= a.x2) {
- if(point_lb.x < ofs_lb.x && point_lb.y > ofs_lb.y) {
- lv_draw_px(point_lb.x, point_lb.y, mask, style->body.shadow.color, line_2d_blur[d]);
- }
+ sh_buf_tmp = sh_buf + corner_size - 1;
- if(point_rt.x > ofs_rt.x && point_rt.y < ofs_rt.y) {
- lv_draw_px(point_rt.x, point_rt.y, mask, style->body.shadow.color, line_2d_blur[d]);
- }
-
- if(point_rb.x > ofs_rb.x && point_rb.y > ofs_rb.y) {
- lv_draw_px(point_rb.x, point_rb.y, mask, style->body.shadow.color, line_2d_blur[d]);
- }
-
- point_rb.x++;
- point_lb.x--;
-
- point_rt.x++;
- point_lt.x--;
+ y_max = corner_size - ver_mid_dist;
+ if(simple_mode) {
+ y_max = sw / 2 + 1;
+ if(y_max > corner_size - ver_mid_dist) y_max = corner_size - ver_mid_dist;
}
- /* Put the first line to the edges too.
- * It is not correct because blur should be done below the corner too
- * but is is simple, fast and gives a good enough result*/
- if(line == 0) lv_draw_shadow_full_straight(coords, mask, style, line_2d_blur);
- }
-}
+ for(y = 0; y < y_max; y++) {
+ if(simple_mode == false) {
+ memset(mask_buf, sh_buf_tmp[0], lv_area_get_width(&a));
+ mask_res = lv_draw_mask_apply(mask_buf, a.x1, a.y1, lv_area_get_width(&a));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask_res = LV_DRAW_MASK_RES_CHANGED;
-static void lv_draw_shadow_bottom(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- lv_opa_t opa_scale)
-{
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
- lv_coord_t radius = style->body.radius;
- lv_coord_t swidth = style->body.shadow.width;
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
-
- radius = lv_draw_cont_radius_corr(radius, width, height);
- radius += aa * SHADOW_BOTTOM_AA_EXTRA_RADIUS;
- swidth += aa;
-
- uint32_t curve_x_size = ((radius + 1) + 3) & ~0x3; /*Round to 4*/
- curve_x_size *= sizeof(lv_coord_t);
- lv_opa_t line_1d_blur_size = (swidth + 3) & ~0x3; /*Round to 4*/
- line_1d_blur_size *= sizeof(lv_opa_t);
-
- uint8_t * draw_buf = lv_draw_get_buf(curve_x_size + line_1d_blur_size);
-
- /*Divide the draw buffer*/
- lv_coord_t * curve_x = (lv_coord_t *)&draw_buf[0]; /*Stores the 'x' coordinates of a quarter circle.*/
- lv_opa_t * line_1d_blur = (lv_opa_t *)&draw_buf[curve_x_size];
-
- lv_point_t circ;
- lv_coord_t circ_tmp;
- lv_circ_init(&circ, &circ_tmp, radius);
- while(lv_circ_cont(&circ)) {
- curve_x[LV_CIRC_OCT1_Y(circ)] = LV_CIRC_OCT1_X(circ);
- curve_x[LV_CIRC_OCT2_Y(circ)] = LV_CIRC_OCT2_X(circ);
- lv_circ_next(&circ, &circ_tmp);
- }
-
- int16_t col;
-
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
- for(col = 0; col < swidth; col++) {
- line_1d_blur[col] = (uint32_t)((uint32_t)(swidth - col) * opa / 2) / (swidth);
- }
-
- lv_point_t point_l;
- lv_point_t point_r;
- lv_area_t area_mid;
- lv_point_t ofs_l;
- lv_point_t ofs_r;
-
- ofs_l.x = coords->x1 + radius;
- ofs_l.y = coords->y2 - radius + 1 - aa;
-
- ofs_r.x = coords->x2 - radius;
- ofs_r.y = coords->y2 - radius + 1 - aa;
-
- for(col = 0; col <= radius; col++) {
- point_l.x = ofs_l.x - col;
- point_l.y = ofs_l.y + curve_x[col];
-
- point_r.x = ofs_r.x + col;
- point_r.y = ofs_r.y + curve_x[col];
-
- lv_opa_t px_opa;
- int16_t diff = col == 0 ? 0 : curve_x[col - 1] - curve_x[col];
- uint16_t d;
- for(d = 0; d < swidth; d++) {
- /*When stepping a pixel in y calculate the average with the pixel from the prev. column
- * to make a blur */
- if(diff == 0) {
- px_opa = line_1d_blur[d];
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, mask_buf, mask_res, opa, style->body.shadow.blend_mode);
} else {
- px_opa = (uint16_t)((uint16_t)line_1d_blur[d] + line_1d_blur[d - diff]) >> 1;
- }
- lv_draw_px(point_l.x, point_l.y, mask, style->body.shadow.color, px_opa);
- point_l.y++;
- /*Don't overdraw the pixel on the middle*/
- if(point_r.x > ofs_l.x) {
- lv_draw_px(point_r.x, point_r.y, mask, style->body.shadow.color, px_opa);
+ lv_opa_t opa_tmp = sh_buf_tmp[0];
+ if(opa_tmp != LV_OPA_COVER || opa != LV_OPA_COVER) opa_tmp = (opa * opa_tmp) >> 8;
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa_tmp, style->body.shadow.blend_mode);
}
- point_r.y++;
+
+ a.y1++;
+ a.y2++;
+ sh_buf_tmp += corner_size;
+ }
+
+ /*Fill the bottom side*/
+ lv_coord_t y_min = simple_mode ? (corner_size - (sh_area.y2 - coords->y2)) : ver_mid_dist;
+ if(y_min < 0) y_min = 0;
+ sh_buf_tmp = sh_buf + corner_size * (corner_size - y_min - 1 ) + corner_size - 1;
+
+ a.y1 = sh_area.y2 - corner_size + 1 + y_min;
+ a.y2 = a.y1;
+
+ for(y = y_min; y < corner_size; y++) {
+ if(simple_mode == false) {
+ memset(mask_buf, sh_buf_tmp[0], lv_area_get_width(&a));
+ mask_res = lv_draw_mask_apply(mask_buf, a.x1, a.y1, lv_area_get_width(&a));
+ if(mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask_res = LV_DRAW_MASK_RES_CHANGED;
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, mask_buf, mask_res, opa, style->body.shadow.blend_mode);
+ } else {
+ lv_opa_t opa_tmp = sh_buf_tmp[0];
+ if(opa_tmp != LV_OPA_COVER || opa != LV_OPA_COVER) opa_tmp = (opa * opa_tmp) >> 8;
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, NULL, LV_DRAW_MASK_RES_FULL_COVER, opa_tmp, style->body.shadow.blend_mode);
+ }
+
+ a.y1++;
+ a.y2++;
+ sh_buf_tmp -= corner_size;
}
}
- area_mid.x1 = ofs_l.x + 1;
- area_mid.y1 = ofs_l.y + radius;
- area_mid.x2 = ofs_r.x - 1;
- area_mid.y2 = area_mid.y1;
+ /*Finally fill the middle area*/
+ if(simple_mode == false) {
+ a.y1 = sh_area.y1 + corner_size;
+ a.y2 = a.y1;
+ if(a.x1 <= a.x2) {
+ for(y = 0; y < lv_area_get_height(&sh_area) - corner_size * 2; y++) {
+ memset(mask_buf, 0xFF, lv_area_get_width(&a));
+ mask_res = lv_draw_mask_apply(mask_buf, a.x1, a.y1, lv_area_get_width(&a));
+ lv_blend_fill(clip, &a,
+ style->body.shadow.color, mask_buf, mask_res, opa, style->body.shadow.blend_mode);
- uint16_t d;
- for(d = 0; d < swidth; d++) {
- lv_draw_fill(&area_mid, mask, style->body.shadow.color, line_1d_blur[d]);
- area_mid.y1++;
- area_mid.y2++;
+ a.y1++;
+ a.y2++;
+ }
+ }
}
+
+ lv_draw_mask_remove_id(mask_rout_id);
+ lv_mem_buf_release(mask_buf);
+ lv_mem_buf_release(sh_buf);
}
-static void lv_draw_shadow_full_straight(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style,
- const lv_opa_t * map)
+static void shadow_draw_corner_buf(const lv_area_t * coords, lv_opa_t * sh_buf, lv_coord_t sw, lv_coord_t r)
{
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
- lv_coord_t radius = style->body.radius;
- lv_coord_t swidth = style->body.shadow.width;
- lv_coord_t width = lv_area_get_width(coords);
- lv_coord_t height = lv_area_get_height(coords);
+ lv_coord_t sw_ori = sw;
+ lv_coord_t size = sw_ori + r;
- radius = lv_draw_cont_radius_corr(radius, width, height);
- radius += aa;
+ lv_area_t sh_area;
+ lv_area_copy(&sh_area, coords);
+ sh_area.x2 = sw / 2 + r -1 - (sw & 1 ? 0 : 1);
+ sh_area.y1 = sw / 2 + 1;
- lv_area_t right_area;
- right_area.x1 = coords->x2 + 1 - aa;
- right_area.y1 = coords->y1 + radius + aa;
- right_area.x2 = right_area.x1;
- right_area.y2 = coords->y2 - radius - aa;
+ sh_area.x1 = sh_area.x2 - lv_area_get_width(coords);
+ sh_area.y2 = sh_area.y1 + lv_area_get_height(coords);
- lv_area_t left_area;
- left_area.x1 = coords->x1 - 1 + aa;
- left_area.y1 = coords->y1 + radius + aa;
- left_area.x2 = left_area.x1;
- left_area.y2 = coords->y2 - radius - aa;
-
- lv_area_t top_area;
- top_area.x1 = coords->x1 + radius + aa;
- top_area.y1 = coords->y1 - 1 + aa;
- top_area.x2 = coords->x2 - radius - aa;
- top_area.y2 = top_area.y1;
-
- lv_area_t bottom_area;
- bottom_area.x1 = coords->x1 + radius + aa;
- bottom_area.y1 = coords->y2 + 1 - aa;
- bottom_area.x2 = coords->x2 - radius - aa;
- bottom_area.y2 = bottom_area.y1;
-
- lv_opa_t opa_act;
- int16_t d;
- for(d = 1 /*+ LV_ANTIALIAS*/; d <= swidth /* - LV_ANTIALIAS*/; d++) {
- opa_act = map[d];
-
- lv_draw_fill(&right_area, mask, style->body.shadow.color, opa_act);
- right_area.x1++;
- right_area.x2++;
-
- lv_draw_fill(&left_area, mask, style->body.shadow.color, opa_act);
- left_area.x1--;
- left_area.x2--;
-
- lv_draw_fill(&top_area, mask, style->body.shadow.color, opa_act);
- top_area.y1--;
- top_area.y2--;
-
- lv_draw_fill(&bottom_area, mask, style->body.shadow.color, opa_act);
- bottom_area.y1++;
- bottom_area.y2++;
- }
-}
+ lv_draw_mask_radius_param_t mask_param;
+ lv_draw_mask_radius_init(&mask_param, &sh_area, r, false);
+#if SHADOW_ENHANCE
+ /*Set half shadow width width because blur will be repeated*/
+ if(sw_ori == 1) sw = 1;
+ else if(sw_ori == 2) sw = 2;
+ else if(sw_ori == 3) sw = 2;
+ else sw = sw_ori >> 1;
#endif
-static uint16_t lv_draw_cont_radius_corr(uint16_t r, lv_coord_t w, lv_coord_t h)
+ lv_draw_mask_res_t mask_res;
+ lv_coord_t y;
+ lv_opa_t * mask_line = lv_mem_buf_get(size);
+ uint16_t * sh_ups_buf = lv_mem_buf_get(size * size * sizeof(uint16_t));
+ uint16_t * sh_ups_tmp_buf = sh_ups_buf;
+ for(y = 0; y < size; y++) {
+ memset(mask_line, 0xFF, size);
+ mask_res = mask_param.dsc.cb(mask_line, 0, y, size, &mask_param);
+ if(mask_res == LV_DRAW_MASK_RES_FULL_TRANSP) {
+ memset(sh_ups_tmp_buf, 0x00, size * sizeof(sh_ups_buf[0]));
+ } else {
+ lv_coord_t i;
+ sh_ups_tmp_buf[0] = (mask_line[0] << SHADOW_UPSACALE_SHIFT) / sw;
+ for(i = 1; i < size; i++) {
+ if(mask_line[i] == mask_line[i-1]) sh_ups_tmp_buf[i] = sh_ups_tmp_buf[i-1];
+ else sh_ups_tmp_buf[i] = (mask_line[i] << SHADOW_UPSACALE_SHIFT) / sw;
+ }
+ }
+
+ sh_ups_tmp_buf += size;
+ }
+ lv_mem_buf_release(mask_line);
+
+ // uint32_t k;
+ // for(k = 0; k < size * size; k++) {
+ // sh_buf[k] = (sh_ups_buf[k] * sw) >> SHADOW_UPSACALE_SHIFT ;
+ // }
+ // return;
+
+ if(sw == 1) {
+ lv_coord_t i;
+ for(i = 0; i < size * size; i++) {
+ sh_buf[i] = (sh_ups_buf[i] >> SHADOW_UPSACALE_SHIFT);
+ }
+ lv_mem_buf_release(sh_ups_buf);
+ return;
+ }
+
+ shadow_blur_corner(size, sw, sh_buf, sh_ups_buf);
+
+#if SHADOW_ENHANCE
+ sw = sw_ori - sw;
+ if(sw <= 1) {
+ lv_mem_buf_release(sh_ups_buf);
+ return;
+ }
+
+ uint32_t i;
+ sh_ups_buf[0] = (sh_buf[0] << SHADOW_UPSACALE_SHIFT) / sw;
+ for(i = 1; i < (uint32_t) size * size; i++) {
+ if(sh_buf[i] == sh_buf[i-1]) sh_ups_buf[i] = sh_ups_buf[i-1];
+ else sh_ups_buf[i] = (sh_buf[i] << SHADOW_UPSACALE_SHIFT) / sw;
+ }
+
+ shadow_blur_corner(size, sw, sh_buf, sh_ups_buf);
+#endif
+
+ lv_mem_buf_release(sh_ups_buf);
+
+}
+
+static void shadow_blur_corner(lv_coord_t size, lv_coord_t sw, lv_opa_t * res_buf, uint16_t * sh_ups_buf)
{
- bool aa = lv_disp_get_antialiasing(lv_refr_get_disp_refreshing());
+ lv_coord_t s_left = sw >> 1;
+ lv_coord_t s_right = (sw >> 1);
+ if((sw & 1) == 0) s_left--;
- if(r >= (w >> 1)) {
- r = (w >> 1);
- if(r != 0) r--;
- }
- if(r >= (h >> 1)) {
- r = (h >> 1);
- if(r != 0) r--;
+ /*Horizontal blur*/
+ uint16_t * sh_ups_hor_buf = lv_mem_buf_get(size * size * sizeof(uint16_t));
+ uint16_t * sh_ups_hor_buf_tmp;
+
+ lv_coord_t x;
+ lv_coord_t y;
+
+ uint16_t * sh_ups_tmp_buf = sh_ups_buf;
+ sh_ups_hor_buf_tmp = sh_ups_hor_buf;
+
+ for(y = 0; y < size; y++) {
+ int32_t v = sh_ups_tmp_buf[size-1] * sw;
+ for(x = size - 1; x >=0; x--) {
+ sh_ups_hor_buf_tmp[x] = v;
+
+ /*Forget the right pixel*/
+ uint32_t right_val = 0;
+ if(x + s_right < size) right_val = sh_ups_tmp_buf[x + s_right];
+ v -= right_val;
+
+ /*Add the left pixel*/
+ uint32_t left_val;
+ if(x - s_left - 1 < 0) left_val = sh_ups_tmp_buf[0];
+ else left_val = sh_ups_tmp_buf[x - s_left - 1];
+ v += left_val;
+
+ }
+ sh_ups_tmp_buf += size;
+ sh_ups_hor_buf_tmp += size;
}
- if(r > 0) r -= aa;
+ /*Vertical blur*/
+ uint32_t i;
+ sh_ups_hor_buf[0] = sh_ups_hor_buf[0] / sw;
+ for(i = 1; i < (uint32_t)size * size; i++) {
+ if(sh_ups_hor_buf[i] == sh_ups_hor_buf[i-1]) sh_ups_hor_buf[i] = sh_ups_hor_buf[i-1];
+ else sh_ups_hor_buf[i] = sh_ups_hor_buf[i] / sw;
+ }
- return r;
+
+
+ for(x = 0; x < size; x++) {
+ sh_ups_hor_buf_tmp = &sh_ups_hor_buf[x];
+ lv_opa_t * sh_buf_tmp = &res_buf[x];
+ int32_t v = sh_ups_hor_buf_tmp[0] * sw;
+ for(y = 0; y < size ; y++, sh_ups_hor_buf_tmp += size, sh_buf_tmp += size) {
+ sh_buf_tmp[0] = v < 0 ? 0 : (v >> SHADOW_UPSACALE_SHIFT);
+
+ /*Forget the top pixel*/
+ uint32_t top_val;
+ if(y - s_right <= 0) top_val = sh_ups_hor_buf_tmp[0];
+ else top_val = sh_ups_hor_buf[(y - s_right) * size + x];
+ v -= top_val;
+
+ /*Add the bottom pixel*/
+ uint32_t bottom_val;
+ if(y + s_left + 1 < size) bottom_val = sh_ups_hor_buf[(y + s_left + 1) * size + x];
+ else bottom_val = sh_ups_hor_buf[(size - 1) * size + x];
+ v += bottom_val;
+ }
+ }
+
+ lv_mem_buf_release(sh_ups_hor_buf);
}
-#if LV_ANTIALIAS
-
-/**
- * Approximate the opacity for anti-aliasing.
- * Used the first segment of a circle which is the longest and have the most non-linearity (cos)
- * @param seg length of the line segment
- * @param px_id index of pixel on the line segment
- * @param line_opa opacity of the lien (it will be the max opacity)
- * @return the desired opacity of the pixel
- */
-static lv_opa_t antialias_get_opa_circ(lv_coord_t seg, lv_coord_t px_id, lv_opa_t opa)
-{
- /*Empirical non-linear values anti-aliasing values*/
- static const lv_opa_t opa_map2[2] = {210, 80};
- static const lv_opa_t opa_map3[3] = {230, 150, 60};
- static const lv_opa_t opa_map4[4] = {235, 185, 125, 50};
- static const lv_opa_t opa_map8[8] = {250, 242, 219, 191, 158, 117, 76, 40};
-
-#if CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD < 1
- if(seg == 1) return 170;
-#endif
-
-#if CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD < 2
- if(seg == 2) return (opa_map2[px_id] * opa) >> 8;
-#endif
-
-#if CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD < 3
- if(seg == 3) return (opa_map3[px_id] * opa) >> 8;
-#endif
-
-#if CIRCLE_AA_NON_LINEAR_OPA_THRESHOLD < 4
- if(seg == 4) return (opa_map4[px_id] * opa) >> 8;
-#endif
-
- uint8_t id = (uint32_t)((uint32_t)px_id * (sizeof(opa_map8) - 1)) / (seg - 1);
- return (uint32_t)((uint32_t)opa_map8[id] * opa) >> 8;
-}
-
-#endif
diff --git a/src/lv_draw/lv_draw_rect.h b/src/lv_draw/lv_draw_rect.h
index 852b72912..e3007addf 100644
--- a/src/lv_draw/lv_draw_rect.h
+++ b/src/lv_draw/lv_draw_rect.h
@@ -36,6 +36,15 @@ extern "C" {
*/
void lv_draw_rect(const lv_area_t * coords, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale);
+/**
+ * Draw a pixel
+ * @param point the coordinates of the point to draw
+ * @param mask the pixel will be drawn only in this mask
+ * @param style pointer to a style
+ * @param opa_scale scale down the opacity by the factor
+ */
+void lv_draw_px(const lv_point_t * point, const lv_area_t * clip_area, const lv_style_t * style, lv_opa_t opa_scale);
+
/**********************
* MACROS
**********************/
diff --git a/src/lv_draw/lv_draw_triangle.c b/src/lv_draw/lv_draw_triangle.c
index e06af2b18..0d9b91bf4 100644
--- a/src/lv_draw/lv_draw_triangle.c
+++ b/src/lv_draw/lv_draw_triangle.c
@@ -8,6 +8,7 @@
*********************/
#include "lv_draw_triangle.h"
#include "../lv_misc/lv_math.h"
+#include "../lv_misc/lv_mem.h"
/*********************
* DEFINES
@@ -20,9 +21,6 @@
/**********************
* STATIC PROTOTYPES
**********************/
-void tri_draw_flat(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa);
-void tri_draw_tall(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa);
-static void point_swap(lv_point_t * p1, lv_point_t * p2);
/**********************
* STATIC VARIABLES
@@ -39,306 +37,131 @@ static void point_swap(lv_point_t * p1, lv_point_t * p2);
/**
*
* @param points pointer to an array with 3 points
- * @param mask the triangle will be drawn only in this mask
+ * @param clip_area the triangle will be drawn only in this area
* @param style style for of the triangle
* @param opa_scale scale down all opacities by the factor (0..255)
*/
-void lv_draw_triangle(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale)
+void lv_draw_triangle(const lv_point_t * points, const lv_area_t * clip_area, const lv_style_t * style, lv_opa_t opa_scale)
{
-
- /*Return is the triangle is degenerated*/
- if(points[0].x == points[1].x && points[0].y == points[1].y) return;
- if(points[1].x == points[2].x && points[1].y == points[2].y) return;
- if(points[0].x == points[2].x && points[0].y == points[2].y) return;
-
- if(points[0].x == points[1].x && points[1].x == points[2].x) return;
- if(points[0].y == points[1].y && points[1].y == points[2].y) return;
-
- lv_opa_t opa = opa_scale == LV_OPA_COVER ? style->body.opa : (uint16_t)((uint16_t)style->body.opa * opa_scale) >> 8;
-
- /*Is the triangle flat or tall?*/
- lv_coord_t x_min = LV_MATH_MIN(LV_MATH_MIN(points[0].x, points[1].x), points[2].x);
- lv_coord_t x_max = LV_MATH_MAX(LV_MATH_MAX(points[0].x, points[1].x), points[2].x);
- lv_coord_t y_min = LV_MATH_MIN(LV_MATH_MIN(points[0].y, points[1].y), points[2].y);
- lv_coord_t y_max = LV_MATH_MAX(LV_MATH_MAX(points[0].y, points[1].y), points[2].y);
-
- /* Draw the tall rectangles from vertical lines
- * and from the flat triangles from horizontal lines
- * to minimize the number of lines.
- * Some pixels are overdrawn on the common edges of the triangles
- * so use it only if the triangle has no opacity*/
-
- /* Draw from horizontal lines*/
- if(x_max - x_min < y_max - y_min) {
- tri_draw_tall(points, mask, style, opa);
- }
- /*Else flat so draw from vertical lines*/
- else {
- tri_draw_flat(points, mask, style, opa);
- }
+ lv_draw_polygon(points, 3, clip_area, style, opa_scale);
}
/**
- * Draw a polygon from triangles. Only convex polygons are supported
+ * Draw a polygon. Only convex polygons are supported
* @param points an array of points
* @param point_cnt number of points
- * @param mask polygon will be drawn only in this mask
+ * @param clip_area polygon will be drawn only in this area
* @param style style of the polygon
* @param opa_scale scale down all opacities by the factor (0..255)
*/
-void lv_draw_polygon(const lv_point_t * points, uint32_t point_cnt, const lv_area_t * mask, const lv_style_t * style,
+void lv_draw_polygon(const lv_point_t * points, uint16_t point_cnt, const lv_area_t * clip_area, const lv_style_t * style,
lv_opa_t opa_scale)
{
if(point_cnt < 3) return;
if(points == NULL) return;
- uint32_t i;
- lv_point_t tri[3];
- tri[0].x = points[0].x;
- tri[0].y = points[0].y;
- for(i = 0; i < point_cnt - 1; i++) {
- tri[1].x = points[i].x;
- tri[1].y = points[i].y;
- tri[2].x = points[i + 1].x;
- tri[2].y = points[i + 1].y;
- lv_draw_triangle(tri, mask, style, opa_scale);
+ int16_t i;
+ lv_area_t poly_mask = {.x1 = LV_COORD_MAX, .y1 = LV_COORD_MAX, .x2 = LV_COORD_MIN, .y2 = LV_COORD_MIN};
+
+ for(i = 0; i < point_cnt; i++) {
+ poly_mask.x1 = LV_MATH_MIN(poly_mask.x1, points[i].x);
+ poly_mask.y1 = LV_MATH_MIN(poly_mask.y1, points[i].y);
+ poly_mask.x2 = LV_MATH_MAX(poly_mask.x2, points[i].x);
+ poly_mask.y2 = LV_MATH_MAX(poly_mask.y2, points[i].y);
}
+
+
+ bool is_common;
+ is_common = lv_area_intersect(&poly_mask, &poly_mask, clip_area);
+ if(!is_common) return;
+
+ /*Find the lowest point*/
+ lv_coord_t y_min = points[0].y;
+ int16_t y_min_i = 0;
+
+ for(i = 1; i < point_cnt; i++) {
+ if(points[i].y < y_min) {
+ y_min = points[i].y;
+ y_min_i = i;
+ }
+ }
+
+ lv_draw_mask_line_param_t * mp = lv_mem_buf_get(sizeof(lv_draw_mask_line_param_t) * point_cnt);
+ lv_draw_mask_line_param_t * mp_next = mp;
+
+ int32_t i_prev_left = y_min_i;
+ int32_t i_prev_right = y_min_i;
+ int32_t i_next_left;
+ int32_t i_next_right;
+ uint32_t mask_cnt = 0;
+
+ /* Check if the order of points is inverted or not.
+ * The normal case is when the left point is on `y_min_i - 1`*/
+ i_next_left = y_min_i - 1;
+ if(i_next_left < 0) i_next_left = point_cnt + i_next_left;
+
+ i_next_right = y_min_i + 1;
+ if(i_next_right > point_cnt - 1) i_next_right = 0;
+
+ bool inv = false;
+ if(points[i_next_left].x > points[i_next_right].x && points[i_next_left].y < points[i_next_right].y) inv = true;
+
+ do {
+ if(!inv) {
+ i_next_left = i_prev_left - 1;
+ if(i_next_left < 0) i_next_left = point_cnt + i_next_left;
+
+ i_next_right = i_prev_right + 1;
+ if(i_next_right > point_cnt - 1) i_next_right = 0;
+ } else {
+ i_next_left = i_prev_left + 1;
+ if(i_next_left > point_cnt - 1) i_next_left = 0;
+
+ i_next_right = i_prev_right - 1;
+ if(i_next_right < 0) i_next_right = point_cnt + i_next_right;
+ }
+
+ if(points[i_next_left].y >= points[i_prev_left].y) {
+ if(points[i_next_left].y != points[i_prev_left].y &&
+ points[i_next_left].x != points[i_prev_left].x) {
+ lv_draw_mask_line_points_init(mp_next, points[i_prev_left].x, points[i_prev_left].y,
+ points[i_next_left].x, points[i_next_left].y,
+ LV_DRAW_MASK_LINE_SIDE_RIGHT);
+ lv_draw_mask_add(mp_next, mp);
+ mp_next++;
+ }
+ mask_cnt++;
+ i_prev_left = i_next_left;
+ }
+
+ if(mask_cnt == point_cnt) break;
+
+ if(points[i_next_right].y >= points[i_prev_right].y) {
+ if(points[i_next_right].y != points[i_prev_right].y &&
+ points[i_next_right].x != points[i_prev_right].x) {
+
+ lv_draw_mask_line_points_init(mp_next, points[i_prev_right].x, points[i_prev_right].y,
+ points[i_next_right].x, points[i_next_right].y,
+ LV_DRAW_MASK_LINE_SIDE_LEFT);
+ lv_draw_mask_add(mp_next, mp);
+ mp_next++;
+ }
+ mask_cnt++;
+ i_prev_right = i_next_right;
+ }
+
+ }while( mask_cnt < point_cnt);
+
+
+
+ lv_draw_rect(&poly_mask, &poly_mask, style, opa_scale);
+
+ lv_draw_mask_remove_custom(mp);
+
+ lv_mem_buf_release(mp);
+
}
/**********************
* STATIC FUNCTIONS
**********************/
-
-void tri_draw_flat(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa)
-{
- /*Return if the points are out of the mask*/
- if(points[0].x < mask->x1 && points[1].x < mask->x1 && points[2].x < mask->x1) {
- return;
- }
-
- if(points[0].x > mask->x2 && points[1].x > mask->x2 && points[2].x > mask->x2) {
- return;
- }
-
- if(points[0].y < mask->y1 && points[1].y < mask->y1 && points[2].y < mask->y1) {
- return;
- }
-
- if(points[0].y > mask->y2 && points[1].y > mask->y2 && points[2].y > mask->y2) {
- return;
- }
-
- lv_point_t tri[3];
-
- memcpy(tri, points, sizeof(tri));
-
- /*Sort the vertices according to their y coordinate (0: y max, 1: y mid, 2:y min)*/
- if(tri[1].y < tri[0].y) point_swap(&tri[1], &tri[0]);
- if(tri[2].y < tri[1].y) point_swap(&tri[2], &tri[1]);
- if(tri[1].y < tri[0].y) point_swap(&tri[1], &tri[0]);
-
- /*Draw the triangle*/
- lv_point_t edge1;
- lv_coord_t dx1 = LV_MATH_ABS(tri[0].x - tri[1].x);
- lv_coord_t sx1 = tri[0].x < tri[1].x ? 1 : -1;
- lv_coord_t dy1 = LV_MATH_ABS(tri[0].y - tri[1].y);
- lv_coord_t sy1 = tri[0].y < tri[1].y ? 1 : -1;
- lv_coord_t err1 = (dx1 > dy1 ? dx1 : -dy1) / 2;
- lv_coord_t err_tmp1;
-
- lv_point_t edge2;
- lv_coord_t dx2 = LV_MATH_ABS(tri[0].x - tri[2].x);
- lv_coord_t sx2 = tri[0].x < tri[2].x ? 1 : -1;
- lv_coord_t dy2 = LV_MATH_ABS(tri[0].y - tri[2].y);
- lv_coord_t sy2 = tri[0].y < tri[2].y ? 1 : -1;
- lv_coord_t err2 = (dx1 > dy2 ? dx2 : -dy2) / 2;
- lv_coord_t err_tmp2;
-
- lv_coord_t y1_tmp;
- lv_coord_t y2_tmp;
-
- edge1.x = tri[0].x;
- edge1.y = tri[0].y;
- edge2.x = tri[0].x;
- edge2.y = tri[0].y;
- lv_area_t act_area;
- lv_area_t draw_area;
-
- while(1) {
- act_area.x1 = edge1.x;
- act_area.x2 = edge2.x;
- act_area.y1 = edge1.y;
- act_area.y2 = edge2.y;
-
- /* Get the area of a line.
- * Adjust it a little bit to perfectly match (no redrawn pixels) with the adjacent triangles*/
- draw_area.x1 = LV_MATH_MIN(act_area.x1, act_area.x2) + 1;
- draw_area.x2 = LV_MATH_MAX(act_area.x1, act_area.x2);
- draw_area.y1 = LV_MATH_MIN(act_area.y1, act_area.y2) - 1;
- draw_area.y2 = LV_MATH_MAX(act_area.y1, act_area.y2) - 1;
-
- lv_draw_fill(&draw_area, mask, style->body.main_color, opa);
-
- /*Calc. the next point of edge1*/
- y1_tmp = edge1.y;
- do {
- if(edge1.x == tri[1].x && edge1.y == tri[1].y) {
-
- dx1 = LV_MATH_ABS(tri[1].x - tri[2].x);
- sx1 = tri[1].x < tri[2].x ? 1 : -1;
- dy1 = LV_MATH_ABS(tri[1].y - tri[2].y);
- sy1 = tri[1].y < tri[2].y ? 1 : -1;
- err1 = (dx1 > dy1 ? dx1 : -dy1) / 2;
- } else if(edge1.x == tri[2].x && edge1.y == tri[2].y) {
- return;
- }
- err_tmp1 = err1;
- if(err_tmp1 > -dx1) {
- err1 -= dy1;
- edge1.x += sx1;
- }
- if(err_tmp1 < dy1) {
- err1 += dx1;
- edge1.y += sy1;
- }
- } while(edge1.y == y1_tmp);
-
- /*Calc. the next point of edge2*/
- y2_tmp = edge2.y;
- do {
- if(edge2.x == tri[2].x && edge2.y == tri[2].y) return;
- err_tmp2 = err2;
- if(err_tmp2 > -dx2) {
- err2 -= dy2;
- edge2.x += sx2;
- }
- if(err_tmp2 < dy2) {
- err2 += dx2;
- edge2.y += sy2;
- }
- } while(edge2.y == y2_tmp);
- }
-}
-
-void tri_draw_tall(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa)
-{
- /*
- * Better to draw from vertical lines
- * |\
- * | |
- * | |
- * | \
- * | |
- * |___|
- */
-
- lv_point_t tri[3];
-
- memcpy(tri, points, sizeof(tri));
-
- /*Sort the vertices according to their x coordinate (0: x max, 1: x mid, 2:x min)*/
- if(tri[1].x < tri[0].x) point_swap(&tri[1], &tri[0]);
- if(tri[2].x < tri[1].x) point_swap(&tri[2], &tri[1]);
- if(tri[1].x < tri[0].x) point_swap(&tri[1], &tri[0]);
-
- /*Draw the triangle*/
- lv_point_t edge1;
- lv_coord_t dx1 = LV_MATH_ABS(tri[0].x - tri[1].x);
- lv_coord_t sx1 = tri[0].x < tri[1].x ? 1 : -1;
- lv_coord_t dy1 = LV_MATH_ABS(tri[0].y - tri[1].y);
- lv_coord_t sy1 = tri[0].y < tri[1].y ? 1 : -1;
- lv_coord_t err1 = (dx1 > dy1 ? dx1 : -dy1) / 2;
- lv_coord_t err_tmp1;
-
- lv_point_t edge2;
- lv_coord_t dx2 = LV_MATH_ABS(tri[0].x - tri[2].x);
- lv_coord_t sx2 = tri[0].x < tri[2].x ? 1 : -1;
- lv_coord_t dy2 = LV_MATH_ABS(tri[0].y - tri[2].y);
- lv_coord_t sy2 = tri[0].y < tri[2].y ? 1 : -1;
- lv_coord_t err2 = (dx1 > dy2 ? dx2 : -dy2) / 2;
- lv_coord_t err_tmp2;
-
- lv_coord_t x1_tmp;
- lv_coord_t x2_tmp;
-
- edge1.x = tri[0].x;
- edge1.y = tri[0].y;
- edge2.x = tri[0].x;
- edge2.y = tri[0].y;
- lv_area_t act_area;
- lv_area_t draw_area;
-
- while(1) {
- act_area.x1 = edge1.x;
- act_area.x2 = edge2.x;
- act_area.y1 = edge1.y;
- act_area.y2 = edge2.y;
-
- draw_area.x1 = LV_MATH_MIN(act_area.x1, act_area.x2);
- draw_area.x2 = LV_MATH_MAX(act_area.x1, act_area.x2);
- draw_area.y1 = LV_MATH_MIN(act_area.y1, act_area.y2);
- draw_area.y2 = LV_MATH_MAX(act_area.y1, act_area.y2) - 1;
-
- lv_draw_fill(&draw_area, mask, style->body.main_color, opa);
-
- /*Calc. the next point of edge1*/
- x1_tmp = edge1.x;
- do {
- if(edge1.y == tri[1].y && edge1.x == tri[1].x) {
-
- dx1 = LV_MATH_ABS(tri[1].x - tri[2].x);
- sx1 = tri[1].x < tri[2].x ? 1 : -1;
- dy1 = LV_MATH_ABS(tri[1].y - tri[2].y);
- sy1 = tri[1].y < tri[2].y ? 1 : -1;
- err1 = (dx1 > dy1 ? dx1 : -dy1) / 2;
- } else if(edge1.y == tri[2].y && edge1.x == tri[2].x) {
- return;
- }
- err_tmp1 = err1;
- if(err_tmp1 > -dx1) {
- err1 -= dy1;
- edge1.x += sx1;
- }
- if(err_tmp1 < dy1) {
- err1 += dx1;
- edge1.y += sy1;
- }
- } while(edge1.x == x1_tmp);
-
- /*Calc. the next point of edge2*/
- x2_tmp = edge2.x;
- do {
- if(edge2.y == tri[2].y && edge2.x == tri[2].x) {
- return;
- }
-
- err_tmp2 = err2;
- if(err_tmp2 > -dx2) {
- err2 -= dy2;
- edge2.x += sx2;
- }
- if(err_tmp2 < dy2) {
- err2 += dx2;
- edge2.y += sy2;
- }
- } while(edge2.x == x2_tmp);
- }
-}
-
-/**
- * Swap two points
- * p1 pointer to the first point
- * p2 pointer to the second point
- */
-static void point_swap(lv_point_t * p1, lv_point_t * p2)
-{
- lv_point_t tmp;
- tmp.x = p1->x;
- tmp.y = p1->y;
-
- p1->x = p2->x;
- p1->y = p2->y;
-
- p2->x = tmp.x;
- p2->y = tmp.y;
-}
diff --git a/src/lv_draw/lv_draw_triangle.h b/src/lv_draw/lv_draw_triangle.h
index b6b230d97..020ff0d75 100644
--- a/src/lv_draw/lv_draw_triangle.h
+++ b/src/lv_draw/lv_draw_triangle.h
@@ -27,24 +27,25 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
+
/**
- *
+ * Draw a triangle
* @param points pointer to an array with 3 points
- * @param mask the triangle will be drawn only in this mask
+ * @param clip_area the triangle will be drawn only in this area
* @param style style for of the triangle
* @param opa_scale scale down all opacities by the factor (0..255)
*/
-void lv_draw_triangle(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale);
+void lv_draw_triangle(const lv_point_t * points, const lv_area_t * clip, const lv_style_t * style, lv_opa_t opa_scale);
/**
- * Draw a polygon from triangles. Only convex polygons are supported
+ * Draw a polygon. Only convex polygons are supported.
* @param points an array of points
* @param point_cnt number of points
- * @param mask polygon will be drawn only in this mask
+ * @param clip_area polygon will be drawn only in this area
* @param style style of the polygon
* @param opa_scale scale down all opacities by the factor (0..255)
*/
-void lv_draw_polygon(const lv_point_t * points, uint32_t point_cnt, const lv_area_t * mask, const lv_style_t * style,
+void lv_draw_polygon(const lv_point_t * points, uint16_t point_cnt, const lv_area_t * mask, const lv_style_t * style,
lv_opa_t opa_scale);
/**********************
diff --git a/src/lv_draw/lv_img_buf.c b/src/lv_draw/lv_img_buf.c
new file mode 100644
index 000000000..a627398b2
--- /dev/null
+++ b/src/lv_draw/lv_img_buf.c
@@ -0,0 +1,606 @@
+/**
+ * @file lv_img_buf.c
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+#include
+#include
+#include "lv_img_buf.h"
+#include "lv_draw_img.h"
+#include "../lv_misc/lv_math.h"
+#include "../lv_misc/lv_log.h"
+#include "../lv_misc/lv_mem.h"
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+static inline bool transform_anti_alias(lv_img_transform_dsc_t * dsc);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+
+/**
+ * Get the color of an image's pixel
+ * @param dsc an image descriptor
+ * @param x x coordinate of the point to get
+ * @param y x coordinate of the point to get
+ * @param color the color of the image. In case of `LV_IMG_CF_ALPHA_1/2/4/8` this color is used.
+ * Not used in other cases.
+ * @param safe true: check out of bounds
+ * @return color of the point
+ */
+lv_color_t lv_img_buf_get_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t color)
+{
+ lv_color_t p_color = LV_COLOR_BLACK;
+ uint8_t * buf_u8 = (uint8_t *)dsc->data;
+
+ if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR || dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED ||
+ dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
+ uint8_t px_size = lv_img_cf_get_px_size(dsc->header.cf) >> 3;
+ uint32_t px = dsc->header.w * y * px_size + x * px_size;
+ memcpy(&p_color, &buf_u8[px], sizeof(lv_color_t));
+#if LV_COLOR_SIZE == 32
+ p_color.ch.alpha = 0xFF; /*Only the color should be get so use a deafult alpha value*/
+#endif
+ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT) {
+ buf_u8 += 4 * 2;
+ uint8_t bit = x & 0x7;
+ x = x >> 3;
+
+ /* Get the current pixel.
+ * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
+ * so the possible real width are 8, 16, 24 ...*/
+ uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
+ p_color.full = (buf_u8[px] & (1 << (7 - bit))) >> (7 - bit);
+ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_2BIT) {
+ buf_u8 += 4 * 4;
+ uint8_t bit = (x & 0x3) * 2;
+ x = x >> 2;
+
+ /* Get the current pixel.
+ * dsc->header.w + 3 means rounding up to 4 because the lines are byte aligned
+ * so the possible real width are 4, 8, 12 ...*/
+ uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
+ p_color.full = (buf_u8[px] & (3 << (6 - bit))) >> (6 - bit);
+ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_4BIT) {
+ buf_u8 += 4 * 16;
+ uint8_t bit = (x & 0x1) * 4;
+ x = x >> 1;
+
+ /* Get the current pixel.
+ * dsc->header.w + 1 means rounding up to 2 because the lines are byte aligned
+ * so the possible real width are 2, 4, 6 ...*/
+ uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
+ p_color.full = (buf_u8[px] & (0xF << (4 - bit))) >> (4 - bit);
+ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_8BIT) {
+ buf_u8 += 4 * 256;
+ uint32_t px = dsc->header.w * y + x;
+ p_color.full = buf_u8[px];
+ } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT || dsc->header.cf == LV_IMG_CF_ALPHA_2BIT ||
+ dsc->header.cf == LV_IMG_CF_ALPHA_4BIT || dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
+ p_color = color;
+ }
+ return p_color;
+}
+
+/**
+ * Get the alpha value of an image's pixel
+ * @param dsc pointer to an image descriptor
+ * @param x x coordinate of the point to set
+ * @param y x coordinate of the point to set
+ * @param safe true: check out of bounds
+ * @return alpha value of the point
+ */
+lv_opa_t lv_img_buf_get_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y)
+{
+ uint8_t * buf_u8 = (uint8_t *)dsc->data;
+
+ if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
+ uint32_t px = dsc->header.w * y * LV_IMG_PX_SIZE_ALPHA_BYTE + x * LV_IMG_PX_SIZE_ALPHA_BYTE;
+ return buf_u8[px + LV_IMG_PX_SIZE_ALPHA_BYTE - 1];
+ } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT) {
+ uint8_t bit = x & 0x7;
+ x = x >> 3;
+
+ /* Get the current pixel.
+ * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
+ * so the possible real width are 8 ,16, 24 ...*/
+ uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
+ uint8_t px_opa = (buf_u8[px] & (1 << (7 - bit))) >> (7 - bit);
+ return px_opa ? LV_OPA_TRANSP : LV_OPA_COVER;
+ } else if(dsc->header.cf == LV_IMG_CF_ALPHA_2BIT) {
+ const uint8_t opa_table[4] = {0, 85, 170, 255}; /*Opacity mapping with bpp = 2*/
+
+ uint8_t bit = (x & 0x3) * 2;
+ x = x >> 2;
+
+ /* Get the current pixel.
+ * dsc->header.w + 4 means rounding up to 8 because the lines are byte aligned
+ * so the possible real width are 4 ,8, 12 ...*/
+ uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
+ uint8_t px_opa = (buf_u8[px] & (3 << (6 - bit))) >> (6 - bit);
+ return opa_table[px_opa];
+ } else if(dsc->header.cf == LV_IMG_CF_ALPHA_4BIT) {
+ const uint8_t opa_table[16] = {0, 17, 34, 51, /*Opacity mapping with bpp = 4*/
+ 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255};
+
+ uint8_t bit = (x & 0x1) * 4;
+ x = x >> 1;
+
+ /* Get the current pixel.
+ * dsc->header.w + 1 means rounding up to 8 because the lines are byte aligned
+ * so the possible real width are 2 ,4, 6 ...*/
+ uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
+ uint8_t px_opa = (buf_u8[px] & (0xF << (4 - bit))) >> (4 - bit);
+ return opa_table[px_opa];
+ } else if(dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
+ uint32_t px = dsc->header.w * y + x;
+ return buf_u8[px];
+ }
+
+ return LV_OPA_COVER;
+}
+
+/**
+ * Set the alpha value of a pixel of an image. The color won't be affected
+ * @param dsc pointer to an image descriptor
+ * @param x x coordinate of the point to set
+ * @param y x coordinate of the point to set
+ * @param opa the desired opacity
+ * @param safe true: check out of bounds
+ */
+void lv_img_buf_set_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_opa_t opa)
+{
+ uint8_t * buf_u8 = (uint8_t *)dsc->data;
+
+ if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
+ uint8_t px_size = lv_img_cf_get_px_size(dsc->header.cf) >> 3;
+ uint32_t px = dsc->header.w * y * px_size + x * px_size;
+ buf_u8[px + px_size - 1] = opa;
+ } else if(dsc->header.cf == LV_IMG_CF_ALPHA_1BIT) {
+ opa = opa >> 7; /*opa -> [0,1]*/
+ uint8_t bit = x & 0x7;
+ x = x >> 3;
+
+ /* Get the current pixel.
+ * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
+ * so the possible real width are 8 ,16, 24 ...*/
+ uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
+ buf_u8[px] = buf_u8[px] & ~(1 << (7 - bit));
+ buf_u8[px] = buf_u8[px] | ((opa & 0x1) << (7 - bit));
+ } else if(dsc->header.cf == LV_IMG_CF_ALPHA_2BIT) {
+ opa = opa >> 6; /*opa -> [0,3]*/
+ uint8_t bit = (x & 0x3) * 2;
+ x = x >> 2;
+
+ /* Get the current pixel.
+ * dsc->header.w + 4 means rounding up to 8 because the lines are byte aligned
+ * so the possible real width are 4 ,8, 12 ...*/
+ uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
+ buf_u8[px] = buf_u8[px] & ~(3 << (6 - bit));
+ buf_u8[px] = buf_u8[px] | ((opa & 0x3) << (6 - bit));
+ } else if(dsc->header.cf == LV_IMG_CF_ALPHA_4BIT) {
+ opa = opa >> 4; /*opa -> [0,15]*/
+ uint8_t bit = (x & 0x1) * 4;
+ x = x >> 1;
+
+ /* Get the current pixel.
+ * dsc->header.w + 1 means rounding up to 8 because the lines are byte aligned
+ * so the possible real width are 2 ,4, 6 ...*/
+ uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
+ buf_u8[px] = buf_u8[px] & ~(0xF << (4 - bit));
+ buf_u8[px] = buf_u8[px] | ((opa & 0xF) << (4 - bit));
+ } else if(dsc->header.cf == LV_IMG_CF_ALPHA_8BIT) {
+ uint32_t px = dsc->header.w * y + x;
+ buf_u8[px] = opa;
+ }
+}
+
+/**
+ * Set the color of a pixel of an image. The alpha channel won't be affected.
+ * @param dsc pointer to an image descriptor
+ * @param x x coordinate of the point to set
+ * @param y x coordinate of the point to set
+ * @param c color of the point
+ * @param safe true: check out of bounds
+ */
+void lv_img_buf_set_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t c)
+{
+ uint8_t * buf_u8 = (uint8_t *)dsc->data;
+
+ if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR || dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
+ uint8_t px_size = lv_img_cf_get_px_size(dsc->header.cf) >> 3;
+ uint32_t px = dsc->header.w * y * px_size + x * px_size;
+ memcpy(&buf_u8[px], &c, px_size);
+ } else if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_ALPHA) {
+ uint8_t px_size = lv_img_cf_get_px_size(dsc->header.cf) >> 3;
+ uint32_t px = dsc->header.w * y * px_size + x * px_size;
+ memcpy(&buf_u8[px], &c, px_size - 1); /*-1 to not overwrite the alpha value*/
+ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_1BIT) {
+ buf_u8 += sizeof(lv_color32_t) * 2; /*Skip the palette*/
+
+ uint8_t bit = x & 0x7;
+ x = x >> 3;
+
+ /* Get the current pixel.
+ * dsc->header.w + 7 means rounding up to 8 because the lines are byte aligned
+ * so the possible real width are 8 ,16, 24 ...*/
+ uint32_t px = ((dsc->header.w + 7) >> 3) * y + x;
+ buf_u8[px] = buf_u8[px] & ~(1 << (7 - bit));
+ buf_u8[px] = buf_u8[px] | ((c.full & 0x1) << (7 - bit));
+ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_2BIT) {
+ buf_u8 += sizeof(lv_color32_t) * 4; /*Skip the palette*/
+ uint8_t bit = (x & 0x3) * 2;
+ x = x >> 2;
+
+ /* Get the current pixel.
+ * dsc->header.w + 3 means rounding up to 4 because the lines are byte aligned
+ * so the possible real width are 4, 8 ,12 ...*/
+ uint32_t px = ((dsc->header.w + 3) >> 2) * y + x;
+
+ buf_u8[px] = buf_u8[px] & ~(3 << (6 - bit));
+ buf_u8[px] = buf_u8[px] | ((c.full & 0x3) << (6 - bit));
+ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_4BIT) {
+ buf_u8 += sizeof(lv_color32_t) * 16; /*Skip the palette*/
+ uint8_t bit = (x & 0x1) * 4;
+ x = x >> 1;
+
+ /* Get the current pixel.
+ * dsc->header.w + 1 means rounding up to 2 because the lines are byte aligned
+ * so the possible real width are 2 ,4, 6 ...*/
+ uint32_t px = ((dsc->header.w + 1) >> 1) * y + x;
+ buf_u8[px] = buf_u8[px] & ~(0xF << (4 - bit));
+ buf_u8[px] = buf_u8[px] | ((c.full & 0xF) << (4 - bit));
+ } else if(dsc->header.cf == LV_IMG_CF_INDEXED_8BIT) {
+ buf_u8 += sizeof(lv_color32_t) * 256; /*Skip the palette*/
+ uint32_t px = dsc->header.w * y + x;
+ buf_u8[px] = c.full;
+ }
+}
+
+/**
+ * Set the palette color of an indexed image. Valid only for `LV_IMG_CF_INDEXED1/2/4/8`
+ * @param dsc pointer to an image descriptor
+ * @param id the palette color to set:
+ * - for `LV_IMG_CF_INDEXED1`: 0..1
+ * - for `LV_IMG_CF_INDEXED2`: 0..3
+ * - for `LV_IMG_CF_INDEXED4`: 0..15
+ * - for `LV_IMG_CF_INDEXED8`: 0..255
+ * @param c the color to set
+ */
+void lv_img_buf_set_palette(lv_img_dsc_t * dsc, uint8_t id, lv_color_t c)
+{
+ if((dsc->header.cf == LV_IMG_CF_ALPHA_1BIT && id > 1) || (dsc->header.cf == LV_IMG_CF_ALPHA_2BIT && id > 3) ||
+ (dsc->header.cf == LV_IMG_CF_ALPHA_4BIT && id > 15) || (dsc->header.cf == LV_IMG_CF_ALPHA_8BIT)) {
+ LV_LOG_WARN("lv_img_buf_set_px_alpha: invalid 'id'");
+ return;
+ }
+
+ lv_color32_t c32;
+ c32.full = lv_color_to32(c);
+ uint8_t * buf = (uint8_t *)dsc->data;
+ memcpy(&buf[id * sizeof(c32)], &c32, sizeof(c32));
+}
+
+/**
+ * Allocate an image buffer in RAM
+ * @param w width of image
+ * @param h height of image
+ * @param cf a color format (`LV_IMG_CF_...`)
+ * @return an allocated image, or NULL on failure
+ */
+lv_img_dsc_t *lv_img_buf_alloc(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf)
+{
+ /* Allocate image descriptor */
+ lv_img_dsc_t *dsc = lv_mem_alloc(sizeof(lv_img_dsc_t));
+ if(dsc == NULL)
+ return NULL;
+
+ memset(dsc, 0, sizeof(lv_img_dsc_t));
+
+ /* Get image data size */
+ dsc->data_size = lv_img_buf_get_img_size(w, h, cf);
+ if(dsc->data_size == 0) {
+ lv_mem_free(dsc);
+ return NULL;
+ }
+
+ /* Allocate raw buffer */
+ dsc->data = lv_mem_alloc(dsc->data_size);
+ if(dsc->data == NULL) {
+ lv_mem_free(dsc);
+ return NULL;
+ }
+ memset((uint8_t *)dsc->data, 0, dsc->data_size);
+
+ /* Fill in header */
+ dsc->header.always_zero = 0;
+ dsc->header.w = w;
+ dsc->header.h = h;
+ dsc->header.cf = cf;
+ return dsc;
+}
+
+/**
+ * Free an allocated image buffer
+ * @param dsc image buffer to free
+ */
+void lv_img_buf_free(lv_img_dsc_t *dsc)
+{
+ if(dsc != NULL) {
+ if(dsc->data != NULL)
+ lv_mem_free(dsc->data);
+
+ lv_mem_free(dsc);
+ }
+}
+
+/**
+ * Get the memory consumption of a raw bitmap, given color format and dimensions.
+ * @param w width
+ * @param h height
+ * @param cf color format
+ * @return size in bytes
+ */
+uint32_t lv_img_buf_get_img_size(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf)
+{
+ switch(cf) {
+ case LV_IMG_CF_TRUE_COLOR: return LV_IMG_BUF_SIZE_TRUE_COLOR(w, h);
+ case LV_IMG_CF_TRUE_COLOR_ALPHA: return LV_IMG_BUF_SIZE_TRUE_COLOR_ALPHA(w, h);
+ case LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED: return LV_IMG_BUF_SIZE_TRUE_COLOR_CHROMA_KEYED(w, h);
+ case LV_IMG_CF_ALPHA_1BIT: return LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h);
+ case LV_IMG_CF_ALPHA_2BIT: return LV_IMG_BUF_SIZE_ALPHA_2BIT(w, h);
+ case LV_IMG_CF_ALPHA_4BIT: return LV_IMG_BUF_SIZE_ALPHA_4BIT(w, h);
+ case LV_IMG_CF_ALPHA_8BIT: return LV_IMG_BUF_SIZE_ALPHA_8BIT(w, h);
+ case LV_IMG_CF_INDEXED_1BIT: return LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h);
+ case LV_IMG_CF_INDEXED_2BIT: return LV_IMG_BUF_SIZE_INDEXED_2BIT(w, h);
+ case LV_IMG_CF_INDEXED_4BIT: return LV_IMG_BUF_SIZE_INDEXED_4BIT(w, h);
+ case LV_IMG_CF_INDEXED_8BIT: return LV_IMG_BUF_SIZE_INDEXED_8BIT(w, h);
+ default: return 0;
+ }
+}
+
+/**
+ * Initialize a descriptor to tranform an image
+ * @param dsc pointer to an `lv_img_transform_dsc_t` variable whose `cfg` field is initialized
+ */
+void lv_img_buf_transform_init(lv_img_transform_dsc_t * dsc)
+{
+ dsc->tmp.pivot_x_256 = dsc->cfg.pivot_x * 256;
+ dsc->tmp.pivot_y_256 = dsc->cfg.pivot_y * 256;
+ dsc->tmp.sinma = lv_trigo_sin(-dsc->cfg.angle);
+ dsc->tmp.cosma = lv_trigo_sin(-dsc->cfg.angle + 90);
+
+ dsc->tmp.chroma_keyed = lv_img_cf_is_chroma_keyed(dsc->cfg.cf) ? 1 : 0;
+ dsc->tmp.has_alpha = lv_img_cf_has_alpha(dsc->cfg.cf) ? 1 : 0;
+ if(dsc->cfg.cf == LV_IMG_CF_TRUE_COLOR || dsc->cfg.cf == LV_IMG_CF_TRUE_COLOR_ALPHA || dsc->cfg.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
+ dsc->tmp.native_color = 1;
+ }
+
+ dsc->tmp.img_dsc.data = dsc->cfg.src;
+ dsc->tmp.img_dsc.header.always_zero = 0;
+ dsc->tmp.img_dsc.header.cf = dsc->cfg.cf;
+ dsc->tmp.img_dsc.header.w = dsc->cfg.src_w;
+ dsc->tmp.img_dsc.header.h = dsc->cfg.src_h;
+
+ dsc->tmp.zoom_inv = (256 * 256) / dsc->cfg.zoom;
+
+ dsc->res.opa = LV_OPA_COVER;
+ dsc->res.color = dsc->cfg.color;
+}
+
+/**
+ * Get which color and opa would come to a pixel if it were rotated
+ * @param dsc a descriptor initialized by `lv_img_buf_rotate_init`
+ * @param x the coordinate which color and opa should be get
+ * @param y the coordinate which color and opa should be get
+ * @return true: there is valid pixel on these x/y coordinates; false: the rotated pixel was out of the image
+ * @note the result is written back to `dsc->res_color` and `dsc->res_opa`
+ */
+bool lv_img_buf_transform(lv_img_transform_dsc_t * dsc, lv_coord_t x, lv_coord_t y)
+{
+ const uint8_t * src_u8 = dsc->cfg.src;
+
+ /*Get the target point relative coordinates to the pivot*/
+ int32_t xt = x - dsc->cfg.pivot_x;
+ int32_t yt = y - dsc->cfg.pivot_y;
+
+ int32_t xs;
+ int32_t ys;
+ if(dsc->cfg.zoom == LV_IMG_ZOOM_NONE) {
+ /*Get the source pixel from the upscaled image*/
+ xs = ((dsc->tmp.cosma * xt - dsc->tmp.sinma * yt) >> (LV_TRIGO_SHIFT - 8)) + dsc->tmp.pivot_x_256;
+ ys = ((dsc->tmp.sinma * xt + dsc->tmp.cosma * yt) >> (LV_TRIGO_SHIFT - 8)) + dsc->tmp.pivot_y_256;
+ } else {
+ xt *= dsc->tmp.zoom_inv;
+ yt *= dsc->tmp.zoom_inv;
+ xs = ((dsc->tmp.cosma * xt - dsc->tmp.sinma * yt) >> (LV_TRIGO_SHIFT)) + dsc->tmp.pivot_x_256;
+ ys = ((dsc->tmp.sinma * xt + dsc->tmp.cosma * yt) >> (LV_TRIGO_SHIFT)) + dsc->tmp.pivot_y_256;
+
+ }
+
+ /*Get the integer part of the source pixel*/
+ int xs_int = xs >> 8;
+ int ys_int = ys >> 8;
+
+ if(xs_int >= dsc->cfg.src_w) return false;
+ else if(xs_int < 0) return false;
+
+ if(ys_int >= dsc->cfg.src_h) return false;
+ else if(ys_int < 0) return false;
+
+ /* If the fractional < 0x70 mix the source pixel with the left/top pixel
+ * If the fractional > 0x90 mix the source pixel with the right/bottom pixel
+ * In the 0x70..0x90 range use the unchanged source pixel */
+
+ uint8_t px_size;
+ uint32_t pxi;
+ if(dsc->tmp.native_color) {
+ if(dsc->tmp.has_alpha == 0) {
+ px_size = LV_COLOR_SIZE >> 3;
+
+ pxi = dsc->cfg.src_w * ys_int * px_size + xs_int * px_size;
+ memcpy(&dsc->res.color, &src_u8[pxi], px_size);
+ } else {
+ px_size = LV_IMG_PX_SIZE_ALPHA_BYTE;
+ pxi = dsc->cfg.src_w * ys_int * px_size + xs_int * px_size;
+ memcpy(&dsc->res.color, &src_u8[pxi], px_size - 1);
+ dsc->res.opa = src_u8[pxi + px_size - 1];
+ }
+ } else {
+ pxi = 0; /*unused*/
+ px_size = 0; /*unused*/
+ dsc->res.color = lv_img_buf_get_px_color(&dsc->tmp.img_dsc, xs_int, ys_int, dsc->cfg.color);
+ dsc->res.opa = lv_img_buf_get_px_alpha(&dsc->tmp.img_dsc, xs_int, ys_int);
+ }
+
+ if(dsc->tmp.chroma_keyed) {
+ lv_color_t ct = LV_COLOR_TRANSP;
+ if(dsc->res.color.full == ct.full) return false;
+ }
+
+
+ if(dsc->cfg.antialias == false) return true;
+
+ dsc->tmp.xs = xs;
+ dsc->tmp.ys = ys;
+ dsc->tmp.xs_int = xs_int;
+ dsc->tmp.ys_int = ys_int;
+ dsc->tmp.pxi = pxi;
+ dsc->tmp.px_size = px_size;
+
+ bool ret;
+
+ ret = transform_anti_alias(dsc);
+
+ return ret;
+}
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+static inline bool transform_anti_alias(lv_img_transform_dsc_t * dsc)
+{
+ const uint8_t * src_u8 = dsc->cfg.src;
+
+ /*Get the fractional part of the source pixel*/
+ int xs_fract = dsc->tmp.xs & 0xff;
+ int ys_fract = dsc->tmp.ys & 0xff;
+ int32_t xn; /*x neightboor*/
+ lv_opa_t xr; /*x mix ratio*/
+
+ if(xs_fract < 0x70) {
+ xn = - 1;
+ if(dsc->tmp.xs_int + xn < 0) return false;
+ xr = xs_fract + 0x80;
+ } else if(xs_fract > 0x90) {
+ xn = 1;
+ if(dsc->tmp.xs_int + xn >= dsc->cfg.src_w) return false;
+ xr = (0xFF - xs_fract) + 0x80;
+ } else {
+ xn = 0;
+ xr = 0xFF;
+ }
+
+ int32_t yn; /*x neightboor*/
+ lv_opa_t yr; /*x mix ratio*/
+
+ if(ys_fract < 0x70) {
+ yn = - 1;
+ if(dsc->tmp.ys_int + yn < 0) return false;
+
+ yr = ys_fract + 0x80;
+ } else if(ys_fract > 0x90) {
+ yn = 1;
+ if(dsc->tmp.ys_int + yn >= dsc->cfg.src_h) return false;
+
+ yr = (0xFF - ys_fract) + 0x80;
+ } else {
+ yn = 0;
+ yr = 0xFF;
+ }
+
+ lv_color_t c00 = dsc->res.color;
+ lv_color_t c01;
+ lv_color_t c10;
+ lv_color_t c11;
+
+ lv_opa_t a00 = dsc->res.opa;
+ lv_opa_t a10 = 0;
+ lv_opa_t a01 = 0;
+ lv_opa_t a11 = 0;
+
+ if(dsc->tmp.native_color) {
+ memcpy(&c01, &src_u8[dsc->tmp.pxi + dsc->tmp.px_size * xn], sizeof(lv_color_t));
+ memcpy(&c10, &src_u8[dsc->tmp.pxi + dsc->cfg.src_w * dsc->tmp.px_size * yn], sizeof(lv_color_t));
+ memcpy(&c11, &src_u8[dsc->tmp.pxi + dsc->cfg.src_w * dsc->tmp.px_size * yn + dsc->tmp.px_size * xn], sizeof(lv_color_t));
+ if(dsc->tmp.has_alpha) {
+ a10 = src_u8[dsc->tmp.pxi + dsc->tmp.px_size * xn + dsc->tmp.px_size - 1];
+ a01 = src_u8[dsc->tmp.pxi + dsc->cfg.src_w * dsc->tmp.px_size * yn + dsc->tmp.px_size - 1];
+ a11 = src_u8[dsc->tmp.pxi + dsc->cfg.src_w * dsc->tmp.px_size * yn + dsc->tmp.px_size * xn + dsc->tmp.px_size - 1];
+ }
+ } else {
+ c01 = lv_img_buf_get_px_color(&dsc->tmp.img_dsc, dsc->tmp.xs_int + xn, dsc->tmp.ys_int, dsc->cfg.color);
+ c10 = lv_img_buf_get_px_color(&dsc->tmp.img_dsc, dsc->tmp.xs_int, dsc->tmp.ys_int + yn, dsc->cfg.color);
+ c11 = lv_img_buf_get_px_color(&dsc->tmp.img_dsc, dsc->tmp.xs_int + xn, dsc->tmp.ys_int + yn, dsc->cfg.color);
+
+ if(dsc->tmp.has_alpha) {
+ a10 = lv_img_buf_get_px_alpha(&dsc->tmp.img_dsc, dsc->tmp.xs_int + xn, dsc->tmp.ys_int);
+ a01 = lv_img_buf_get_px_alpha(&dsc->tmp.img_dsc, dsc->tmp.xs_int, dsc->tmp.ys_int + yn);
+ a11 = lv_img_buf_get_px_alpha(&dsc->tmp.img_dsc, dsc->tmp.xs_int + xn, dsc->tmp.ys_int + yn);
+ }
+
+ }
+
+ lv_opa_t a0;
+ lv_opa_t a1;
+ lv_opa_t xr0 = xr;
+ lv_opa_t xr1 = xr;
+ if(dsc->tmp.has_alpha) {
+ a0 = (a00 * xr + (a10 * (255 - xr))) >> 8;
+ a1 = (a01 * xr + (a11 * (255 - xr))) >> 8;
+ dsc->res.opa = (a0 * yr + (a1 * (255 - yr))) >> 8;
+
+
+ if(a0 <= LV_OPA_MIN && a1 <= LV_OPA_MIN) return false;
+ if(a0 <= LV_OPA_MIN) yr = LV_OPA_TRANSP;
+ if(a1 <= LV_OPA_MIN) yr = LV_OPA_COVER;
+ if(a00 <= LV_OPA_MIN) xr0 = LV_OPA_TRANSP;
+ if(a10 <= LV_OPA_MIN) xr0 = LV_OPA_COVER;
+ if(a01 <= LV_OPA_MIN) xr1 = LV_OPA_TRANSP;
+ if(a11 <= LV_OPA_MIN) xr1 = LV_OPA_COVER;
+
+ } else {
+ xr0 = xr;
+ xr1 = xr;
+ dsc->res.opa = LV_OPA_COVER;
+ }
+
+ lv_color_t c0 = lv_color_mix(c00, c01, xr0);
+ lv_color_t c1 = lv_color_mix(c10, c11, xr1);
+
+ dsc->res.color = lv_color_mix(c0, c1, yr);
+
+ return true;
+}
diff --git a/src/lv_draw/lv_img_buf.h b/src/lv_draw/lv_img_buf.h
new file mode 100644
index 000000000..2629b4655
--- /dev/null
+++ b/src/lv_draw/lv_img_buf.h
@@ -0,0 +1,281 @@
+/**
+ * @file lv_img_buf.h
+ *
+ */
+
+#ifndef LV_IMG_BUF_H
+#define LV_IMG_BUF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#include
+#include "../lv_misc/lv_color.h"
+
+
+/*********************
+ * DEFINES
+ *********************/
+/*If image pixels contains alpha we need to know how much byte is a pixel*/
+#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8
+#define LV_IMG_PX_SIZE_ALPHA_BYTE 2
+#elif LV_COLOR_DEPTH == 16
+#define LV_IMG_PX_SIZE_ALPHA_BYTE 3
+#elif LV_COLOR_DEPTH == 32
+#define LV_IMG_PX_SIZE_ALPHA_BYTE 4
+#endif
+
+
+#define LV_IMG_BUF_SIZE_TRUE_COLOR(w, h) ((LV_COLOR_SIZE / 8) * w * h)
+#define LV_IMG_BUF_SIZE_TRUE_COLOR_CHROMA_KEYED(w, h) ((LV_COLOR_SIZE / 8) * w * h)
+#define LV_IMG_BUF_SIZE_TRUE_COLOR_ALPHA(w, h) (LV_IMG_PX_SIZE_ALPHA_BYTE * w * h)
+
+/*+ 1: to be sure no fractional row*/
+#define LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h) ((((w / 8) + 1) * h))
+#define LV_IMG_BUF_SIZE_ALPHA_2BIT(w, h) ((((w / 4) + 1) * h))
+#define LV_IMG_BUF_SIZE_ALPHA_4BIT(w, h) ((((w / 2) + 1) * h))
+#define LV_IMG_BUF_SIZE_ALPHA_8BIT(w, h) ((w * h))
+
+/*4 * X: for palette*/
+#define LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h) (LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h) + 4 * 2)
+#define LV_IMG_BUF_SIZE_INDEXED_2BIT(w, h) (LV_IMG_BUF_SIZE_ALPHA_2BIT(w, h) + 4 * 4)
+#define LV_IMG_BUF_SIZE_INDEXED_4BIT(w, h) (LV_IMG_BUF_SIZE_ALPHA_4BIT(w, h) + 4 * 16)
+#define LV_IMG_BUF_SIZE_INDEXED_8BIT(w, h) (LV_IMG_BUF_SIZE_ALPHA_8BIT(w, h) + 4 * 256)
+
+#define LV_IMG_ZOOM_NONE 256
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/*Image color format*/
+enum {
+ LV_IMG_CF_UNKNOWN = 0,
+
+ LV_IMG_CF_RAW, /**< Contains the file as it is. Needs custom decoder function*/
+ LV_IMG_CF_RAW_ALPHA, /**< Contains the file as it is. The image has alpha. Needs custom decoder
+ function*/
+ LV_IMG_CF_RAW_CHROMA_KEYED, /**< Contains the file as it is. The image is chroma keyed. Needs
+ custom decoder function*/
+
+ LV_IMG_CF_TRUE_COLOR, /**< Color format and depth should match with LV_COLOR settings*/
+ LV_IMG_CF_TRUE_COLOR_ALPHA, /**< Same as `LV_IMG_CF_TRUE_COLOR` but every pixel has an alpha byte*/
+ LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED, /**< Same as `LV_IMG_CF_TRUE_COLOR` but LV_COLOR_TRANSP pixels
+ will be transparent*/
+
+ LV_IMG_CF_INDEXED_1BIT, /**< Can have 2 different colors in a palette (always chroma keyed)*/
+ LV_IMG_CF_INDEXED_2BIT, /**< Can have 4 different colors in a palette (always chroma keyed)*/
+ LV_IMG_CF_INDEXED_4BIT, /**< Can have 16 different colors in a palette (always chroma keyed)*/
+ LV_IMG_CF_INDEXED_8BIT, /**< Can have 256 different colors in a palette (always chroma keyed)*/
+
+ LV_IMG_CF_ALPHA_1BIT, /**< Can have one color and it can be drawn or not*/
+ LV_IMG_CF_ALPHA_2BIT, /**< Can have one color but 4 different alpha value*/
+ LV_IMG_CF_ALPHA_4BIT, /**< Can have one color but 16 different alpha value*/
+ LV_IMG_CF_ALPHA_8BIT, /**< Can have one color but 256 different alpha value*/
+
+ LV_IMG_CF_RESERVED_15, /**< Reserved for further use. */
+ LV_IMG_CF_RESERVED_16, /**< Reserved for further use. */
+ LV_IMG_CF_RESERVED_17, /**< Reserved for further use. */
+ LV_IMG_CF_RESERVED_18, /**< Reserved for further use. */
+ LV_IMG_CF_RESERVED_19, /**< Reserved for further use. */
+ LV_IMG_CF_RESERVED_20, /**< Reserved for further use. */
+ LV_IMG_CF_RESERVED_21, /**< Reserved for further use. */
+ LV_IMG_CF_RESERVED_22, /**< Reserved for further use. */
+ LV_IMG_CF_RESERVED_23, /**< Reserved for further use. */
+
+ LV_IMG_CF_USER_ENCODED_0, /**< User holder encoding format. */
+ LV_IMG_CF_USER_ENCODED_1, /**< User holder encoding format. */
+ LV_IMG_CF_USER_ENCODED_2, /**< User holder encoding format. */
+ LV_IMG_CF_USER_ENCODED_3, /**< User holder encoding format. */
+ LV_IMG_CF_USER_ENCODED_4, /**< User holder encoding format. */
+ LV_IMG_CF_USER_ENCODED_5, /**< User holder encoding format. */
+ LV_IMG_CF_USER_ENCODED_6, /**< User holder encoding format. */
+ LV_IMG_CF_USER_ENCODED_7, /**< User holder encoding format. */
+};
+typedef uint8_t lv_img_cf_t;
+
+
+/**
+ * LittlevGL image header
+ */
+typedef struct
+{
+
+ /* The first 8 bit is very important to distinguish the different source types.
+ * For more info see `lv_img_get_src_type()` in lv_img.c */
+ uint32_t cf : 5; /* Color format: See `lv_img_color_format_t`*/
+ uint32_t always_zero : 3; /*It the upper bits of the first byte. Always zero to look like a
+ non-printable character*/
+
+ uint32_t reserved : 2; /*Reserved to be used later*/
+
+ uint32_t w : 11; /*Width of the image map*/
+ uint32_t h : 11; /*Height of the image map*/
+} lv_img_header_t;
+
+
+/** Image header it is compatible with
+ * the result from image converter utility*/
+typedef struct
+{
+ lv_img_header_t header;
+ uint32_t data_size;
+ const uint8_t * data;
+} lv_img_dsc_t;
+
+typedef struct {
+ struct {
+ const void * src; /*image source (array of pixels)*/
+ lv_coord_t src_w; /*width of the image source*/
+ lv_coord_t src_h; /*height of the image source*/
+ lv_coord_t pivot_x; /*pivot x*/
+ lv_coord_t pivot_y; /* pivot y*/
+ int16_t angle; /*angle to rotate*/
+ uint16_t zoom; /*256 no zoom, 128 half size, 512 double size*/
+ lv_color_t color; /*a color used for `LV_IMG_CF_INDEXED_1/2/4/8BIT` color formats*/
+ lv_img_cf_t cf; /*color format of the image to rotate*/
+ bool antialias;
+ }cfg;
+
+ struct {
+ lv_color_t color;
+ lv_opa_t opa;
+ }res;
+
+
+ struct {
+ lv_img_dsc_t img_dsc;
+ int32_t pivot_x_256;
+ int32_t pivot_y_256;
+ int32_t sinma;
+ int32_t cosma;
+
+ uint8_t chroma_keyed :1;
+ uint8_t has_alpha :1;
+ uint8_t native_color :1;
+
+ uint16_t zoom_inv;
+
+ /*Runtime data*/
+ lv_coord_t xs;
+ lv_coord_t ys;
+ lv_coord_t xs_int;
+ lv_coord_t ys_int;
+ uint32_t pxi;
+ uint8_t px_size;
+ }tmp;
+}lv_img_transform_dsc_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Allocate an image buffer in RAM
+ * @param w width of image
+ * @param h height of image
+ * @param cf a color format (`LV_IMG_CF_...`)
+ * @return an allocated image, or NULL on failure
+ */
+lv_img_dsc_t *lv_img_buf_alloc(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf);
+
+/**
+ * Get the color of an image's pixel
+ * @param dsc an image descriptor
+ * @param x x coordinate of the point to get
+ * @param y x coordinate of the point to get
+ * @param color the color of the image. In case of `LV_IMG_CF_ALPHA_1/2/4/8` this color is used.
+ * Not used in other cases.
+ * @param safe true: check out of bounds
+ * @return color of the point
+ */
+lv_color_t lv_img_buf_get_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t color);
+
+/**
+ * Get the alpha value of an image's pixel
+ * @param dsc pointer to an image descriptor
+ * @param x x coordinate of the point to set
+ * @param y x coordinate of the point to set
+ * @param safe true: check out of bounds
+ * @return alpha value of the point
+ */
+lv_opa_t lv_img_buf_get_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y);
+
+/**
+ * Set the color of a pixel of an image. The alpha channel won't be affected.
+ * @param dsc pointer to an image descriptor
+ * @param x x coordinate of the point to set
+ * @param y x coordinate of the point to set
+ * @param c color of the point
+ * @param safe true: check out of bounds
+ */
+void lv_img_buf_set_px_color(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_color_t c);
+
+/**
+ * Set the alpha value of a pixel of an image. The color won't be affected
+ * @param dsc pointer to an image descriptor
+ * @param x x coordinate of the point to set
+ * @param y x coordinate of the point to set
+ * @param opa the desired opacity
+ * @param safe true: check out of bounds
+ */
+void lv_img_buf_set_px_alpha(lv_img_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_opa_t opa);
+
+/**
+ * Set the palette color of an indexed image. Valid only for `LV_IMG_CF_INDEXED1/2/4/8`
+ * @param dsc pointer to an image descriptor
+ * @param id the palette color to set:
+ * - for `LV_IMG_CF_INDEXED1`: 0..1
+ * - for `LV_IMG_CF_INDEXED2`: 0..3
+ * - for `LV_IMG_CF_INDEXED4`: 0..15
+ * - for `LV_IMG_CF_INDEXED8`: 0..255
+ * @param c the color to set
+ */
+void lv_img_buf_set_palette(lv_img_dsc_t * dsc, uint8_t id, lv_color_t c);
+
+/**
+ * Free an allocated image buffer
+ * @param dsc image buffer to free
+ */
+void lv_img_buf_free(lv_img_dsc_t *dsc);
+
+/**
+ * Get the memory consumption of a raw bitmap, given color format and dimensions.
+ * @param w width
+ * @param h height
+ * @param cf color format
+ * @return size in bytes
+ */
+uint32_t lv_img_buf_get_img_size(lv_coord_t w, lv_coord_t h, lv_img_cf_t cf);
+
+
+/**
+ * Initialize a descriptor to rotate an image
+ * @param dsc pointer to an `lv_img_transform_dsc_t` variable whose `cfg` field is initialized
+ */
+void lv_img_buf_transform_init(lv_img_transform_dsc_t * dsc);
+
+/**
+ * Get which color and opa would come to a pixel if it were rotated
+ * @param dsc a descriptor initialized by `lv_img_buf_rotate_init`
+ * @param x the coordinate which color and opa should be get
+ * @param y the coordinate which color and opa should be get
+ * @return true: there is valid pixel on these x/y coordinates; false: the rotated pixel was out of the image
+ * @note the result is written back to `dsc->res_color` and `dsc->res_opa`
+ */
+bool lv_img_buf_transform(lv_img_transform_dsc_t * dsc, lv_coord_t x, lv_coord_t y);
+
+
+/**********************
+ * MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_IMG_BUF_H*/
diff --git a/src/lv_draw/lv_img_cache.c b/src/lv_draw/lv_img_cache.c
index eab900c8e..5ca48e438 100644
--- a/src/lv_draw/lv_img_cache.c
+++ b/src/lv_draw/lv_img_cache.c
@@ -6,7 +6,10 @@
/*********************
* INCLUDES
*********************/
+#include "../lv_core/lv_debug.h"
#include "lv_img_cache.h"
+#include "lv_img_decoder.h"
+#include "lv_draw_img.h"
#include "../lv_hal/lv_hal_tick.h"
#include "../lv_misc/lv_gc.h"
@@ -79,7 +82,15 @@ lv_img_cache_entry_t * lv_img_cache_open(const void * src, const lv_style_t * st
/*Is the image cached?*/
lv_img_cache_entry_t * cached_src = NULL;
for(i = 0; i < entry_cnt; i++) {
- if(cache[i].dec_dsc.src == src) {
+ bool match = false;
+ lv_img_src_t src_type = lv_img_src_get_type(cache[i].dec_dsc.src);
+ if(src_type == LV_IMG_SRC_VARIABLE) {
+ if(cache[i].dec_dsc.src == src) match = true;
+ } else if(src_type == LV_IMG_SRC_FILE) {
+ if(strcmp(cache[i].dec_dsc.src, src) == 0) match = true;
+ }
+
+ if(match) {
/* If opened increment its life.
* Image difficult to open should live longer to keep avoid frequent their recaching.
* Therefore increase `life` with `time_to_open`*/
@@ -152,7 +163,7 @@ void lv_img_cache_set_size(uint16_t new_entry_cnt)
/*Reallocate the cache*/
LV_GC_ROOT(_lv_img_cache_array) = lv_mem_alloc(sizeof(lv_img_cache_entry_t) * new_entry_cnt);
- lv_mem_assert(LV_GC_ROOT(_lv_img_cache_array));
+ LV_ASSERT_MEM(LV_GC_ROOT(_lv_img_cache_array));
if(LV_GC_ROOT(_lv_img_cache_array) == NULL) {
entry_cnt = 0;
return;
diff --git a/src/lv_draw/lv_img_decoder.c b/src/lv_draw/lv_img_decoder.c
index 730739c16..6c130b2f3 100644
--- a/src/lv_draw/lv_img_decoder.c
+++ b/src/lv_draw/lv_img_decoder.c
@@ -7,6 +7,7 @@
* INCLUDES
*********************/
#include "lv_img_decoder.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw_img.h"
#include "../lv_misc/lv_ll.h"
#include "../lv_misc/lv_color.h"
@@ -31,6 +32,7 @@ typedef struct
lv_fs_file_t * f;
#endif
lv_color_t * palette;
+ lv_opa_t * opa;
} lv_img_decoder_built_in_data_t;
/**********************
@@ -68,7 +70,7 @@ void lv_img_decoder_init(void)
decoder = lv_img_decoder_create();
if(decoder == NULL) {
LV_LOG_WARN("lv_img_decoder_init: out of memory");
- lv_mem_assert(decoder);
+ LV_ASSERT_MEM(decoder);
return;
}
@@ -118,10 +120,17 @@ lv_res_t lv_img_decoder_get_info(const char * src, lv_img_header_t * header)
lv_res_t lv_img_decoder_open(lv_img_decoder_dsc_t * dsc, const void * src, const lv_style_t * style)
{
dsc->style = style;
- dsc->src = src;
dsc->src_type = lv_img_src_get_type(src);
dsc->user_data = NULL;
+ if(dsc->src_type == LV_IMG_SRC_FILE) {
+ size_t fnlen = strlen(src);
+ dsc->src = lv_mem_alloc(fnlen + 1);
+ strcpy((char *)dsc->src, src);
+ } else {
+ dsc->src = src;
+ }
+
lv_res_t res = LV_RES_INV;
lv_img_decoder_t * d;
@@ -175,6 +184,11 @@ void lv_img_decoder_close(lv_img_decoder_dsc_t * dsc)
{
if(dsc->decoder) {
if(dsc->decoder->close_cb) dsc->decoder->close_cb(dsc->decoder, dsc);
+
+ if(dsc->src_type == LV_IMG_SRC_FILE) {
+ lv_mem_free(dsc->src);
+ dsc->src = NULL;
+ }
}
}
@@ -186,7 +200,7 @@ lv_img_decoder_t * lv_img_decoder_create(void)
{
lv_img_decoder_t * decoder;
decoder = lv_ll_ins_head(&LV_GC_ROOT(_lv_img_defoder_ll));
- lv_mem_assert(decoder);
+ LV_ASSERT_MEM(decoder);
if(decoder == NULL) return NULL;
memset(decoder, 0, sizeof(lv_img_decoder_t));
@@ -200,7 +214,7 @@ lv_img_decoder_t * lv_img_decoder_create(void)
*/
void lv_img_decoder_delete(lv_img_decoder_t * decoder)
{
- lv_ll_rem(&LV_GC_ROOT(_lv_img_defoder_ll), decoder);
+ lv_ll_remove(&LV_GC_ROOT(_lv_img_defoder_ll), decoder);
lv_mem_free(decoder);
}
@@ -321,7 +335,7 @@ lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder
dsc->user_data = lv_mem_alloc(sizeof(lv_img_decoder_built_in_data_t));
if(dsc->user_data == NULL) {
LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
- lv_mem_assert(dsc->user_data);
+ LV_ASSERT_MEM(dsc->user_data);
}
memset(dsc->user_data, 0, sizeof(lv_img_decoder_built_in_data_t));
}
@@ -330,7 +344,7 @@ lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder
user_data->f = lv_mem_alloc(sizeof(f));
if(user_data->f == NULL) {
LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
- lv_mem_assert(user_data->f);
+ LV_ASSERT_MEM(user_data->f);
}
memcpy(user_data->f, &f, sizeof(f));
@@ -339,6 +353,11 @@ lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder
LV_LOG_WARN("Image built-in decoder cannot read file because LV_USE_FILESYSTEM = 0");
return LV_RES_INV;
#endif
+ } else if(dsc->src_type == LV_IMG_SRC_VARIABLE) {
+ /*The variables should have valid data*/
+ if(((lv_img_dsc_t *)dsc->src)->data == NULL) {
+ return LV_RES_INV;
+ }
}
lv_img_cf_t cf = dsc->header.cf;
@@ -360,7 +379,7 @@ lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder
cf == LV_IMG_CF_INDEXED_8BIT) {
#if LV_IMG_CF_INDEXED
- uint8_t px_size = lv_img_color_format_get_px_size(cf);
+ uint8_t px_size = lv_img_cf_get_px_size(cf);
uint32_t palette_size = 1 << px_size;
/*Allocate the palette*/
@@ -368,17 +387,18 @@ lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder
dsc->user_data = lv_mem_alloc(sizeof(lv_img_decoder_built_in_data_t));
if(dsc->user_data == NULL) {
LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
- lv_mem_assert(dsc->user_data);
+ LV_ASSERT_MEM(dsc->user_data);
}
memset(dsc->user_data, 0, sizeof(lv_img_decoder_built_in_data_t));
}
lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
user_data->palette = lv_mem_alloc(palette_size * sizeof(lv_color_t));
- if(user_data->palette == NULL) {
+ user_data->opa = lv_mem_alloc(palette_size * sizeof(lv_opa_t));
+ if(user_data->palette == NULL || user_data->opa == NULL) {
LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
#if LV_USE_FILESYSTEM
- lv_mem_assert(user_data->f);
+ LV_ASSERT_MEM(user_data->f);
#endif
}
@@ -386,7 +406,13 @@ lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder
/*Read the palette from file*/
#if LV_USE_FILESYSTEM
lv_fs_seek(user_data->f, 4); /*Skip the header*/
- lv_fs_read(user_data->f, user_data->palette, palette_size * sizeof(lv_color_t), NULL);
+ lv_color32_t cur_color;
+ uint32_t i;
+ for(i = 0; i < palette_size; i++) {
+ lv_fs_read(user_data->f, &cur_color, sizeof(lv_color32_t), NULL);
+ user_data->palette[i] = lv_color_make(cur_color.ch.red, cur_color.ch.green, cur_color.ch.blue);
+ user_data->opa[i] = cur_color.ch.alpha;
+ }
#else
LV_LOG_WARN("Image built-in decoder can read the palette because LV_USE_FILESYSTEM = 0");
return LV_RES_INV;
@@ -395,9 +421,11 @@ lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder
/*The palette begins in the beginning of the image data. Just point to it.*/
lv_color32_t * palette_p = (lv_color32_t *)((lv_img_dsc_t *)dsc->src)->data;
+
uint32_t i;
for(i = 0; i < palette_size; i++) {
user_data->palette[i] = lv_color_make(palette_p[i].ch.red, palette_p[i].ch.green, palette_p[i].ch.blue);
+ user_data->opa[i] = palette_p[i].ch.alpha;
}
}
@@ -487,6 +515,7 @@ void lv_img_decoder_built_in_close(lv_img_decoder_t * decoder, lv_img_decoder_ds
}
#endif
if(user_data->palette) lv_mem_free(user_data->palette);
+ if(user_data->opa) lv_mem_free(user_data->opa);
lv_mem_free(user_data);
@@ -505,7 +534,7 @@ static lv_res_t lv_img_decoder_built_in_line_true_color(lv_img_decoder_dsc_t * d
#if LV_USE_FILESYSTEM
lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
lv_fs_res_t res;
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf);
+ uint8_t px_size = lv_img_cf_get_px_size(dsc->header.cf);
uint32_t pos = ((y * dsc->header.w + x) * px_size) >> 3;
pos += 4; /*Skip the header*/
@@ -557,7 +586,7 @@ static lv_res_t lv_img_decoder_built_in_line_alpha(lv_img_decoder_dsc_t * dsc, l
}
const lv_opa_t * opa_table = NULL;
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf);
+ uint8_t px_size = lv_img_cf_get_px_size(dsc->header.cf);
uint16_t mask = (1 << px_size) - 1; /*E.g. px_size = 2; mask = 0x03*/
lv_coord_t w = 0;
@@ -594,7 +623,7 @@ static lv_res_t lv_img_decoder_built_in_line_alpha(lv_img_decoder_dsc_t * dsc, l
#if LV_USE_FILESYSTEM
lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
- uint8_t fs_buf[LV_HOR_RES_MAX];
+ uint8_t * fs_buf = lv_mem_buf_get(w);
#endif
const uint8_t * data_tmp = NULL;
@@ -628,7 +657,9 @@ static lv_res_t lv_img_decoder_built_in_line_alpha(lv_img_decoder_dsc_t * dsc, l
data_tmp++;
}
}
-
+#if LV_USE_FILESYSTEM
+ lv_mem_buf_release(fs_buf);
+#endif
return LV_RES_OK;
#else
@@ -642,7 +673,7 @@ static lv_res_t lv_img_decoder_built_in_line_indexed(lv_img_decoder_dsc_t * dsc,
{
#if LV_IMG_CF_INDEXED
- uint8_t px_size = lv_img_color_format_get_px_size(dsc->header.cf);
+ uint8_t px_size = lv_img_cf_get_px_size(dsc->header.cf);
uint16_t mask = (1 << px_size) - 1; /*E.g. px_size = 2; mask = 0x03*/
lv_coord_t w = 0;
@@ -681,7 +712,7 @@ static lv_res_t lv_img_decoder_built_in_line_indexed(lv_img_decoder_dsc_t * dsc,
lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
#if LV_USE_FILESYSTEM
- uint8_t fs_buf[LV_HOR_RES_MAX];
+ uint8_t * fs_buf = lv_mem_buf_get(w);
#endif
const uint8_t * data_tmp = NULL;
if(dsc->src_type == LV_IMG_SRC_VARIABLE) {
@@ -699,13 +730,24 @@ static lv_res_t lv_img_decoder_built_in_line_indexed(lv_img_decoder_dsc_t * dsc,
#endif
}
- uint8_t byte_act = 0;
uint8_t val_act;
lv_coord_t i;
- lv_color_t * cbuf = (lv_color_t *)buf;
for(i = 0; i < len; i++) {
- val_act = (data_tmp[byte_act] & (mask << pos)) >> pos;
- cbuf[i] = user_data->palette[val_act];
+ val_act = (*data_tmp & (mask << pos)) >> pos;
+
+ lv_color_t color = user_data->palette[val_act];
+#if LV_COLOR_DEPTH == 8 || LV_COLOR_DEPTH == 1
+ buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE] = color.full;
+#elif LV_COLOR_DEPTH == 16
+ /*Because of Alpha byte 16 bit color can start on odd address which can cause crash*/
+ buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE] = color.full & 0xFF;
+ buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE + 1] = (color.full >> 8) & 0xFF;
+#elif LV_COLOR_DEPTH == 32
+ *((uint32_t *)&buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE]) = color.full;
+#else
+#error "Invalid LV_COLOR_DEPTH. Check it in lv_conf.h"
+#endif
+ buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE + LV_IMG_PX_SIZE_ALPHA_BYTE - 1] = user_data->opa[val_act];
pos -= px_size;
if(pos < 0) {
@@ -713,7 +755,9 @@ static lv_res_t lv_img_decoder_built_in_line_indexed(lv_img_decoder_dsc_t * dsc,
data_tmp++;
}
}
-
+#if LV_USE_FILESYSTEM
+ lv_mem_buf_release(fs_buf);
+#endif
return LV_RES_OK;
#else
LV_LOG_WARN("Image built-in indexed line reader failed because LV_IMG_CF_INDEXED is 0 in lv_conf.h");
diff --git a/src/lv_draw/lv_img_decoder.h b/src/lv_draw/lv_img_decoder.h
index fb7af8324..a1713e0c0 100644
--- a/src/lv_draw/lv_img_decoder.h
+++ b/src/lv_draw/lv_img_decoder.h
@@ -20,6 +20,7 @@ extern "C" {
#endif
#include
+#include "lv_img_buf.h"
#include "../lv_misc/lv_fs.h"
#include "../lv_misc/lv_types.h"
#include "../lv_misc/lv_area.h"
@@ -28,14 +29,6 @@ extern "C" {
/*********************
* DEFINES
*********************/
-/*If image pixels contains alpha we need to know how much byte is a pixel*/
-#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8
-#define LV_IMG_PX_SIZE_ALPHA_BYTE 2
-#elif LV_COLOR_DEPTH == 16
-#define LV_IMG_PX_SIZE_ALPHA_BYTE 3
-#elif LV_COLOR_DEPTH == 32
-#define LV_IMG_PX_SIZE_ALPHA_BYTE 4
-#endif
/**********************
* TYPEDEFS
@@ -51,78 +44,6 @@ enum {
};
typedef uint8_t lv_img_src_t;
-/**
- * LittlevGL image header
- */
-typedef struct
-{
-
- /* The first 8 bit is very important to distinguish the different source types.
- * For more info see `lv_img_get_src_type()` in lv_img.c */
- uint32_t cf : 5; /* Color format: See `lv_img_color_format_t`*/
- uint32_t always_zero : 3; /*It the upper bits of the first byte. Always zero to look like a
- non-printable character*/
-
- uint32_t reserved : 2; /*Reserved to be used later*/
-
- uint32_t w : 11; /*Width of the image map*/
- uint32_t h : 11; /*Height of the image map*/
-} lv_img_header_t;
-
-/*Image color format*/
-enum {
- LV_IMG_CF_UNKNOWN = 0,
-
- LV_IMG_CF_RAW, /**< Contains the file as it is. Needs custom decoder function*/
- LV_IMG_CF_RAW_ALPHA, /**< Contains the file as it is. The image has alpha. Needs custom decoder
- function*/
- LV_IMG_CF_RAW_CHROMA_KEYED, /**< Contains the file as it is. The image is chroma keyed. Needs
- custom decoder function*/
-
- LV_IMG_CF_TRUE_COLOR, /**< Color format and depth should match with LV_COLOR settings*/
- LV_IMG_CF_TRUE_COLOR_ALPHA, /**< Same as `LV_IMG_CF_TRUE_COLOR` but every pixel has an alpha byte*/
- LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED, /**< Same as `LV_IMG_CF_TRUE_COLOR` but LV_COLOR_TRANSP pixels
- will be transparent*/
-
- LV_IMG_CF_INDEXED_1BIT, /**< Can have 2 different colors in a palette (always chroma keyed)*/
- LV_IMG_CF_INDEXED_2BIT, /**< Can have 4 different colors in a palette (always chroma keyed)*/
- LV_IMG_CF_INDEXED_4BIT, /**< Can have 16 different colors in a palette (always chroma keyed)*/
- LV_IMG_CF_INDEXED_8BIT, /**< Can have 256 different colors in a palette (always chroma keyed)*/
-
- LV_IMG_CF_ALPHA_1BIT, /**< Can have one color and it can be drawn or not*/
- LV_IMG_CF_ALPHA_2BIT, /**< Can have one color but 4 different alpha value*/
- LV_IMG_CF_ALPHA_4BIT, /**< Can have one color but 16 different alpha value*/
- LV_IMG_CF_ALPHA_8BIT, /**< Can have one color but 256 different alpha value*/
-
- LV_IMG_CF_RESERVED_15, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_16, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_17, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_18, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_19, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_20, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_21, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_22, /**< Reserved for further use. */
- LV_IMG_CF_RESERVED_23, /**< Reserved for further use. */
-
- LV_IMG_CF_USER_ENCODED_0, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_1, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_2, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_3, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_4, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_5, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_6, /**< User holder encoding format. */
- LV_IMG_CF_USER_ENCODED_7, /**< User holder encoding format. */
-};
-typedef uint8_t lv_img_cf_t;
-
-/** Image header it is compatible with
- * the result from image converter utility*/
-typedef struct
-{
- lv_img_header_t header;
- uint32_t data_size;
- const uint8_t * data;
-} lv_img_dsc_t;
/* Decoder function definitions */
diff --git a/src/lv_font/lv_font.h b/src/lv_font/lv_font.h
index e639a54a3..27936274e 100644
--- a/src/lv_font/lv_font.h
+++ b/src/lv_font/lv_font.h
@@ -24,6 +24,7 @@ extern "C" {
#include
#include "lv_symbol_def.h"
+#include "../lv_misc/lv_area.h"
/*********************
* DEFINES
@@ -46,14 +47,25 @@ extern "C" {
typedef struct
{
uint16_t adv_w; /**< The glyph needs this space. Draw the next glyph after this width. 8 bit integer, 4 bit fractional */
- uint8_t box_w; /**< Width of the glyph's bounding box*/
- uint8_t box_h; /**< Height of the glyph's bounding box*/
- int8_t ofs_x; /**< x offset of the bounding box*/
- int8_t ofs_y; /**< y offset of the bounding box*/
+ uint16_t box_w; /**< Width of the glyph's bounding box*/
+ uint16_t box_h; /**< Height of the glyph's bounding box*/
+ int16_t ofs_x; /**< x offset of the bounding box*/
+ int16_t ofs_y; /**< y offset of the bounding box*/
uint8_t bpp; /**< Bit-per-pixel: 1, 2, 4, 8*/
}lv_font_glyph_dsc_t;
-/*Describe the properties of a font*/
+
+/** The bitmaps might be upscaled by 3 to achieve subpixel rendering. */
+enum {
+ LV_FONT_SUBPX_NONE,
+ LV_FONT_SUBPX_HOR,
+ LV_FONT_SUBPX_VER,
+ LV_FONT_SUBPX_BOTH,
+};
+
+typedef uint8_t lv_font_subpx_t;
+
+/** Describe the properties of a font*/
typedef struct _lv_font_struct
{
/** Get a glyph's descriptor from a font*/
@@ -63,12 +75,15 @@ typedef struct _lv_font_struct
const uint8_t * (*get_glyph_bitmap)(const struct _lv_font_struct *, uint32_t);
/*Pointer to the font in a font pack (must have the same line height)*/
- uint8_t line_height; /**< The real line height where any text fits*/
- uint8_t base_line; /**< Base line measured from the top of the line_height*/
- void * dsc; /**< Store implementation specific data here*/
+ lv_coord_t line_height; /**< The real line height where any text fits*/
+ lv_coord_t base_line; /**< Base line measured from the top of the line_height*/
+ uint8_t subpx :2; /**< An element of `lv_font_subpx_t`*/
+ void * dsc; /**< Store implementation specific or run_time data or caching here*/
#if LV_USE_USER_DATA
lv_font_user_data_t user_data; /**< Custom user data for font. */
#endif
+
+
} lv_font_t;
/**********************
@@ -107,7 +122,7 @@ uint16_t lv_font_get_glyph_width(const lv_font_t * font, uint32_t letter, uint32
* @param font_p pointer to a font
* @return the height of a font
*/
-static inline uint8_t lv_font_get_line_height(const lv_font_t * font_p)
+static inline lv_coord_t lv_font_get_line_height(const lv_font_t * font_p)
{
return font_p->line_height;
}
diff --git a/src/lv_font/lv_font_fmt_txt.c b/src/lv_font/lv_font_fmt_txt.c
index d491da1f8..5601cfaf6 100644
--- a/src/lv_font/lv_font_fmt_txt.c
+++ b/src/lv_font/lv_font_fmt_txt.c
@@ -8,9 +8,12 @@
*********************/
#include "lv_font.h"
#include "lv_font_fmt_txt.h"
+#include "../lv_core/lv_debug.h"
+#include "../lv_draw/lv_draw.h"
#include "../lv_misc/lv_types.h"
#include "../lv_misc/lv_log.h"
#include "../lv_misc/lv_utils.h"
+#include "../lv_misc/lv_mem.h"
/*********************
* DEFINES
@@ -19,6 +22,11 @@
/**********************
* TYPEDEFS
**********************/
+typedef enum {
+ RLE_STATE_SINGLE = 0,
+ RLE_STATE_REPEATE,
+ RLE_STATE_COUNTER,
+}rle_state_t;
/**********************
* STATIC PROTOTYPES
@@ -29,10 +37,25 @@ static int32_t unicode_list_compare(const void * ref, const void * element);
static int32_t kern_pair_8_compare(const void * ref, const void * element);
static int32_t kern_pair_16_compare(const void * ref, const void * element);
+static void decompress(const uint8_t * in, uint8_t * out, lv_coord_t w, lv_coord_t h, uint8_t bpp);
+static void decompress_line(uint8_t * out, lv_coord_t w);
+static uint8_t get_bits(const uint8_t * in, uint32_t bit_pos, uint8_t len);
+static void bits_write(uint8_t * out, uint32_t bit_pos, uint8_t val, uint8_t len);
+static void rle_init(const uint8_t * in, uint8_t bpp);
+static uint8_t rle_next(void);
+
+
/**********************
* STATIC VARIABLES
**********************/
+static uint32_t rle_rdp;
+static const uint8_t * rle_in;
+static uint8_t rle_bpp;
+static uint8_t rle_prev_v;
+static uint8_t rle_cnt;
+static rle_state_t rle_state;
+
/**********************
* GLOBAL PROTOTYPES
**********************/
@@ -53,13 +76,42 @@ static int32_t kern_pair_16_compare(const void * ref, const void * element);
*/
const uint8_t * lv_font_get_bitmap_fmt_txt(const lv_font_t * font, uint32_t unicode_letter)
{
+ if(unicode_letter == '\t') unicode_letter = ' ';
+
lv_font_fmt_txt_dsc_t * fdsc = (lv_font_fmt_txt_dsc_t *) font->dsc;
uint32_t gid = get_glyph_dsc_id(font, unicode_letter);
- if(!gid) return false;
+ if(!gid) return NULL;
const lv_font_fmt_txt_glyph_dsc_t * gdsc = &fdsc->glyph_dsc[gid];
- if(gdsc) return &fdsc->glyph_bitmap[gdsc->bitmap_index];
+ if(fdsc->bitmap_format == LV_FONT_FMT_TXT_PLAIN) {
+ if(gdsc) return &fdsc->glyph_bitmap[gdsc->bitmap_index];
+ }
+ /*Handle compressed bitmap*/
+ else
+ {
+ static uint8_t * buf = NULL;
+
+ uint32_t gsize = gdsc->box_w * gdsc->box_h;
+ if(gsize == 0) return NULL;
+
+ uint32_t buf_size = gsize;
+ switch(fdsc->bpp) {
+ case 1: buf_size = gsize >> 3; break;
+ case 2: buf_size = gsize >> 2; break;
+ case 3: buf_size = gsize >> 1; break;
+ case 4: buf_size = gsize >> 1; break;
+ }
+
+ if(lv_mem_get_size(buf) < buf_size) {
+ buf = lv_mem_realloc(buf, buf_size);
+ LV_ASSERT_MEM(buf);
+ if(buf == NULL) return NULL;
+ }
+
+ decompress(&fdsc->glyph_bitmap[gdsc->bitmap_index], buf, gdsc->box_w , gdsc->box_h, (uint8_t)fdsc->bpp);
+ return buf;
+ }
/*If not returned earlier then the letter is not found in this font*/
return NULL;
@@ -75,6 +127,11 @@ const uint8_t * lv_font_get_bitmap_fmt_txt(const lv_font_t * font, uint32_t unic
*/
bool lv_font_get_glyph_dsc_fmt_txt(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter, uint32_t unicode_letter_next)
{
+ bool is_tab = false;
+ if(unicode_letter == '\t') {
+ unicode_letter = ' ';
+ is_tab = true;
+ }
lv_font_fmt_txt_dsc_t * fdsc = (lv_font_fmt_txt_dsc_t *) font->dsc;
uint32_t gid = get_glyph_dsc_id(font, unicode_letter);
if(!gid) return false;
@@ -90,7 +147,12 @@ bool lv_font_get_glyph_dsc_fmt_txt(const lv_font_t * font, lv_font_glyph_dsc_t *
/*Put together a glyph dsc*/
const lv_font_fmt_txt_glyph_dsc_t * gdsc = &fdsc->glyph_dsc[gid];
- uint32_t adv_w = gdsc->adv_w + ((int32_t)((int32_t)kvalue * fdsc->kern_scale) >> 4);
+ int32_t kv = ((int32_t)((int32_t)kvalue * fdsc->kern_scale) >> 4);
+
+ uint32_t adv_w = gdsc->adv_w;
+ if(is_tab) adv_w *= 2;
+
+ adv_w += kv;
adv_w = (adv_w + (1 << 3)) >> 4;
dsc_out->adv_w = adv_w;
@@ -98,7 +160,9 @@ bool lv_font_get_glyph_dsc_fmt_txt(const lv_font_t * font, lv_font_glyph_dsc_t *
dsc_out->box_w = gdsc->box_w;
dsc_out->ofs_x = gdsc->ofs_x;
dsc_out->ofs_y = gdsc->ofs_y;
- dsc_out->bpp = fdsc->bpp;
+ dsc_out->bpp = (uint8_t)fdsc->bpp;
+
+ if(is_tab) dsc_out->box_w = dsc_out->box_w * 2;
return true;
}
@@ -134,7 +198,7 @@ static uint32_t get_glyph_dsc_id(const lv_font_t * font, uint32_t letter)
uint8_t * p = lv_utils_bsearch(&rcp, fdsc->cmaps[i].unicode_list, fdsc->cmaps[i].list_length, sizeof(fdsc->cmaps[i].unicode_list[0]), unicode_list_compare);
if(p) {
- uint32_t ofs = (lv_uintptr_t)p - (lv_uintptr_t) fdsc->cmaps[i].unicode_list;
+ lv_uintptr_t ofs = (lv_uintptr_t)p - (lv_uintptr_t) fdsc->cmaps[i].unicode_list;
ofs = ofs >> 1; /*The list stores `uint16_t` so the get the index divide by 2*/
glyph_id = fdsc->cmaps[i].glyph_id_start + ofs;
}
@@ -143,7 +207,7 @@ static uint32_t get_glyph_dsc_id(const lv_font_t * font, uint32_t letter)
uint8_t * p = lv_utils_bsearch(&rcp, fdsc->cmaps[i].unicode_list, fdsc->cmaps[i].list_length, sizeof(fdsc->cmaps[i].unicode_list[0]), unicode_list_compare);
if(p) {
- uint32_t ofs = (lv_uintptr_t)p - (lv_uintptr_t) fdsc->cmaps[i].unicode_list;
+ lv_uintptr_t ofs = (lv_uintptr_t)p - (lv_uintptr_t) fdsc->cmaps[i].unicode_list;
ofs = ofs >> 1; /*The list stores `uint16_t` so the get the index divide by 2*/
const uint8_t * gid_ofs_16 = fdsc->cmaps[i].glyph_id_ofs_list;
glyph_id = fdsc->cmaps[i].glyph_id_start + gid_ofs_16[ofs];
@@ -180,7 +244,7 @@ static int8_t get_kern_value(const lv_font_t * font, uint32_t gid_left, uint32_t
/*If the `g_id_both` were found get its index from the pointer*/
if(kid_p) {
- uint32_t ofs = (lv_uintptr_t)kid_p - (lv_uintptr_t)g_ids;
+ lv_uintptr_t ofs = (lv_uintptr_t)kid_p - (lv_uintptr_t)g_ids;
ofs = ofs >> 1; /*ofs is for pair, divide by 2 to refer as a single value*/
value = kdsc->values[ofs];
}
@@ -188,12 +252,12 @@ static int8_t get_kern_value(const lv_font_t * font, uint32_t gid_left, uint32_t
/* Use binary search to find the kern value.
* The pairs are ordered left_id first, then right_id secondly. */
const uint16_t * g_ids = kdsc->glyph_ids;
- uint32_t g_id_both = (uint32_t)((uint32_t)gid_right << 8) + gid_left; /*Create one number from the ids*/
+ lv_uintptr_t g_id_both = (uint32_t)((uint32_t)gid_right << 8) + gid_left; /*Create one number from the ids*/
uint8_t * kid_p = lv_utils_bsearch(&g_id_both, g_ids, kdsc->pair_cnt, 4, kern_pair_16_compare);
/*If the `g_id_both` were found get its index from the pointer*/
if(kid_p) {
- uint32_t ofs = (lv_uintptr_t)kid_p - (lv_uintptr_t)g_ids;
+ lv_uintptr_t ofs = (lv_uintptr_t)kid_p - (lv_uintptr_t)g_ids;
ofs = ofs >> 4; /*ofs is 4 byte pairs, divide by 4 to refer as a single value*/
value = kdsc->values[ofs];
}
@@ -238,6 +302,178 @@ static int32_t kern_pair_16_compare(const void * ref, const void * element)
else return (int32_t) ref16_p[1] - element16_p[1];
}
+/**
+ * The compress a glyph's bitmap
+ * @param in the compressed bitmap
+ * @param out buffer to store the result
+ * @param px_num number of pixels in the glyph (width * height)
+ * @param bpp bit per pixel (bpp = 3 will be converted to bpp = 4)
+ */
+static void decompress(const uint8_t * in, uint8_t * out, lv_coord_t w, lv_coord_t h, uint8_t bpp)
+{
+ uint32_t wrp = 0;
+ uint8_t wr_size = bpp;
+ if(bpp == 3) wr_size = 4;
+
+ rle_init(in, bpp);
+
+ uint8_t * line_buf1 = lv_mem_buf_get(w);
+ uint8_t * line_buf2 = lv_mem_buf_get(w);
+
+ decompress_line(line_buf1, w);
+
+ lv_coord_t y;
+ lv_coord_t x;
+ for(x = 0; x < w; x++) {
+ bits_write(out,wrp, line_buf1[x], bpp);
+ wrp += wr_size;
+ }
+
+ for(y = 1; y < h; y++) {
+ decompress_line(line_buf2, w);
+
+ for(x = 0; x < w; x++) {
+ line_buf1[x] = line_buf2[x] ^ line_buf1[x];
+ bits_write(out,wrp, line_buf1[x], bpp);
+ wrp += wr_size;
+ }
+ }
+
+ lv_mem_buf_release(line_buf1);
+ lv_mem_buf_release(line_buf2);
+}
+
+/**
+ * Decompress one line. Store one pixel per byte
+ * @param out output buffer
+ * @param w width of the line in pixel count
+ */
+static void decompress_line(uint8_t * out, lv_coord_t w)
+{
+ lv_coord_t i;
+ for(i = 0; i < w; i++) {
+ out[i] = rle_next();
+ }
+}
+
+/**
+ * Read bits from an input buffer. The read can cross byte boundary.
+ * @param in the input buffer to read from.
+ * @param bit_pos index of teh first bit to read.
+ * @param len number of bits to read (must be <= 8).
+ * @return the read bits
+ */
+static uint8_t get_bits(const uint8_t * in, uint32_t bit_pos, uint8_t len)
+{
+ uint8_t res = 0;
+ uint32_t byte_pos = bit_pos >> 3;
+ bit_pos = bit_pos & 0x7;
+ uint8_t bit_mask = (uint16_t)((uint16_t) 1 << len) - 1;
+ uint16_t in16 = (in[byte_pos] << 8) + in[byte_pos + 1];
+
+ res = (in16 >> (16 - bit_pos - len)) & bit_mask;
+ return res;
+}
+
+/**
+ * Write `val` data to `bit_pos` position of `out`. The write can NOT cross byte boundary.
+ * @param out buffer where to write
+ * @param bit_pos bit index to write
+ * @param val value to write
+ * @param len length of bits to write from `val`. (Counted from the LSB).
+ * @note `len == 3` will be converted to `len = 4` and `val` will be upscaled too
+ */
+static void bits_write(uint8_t * out, uint32_t bit_pos, uint8_t val, uint8_t len)
+{
+ if(len == 3) {
+ len = 4;
+ switch(val) {
+ case 0: val = 0; break;
+ case 1: val = 2; break;
+ case 2: val = 4; break;
+ case 3: val = 6; break;
+ case 4: val = 9; break;
+ case 5: val = 11; break;
+ case 6: val = 13; break;
+ case 7: val = 15; break;
+ }
+ }
+
+ uint16_t byte_pos = bit_pos >> 3;
+ bit_pos = bit_pos & 0x7;
+ bit_pos = 8 - bit_pos - len;
+
+ uint8_t bit_mask = (uint16_t)((uint16_t) 1 << len) - 1;
+ out[byte_pos] &= ((~bit_mask) << bit_pos);
+ out[byte_pos] |= (val << bit_pos);
+}
+
+static void rle_init(const uint8_t * in, uint8_t bpp)
+{
+ rle_in = in;
+ rle_bpp = bpp;
+ rle_state = RLE_STATE_SINGLE;
+ rle_rdp = 0;
+ rle_prev_v = 0;
+ rle_cnt = 0;
+}
+
+static uint8_t rle_next(void)
+{
+ uint8_t v = 0;
+ uint8_t ret = 0;
+
+ if(rle_state == RLE_STATE_SINGLE) {
+ ret = get_bits(rle_in, rle_rdp, rle_bpp);
+ if(rle_rdp != 0 && rle_prev_v == ret) {
+ rle_cnt = 0;
+ rle_state = RLE_STATE_REPEATE;
+ }
+
+ rle_prev_v = ret;
+ rle_rdp += rle_bpp;
+ }
+ else if(rle_state == RLE_STATE_REPEATE) {
+ v = get_bits(rle_in, rle_rdp, 1);
+ rle_cnt++;
+ rle_rdp += 1;
+ if(v == 1) {
+ ret = rle_prev_v;
+ if(rle_cnt == 11) {
+ rle_cnt = get_bits(rle_in, rle_rdp, 6);
+ rle_rdp += 6;
+ if(rle_cnt != 0) {
+ rle_state = RLE_STATE_COUNTER;
+ } else {
+ ret = get_bits(rle_in, rle_rdp, rle_bpp);
+ rle_prev_v = ret;
+ rle_rdp += rle_bpp;
+ rle_state = RLE_STATE_SINGLE;
+ }
+ }
+ } else {
+ ret = get_bits(rle_in, rle_rdp, rle_bpp);
+ rle_prev_v = ret;
+ rle_rdp += rle_bpp;
+ rle_state = RLE_STATE_SINGLE;
+ }
+
+
+ }
+ else if(rle_state == RLE_STATE_COUNTER) {
+ ret = rle_prev_v;
+ rle_cnt--;
+ if(rle_cnt == 0) {
+ ret = get_bits(rle_in, rle_rdp, rle_bpp);
+ rle_prev_v = ret;
+ rle_rdp += rle_bpp;
+ rle_state = RLE_STATE_SINGLE;
+ }
+ }
+
+ return ret;
+}
+
/** Code Comparator.
*
* Compares the value of both input arguments.
diff --git a/src/lv_font/lv_font_fmt_txt.h b/src/lv_font/lv_font_fmt_txt.h
index 446a1067d..46b9d3985 100644
--- a/src/lv_font/lv_font_fmt_txt.h
+++ b/src/lv_font/lv_font_fmt_txt.h
@@ -38,14 +38,18 @@ typedef struct
#if LV_FONT_FMT_TXT_LARGE == 0
uint32_t bitmap_index : 20; /**< Start index of the bitmap. A font can be max 1 MB. */
uint32_t adv_w :12; /**< Draw the next glyph after this width. 8.4 format (real_value * 16 is stored). */
-#else
- uint32_t bitmap_index; /**< Start index of the bitmap. A font can be max 4 GB. */
- uint32_t adv_w; /**< Draw the next glyph after this width. 28.4 format (real_value * 16 is stored). */
-#endif
uint8_t box_w; /**< Width of the glyph's bounding box*/
uint8_t box_h; /**< Height of the glyph's bounding box*/
int8_t ofs_x; /**< x offset of the bounding box*/
- uint8_t ofs_y; /**< y offset of the bounding box. Measured from the top of the line*/
+ int8_t ofs_y; /**< y offset of the bounding box. Measured from the top of the line*/
+#else
+ uint32_t bitmap_index; /**< Start index of the bitmap. A font can be max 4 GB. */
+ uint32_t adv_w; /**< Draw the next glyph after this width. 28.4 format (real_value * 16 is stored). */
+ uint16_t box_w; /**< Width of the glyph's bounding box*/
+ uint16_t box_h; /**< Height of the glyph's bounding box*/
+ int16_t ofs_x; /**< x offset of the bounding box*/
+ int16_t ofs_y; /**< y offset of the bounding box. Measured from the top of the line*/
+#endif
}lv_font_fmt_txt_glyph_dsc_t;
@@ -113,7 +117,7 @@ typedef struct {
uint16_t list_length;
/** Type of this character map*/
- lv_font_fmt_txt_cmap_type_t type :2;
+ lv_font_fmt_txt_cmap_type_t type;
}lv_font_fmt_txt_cmap_t;
/** A simple mapping of kern values from pairs*/
@@ -141,7 +145,7 @@ typedef struct {
3. value = class_pair_values[(left_class-1)*right_class_cnt + (righ_class-1)]
*/
- const uint8_t * class_pair_values; /*left_class_num * right_class_num value*/
+ const int8_t * class_pair_values; /*left_class_num * right_class_num value*/
const uint8_t * left_class_mapping; /*Map the glyph_ids to classes: index -> glyph_id -> class_id*/
const uint8_t * right_class_mapping; /*Map the glyph_ids to classes: index -> glyph_id -> class_id*/
uint8_t left_class_cnt;
@@ -180,7 +184,7 @@ typedef struct {
/*Number of cmap tables*/
uint16_t cmap_num :10;
- /*Bit per pixel: 1, 2, 4 or 8*/
+ /*Bit per pixel: 1, 2, 3, 4*/
uint16_t bpp :3;
/*Type of `kern_dsc`*/
diff --git a/src/lv_font/lv_font_roboto_12.c b/src/lv_font/lv_font_roboto_12.c
index a3a08603a..3da8e899e 100644
--- a/src/lv_font/lv_font_roboto_12.c
+++ b/src/lv_font/lv_font_roboto_12.c
@@ -3,7 +3,7 @@
/*******************************************************************************
* Size: 12 px
* Bpp: 4
- * Opts:
+ * Opts: --no-compress --no-prefilter --bpp 4 --size 12 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_12.c --force-fast-kern-format
******************************************************************************/
#ifndef LV_FONT_ROBOTO_12
@@ -21,1001 +21,1140 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+20 " " */
/* U+21 "!" */
- 0x82, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0x41, 0x41,
- 0xf4,
+ 0xf, 0x10, 0xf1, 0xf, 0x10, 0xf1, 0xf, 0x0,
+ 0xf0, 0x9, 0x0, 0x30, 0xe, 0x10,
/* U+22 "\"" */
- 0x27, 0x46, 0x4f, 0x8c, 0x4b, 0x89, 0x23, 0x42,
+ 0x39, 0x93, 0x39, 0x92, 0x38, 0x91, 0x1, 0x10,
/* U+23 "#" */
- 0x0, 0x6, 0x6, 0x20, 0x4, 0xb0, 0xd1, 0x0,
- 0x78, 0xe, 0x3, 0xcf, 0xdd, 0xec, 0x0, 0xc1,
- 0x78, 0x2, 0x3e, 0x3a, 0x62, 0x4a, 0xd8, 0xf8,
- 0x40, 0x68, 0xe, 0x0, 0x9, 0x44, 0xb0, 0x0,
+ 0x0, 0x1b, 0xb, 0x10, 0x5, 0x70, 0xd0, 0x1e,
+ 0xfe, 0xef, 0xd0, 0xb, 0x15, 0x70, 0x0, 0xd0,
+ 0x84, 0x8, 0xef, 0xef, 0xe7, 0x4, 0x90, 0xd0,
+ 0x0, 0x66, 0xc, 0x0, 0x9, 0x43, 0xa0, 0x0,
/* U+24 "$" */
- 0x0, 0xc, 0x0, 0x0, 0x7, 0xd6, 0x10, 0xa,
- 0xd5, 0xbb, 0x0, 0xe4, 0x1, 0xf0, 0xb, 0x90,
- 0x0, 0x0, 0x3d, 0xd7, 0x10, 0x0, 0x4, 0xcc,
- 0x2, 0x70, 0x1, 0xf3, 0x1f, 0x30, 0x3f, 0x10,
- 0x6f, 0xdf, 0x60, 0x0, 0xf, 0x0, 0x0, 0x0,
- 0x40, 0x0,
+ 0x0, 0xd, 0x0, 0x0, 0x6, 0xf6, 0x0, 0xa,
+ 0xc7, 0xd8, 0x0, 0xf2, 0x3, 0xe0, 0xe, 0x30,
+ 0x5, 0x0, 0x6f, 0x81, 0x0, 0x0, 0x3a, 0xf5,
+ 0x0, 0x0, 0x4, 0xe0, 0x4d, 0x0, 0xf, 0x0,
+ 0xe7, 0x4a, 0xc0, 0x2, 0xaf, 0x91, 0x0, 0x0,
+ 0xd0, 0x0,
/* U+25 "%" */
- 0x6, 0x84, 0x0, 0x0, 0x3, 0xb1, 0xd0, 0x16,
- 0x0, 0x78, 0xc, 0x38, 0x50, 0x2, 0xc7, 0xc3,
- 0xc0, 0x0, 0x2, 0x41, 0xb2, 0x0, 0x0, 0x0,
- 0x78, 0x8c, 0x70, 0x0, 0x1c, 0x3c, 0xc, 0x30,
- 0xb, 0x44, 0xa0, 0xa4, 0x0, 0x20, 0xc, 0x9c,
+ 0xb, 0xc8, 0x0, 0x0, 0x5, 0x70, 0xc0, 0x28,
+ 0x0, 0x58, 0xc, 0xb, 0x10, 0x0, 0x9c, 0x65,
+ 0x70, 0x0, 0x0, 0x1, 0xc0, 0x0, 0x0, 0x0,
+ 0x94, 0x8c, 0x80, 0x0, 0x3a, 0x2b, 0xa, 0x30,
+ 0xb, 0x12, 0xa0, 0x93, 0x0, 0x0, 0x9, 0xca,
0x0,
/* U+26 "&" */
- 0x1, 0x79, 0x40, 0x0, 0xb, 0xb5, 0xf3, 0x0,
- 0xc, 0x50, 0xd4, 0x0, 0x9, 0xa9, 0xa0, 0x0,
- 0x5, 0xfc, 0x0, 0x0, 0x4f, 0x5f, 0x60, 0xf0,
- 0x89, 0x3, 0xf9, 0xc0, 0x7b, 0x0, 0x8f, 0x50,
- 0xb, 0xdc, 0xeb, 0xc1,
+ 0x2, 0xcf, 0xa0, 0x0, 0x9, 0x90, 0xb6, 0x0,
+ 0xa, 0x80, 0xc4, 0x0, 0x3, 0xec, 0x70, 0x0,
+ 0x5, 0xee, 0x0, 0x30, 0x2f, 0x29, 0xb2, 0xd0,
+ 0x5b, 0x0, 0xcc, 0x90, 0x2e, 0x10, 0x5f, 0x50,
+ 0x5, 0xdd, 0xc7, 0xe1,
/* U+27 "'" */
- 0x27, 0x4f, 0x4a, 0x23,
+ 0x67, 0x67, 0x66, 0x0,
/* U+28 "(" */
- 0x0, 0x4, 0x0, 0x8a, 0x4, 0xe0, 0xa, 0x60,
- 0xf, 0x20, 0x1f, 0x0, 0x4f, 0x0, 0x2f, 0x0,
- 0xf, 0x10, 0xb, 0x60, 0x4, 0xc0, 0x0, 0xa6,
- 0x0, 0x7,
+ 0x0, 0x2, 0x0, 0x5a, 0x1, 0xd0, 0x8, 0x70,
+ 0xd, 0x30, 0x1f, 0x0, 0x2e, 0x0, 0x3e, 0x0,
+ 0x2f, 0x0, 0xf, 0x10, 0xb, 0x50, 0x5, 0xa0,
+ 0x0, 0xc4, 0x0, 0x19,
/* U+29 ")" */
- 0x40, 0x0, 0xa8, 0x0, 0xe, 0x20, 0x7, 0xa0,
- 0x3, 0xf0, 0x0, 0xf0, 0x0, 0xf4, 0x0, 0xf1,
- 0x2, 0xf0, 0x7, 0xa0, 0xd, 0x40, 0x79, 0x0,
- 0x70, 0x0,
+ 0x20, 0x0, 0x87, 0x0, 0xd, 0x20, 0x6, 0x90,
+ 0x2, 0xe0, 0x0, 0xe2, 0x0, 0xd4, 0x0, 0xc4,
+ 0x0, 0xd3, 0x0, 0xf1, 0x3, 0xd0, 0x9, 0x60,
+ 0x2c, 0x0, 0x82, 0x0,
/* U+2A "*" */
- 0x0, 0x30, 0x1, 0x2c, 0x12, 0x4d, 0xed, 0x60,
- 0x9d, 0x90, 0x7, 0x7, 0x0,
+ 0x0, 0xd0, 0x4, 0x1c, 0x4, 0x7d, 0xfe, 0x90,
+ 0x6e, 0x80, 0x1d, 0x1d, 0x20, 0x10, 0x10,
/* U+2B "+" */
- 0x0, 0x4f, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x47,
- 0x9f, 0x77, 0x24, 0x8a, 0xf8, 0x82, 0x0, 0x4f,
- 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x14, 0x0,
+ 0x0, 0x1b, 0x0, 0x0, 0x2, 0xe0, 0x0, 0x0,
+ 0x2e, 0x0, 0x8, 0xff, 0xff, 0xf4, 0x12, 0x4e,
+ 0x22, 0x0, 0x2, 0xe0, 0x0, 0x0, 0x2e, 0x0,
0x0,
/* U+2C "," */
- 0x13, 0x4c, 0x4a, 0x23,
+ 0x4c, 0x5b, 0xa5, 0x0,
/* U+2D "-" */
- 0x0, 0x0, 0xdd, 0xd5,
+ 0xbf, 0xf1,
/* U+2E "." */
- 0x2, 0x0, 0xf1,
+ 0x4, 0x1, 0xe1,
/* U+2F "/" */
- 0x0, 0x4, 0x40, 0x0, 0xc4, 0x0, 0x2e, 0x0,
- 0x8, 0x70, 0x0, 0xe2, 0x0, 0x5b, 0x0, 0xa,
- 0x50, 0x1, 0xf0, 0x0, 0x79, 0x0, 0x9, 0x20,
+ 0x0, 0x8, 0x60, 0x0, 0xd1, 0x0, 0x3b, 0x0,
+ 0x9, 0x50, 0x0, 0xd0, 0x0, 0x4a, 0x0, 0xa,
+ 0x40, 0x0, 0xd0, 0x0, 0x59, 0x0, 0xb, 0x30,
0x0,
/* U+30 "0" */
- 0x1, 0x68, 0x50, 0xc, 0xa4, 0xd8, 0x3f, 0x0,
- 0x3f, 0x4c, 0x0, 0xf, 0x4c, 0x0, 0xf, 0x4c,
- 0x0, 0xf, 0x4c, 0x0, 0x1f, 0x1f, 0x30, 0x7c,
- 0x6, 0xfc, 0xe3, 0x0, 0x1, 0x0,
+ 0x3, 0xdf, 0xb1, 0x0, 0xe5, 0x9, 0xa0, 0x3d,
+ 0x0, 0x2f, 0x5, 0xc0, 0x0, 0xf0, 0x5c, 0x0,
+ 0xf, 0x14, 0xc0, 0x0, 0xf0, 0x3e, 0x0, 0x2f,
+ 0x0, 0xe5, 0x9, 0xa0, 0x3, 0xdf, 0xb1, 0x0,
/* U+31 "1" */
- 0x57, 0x83, 0x68, 0xf4, 0x0, 0xf4, 0x0, 0xf4,
- 0x0, 0xf4, 0x0, 0xf4, 0x0, 0xf4, 0x0, 0xf4,
- 0x0, 0xf4,
+ 0x5, 0xc4, 0xea, 0xe4, 0x10, 0xd4, 0x0, 0xd4,
+ 0x0, 0xd4, 0x0, 0xd4, 0x0, 0xd4, 0x0, 0xd4,
+ 0x0, 0xd4,
/* U+32 "2" */
- 0x1, 0x69, 0x60, 0x0, 0xca, 0x4c, 0xa0, 0x2f,
- 0x0, 0x4e, 0x0, 0x0, 0x8, 0xb0, 0x0, 0x2,
- 0xe3, 0x0, 0x1, 0xc7, 0x0, 0x0, 0xaa, 0x0,
- 0x0, 0x9c, 0x0, 0x0, 0xf, 0xff, 0xff, 0x40,
+ 0x5, 0xdf, 0xb2, 0x2, 0xe3, 0x9, 0xb0, 0x48,
+ 0x0, 0x3d, 0x0, 0x0, 0x7, 0x90, 0x0, 0x2,
+ 0xe1, 0x0, 0x1, 0xd4, 0x0, 0x0, 0xc6, 0x0,
+ 0x0, 0xb8, 0x0, 0x0, 0x4f, 0xff, 0xff, 0x40,
/* U+33 "3" */
- 0x1, 0x69, 0x61, 0xd, 0x94, 0xca, 0x3c, 0x0,
- 0x4e, 0x0, 0x0, 0x7c, 0x0, 0x6d, 0xf2, 0x0,
- 0x0, 0x8b, 0x13, 0x0, 0x1f, 0x3f, 0x30, 0x6f,
- 0x6, 0xeb, 0xf4,
+ 0x5, 0xdf, 0xb1, 0x2e, 0x20, 0x99, 0x25, 0x0,
+ 0x4c, 0x0, 0x0, 0xa8, 0x0, 0xbf, 0xd1, 0x0,
+ 0x0, 0x9a, 0x24, 0x0, 0x2e, 0x3e, 0x20, 0x8b,
+ 0x6, 0xef, 0xb1,
/* U+34 "4" */
- 0x0, 0x1, 0x72, 0x0, 0x0, 0xaf, 0x40, 0x0,
- 0x4e, 0xf4, 0x0, 0xd, 0x4f, 0x40, 0x7, 0xb0,
- 0xf4, 0x1, 0xe1, 0xf, 0x40, 0x8e, 0xbb, 0xfc,
- 0x60, 0x0, 0xf, 0x40, 0x0, 0x0, 0xf4, 0x0,
+ 0x0, 0x3, 0xf4, 0x0, 0x0, 0xcf, 0x40, 0x0,
+ 0x6a, 0xc4, 0x0, 0x1d, 0x1c, 0x40, 0x9, 0x70,
+ 0xc4, 0x3, 0xd0, 0xc, 0x40, 0xaf, 0xff, 0xff,
+ 0x70, 0x0, 0xc, 0x40, 0x0, 0x0, 0xc4, 0x0,
/* U+35 "5" */
- 0x47, 0x77, 0x69, 0xc8, 0x86, 0xc6, 0x0, 0xc,
- 0x87, 0x50, 0xfb, 0x8e, 0x94, 0x0, 0x4f, 0x40,
- 0x0, 0xff, 0x30, 0x7e, 0x6e, 0xbf, 0x40,
+ 0x6, 0xff, 0xff, 0x0, 0x88, 0x11, 0x10, 0x9,
+ 0x60, 0x0, 0x0, 0xbc, 0xec, 0x30, 0x6, 0x62,
+ 0x8e, 0x0, 0x0, 0x0, 0xe2, 0x7, 0x0, 0xd,
+ 0x30, 0xd6, 0x5, 0xe0, 0x2, 0xcf, 0xc3, 0x0,
/* U+36 "6" */
- 0x0, 0x59, 0x83, 0x0, 0x7d, 0x55, 0x40, 0xf,
- 0x20, 0x0, 0x3, 0xf2, 0x64, 0x0, 0x4f, 0xa8,
- 0xda, 0x4, 0xf0, 0x1, 0xf2, 0x1f, 0x0, 0xf,
- 0x40, 0xd7, 0x4, 0xf0, 0x3, 0xec, 0xf5, 0x0,
+ 0x0, 0x4c, 0xe0, 0x0, 0x4e, 0x51, 0x0, 0xd,
+ 0x40, 0x0, 0x1, 0xf9, 0xec, 0x20, 0x3f, 0x60,
+ 0x7d, 0x3, 0xe0, 0x0, 0xf1, 0x1f, 0x0, 0xf,
+ 0x10, 0xb8, 0x7, 0xc0, 0x1, 0xcf, 0xc2, 0x0,
/* U+37 "7" */
- 0x47, 0x77, 0x77, 0x24, 0x88, 0x89, 0xf2, 0x0,
- 0x0, 0xc6, 0x0, 0x0, 0x6c, 0x0, 0x0, 0xe,
- 0x30, 0x0, 0x5, 0xd0, 0x0, 0x0, 0x89, 0x0,
- 0x0, 0xa, 0x80, 0x0, 0x0, 0xc8, 0x0, 0x0,
+ 0x8f, 0xff, 0xff, 0x30, 0x0, 0x2, 0xd0, 0x0,
+ 0x0, 0x97, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x7,
+ 0x90, 0x0, 0x0, 0xe2, 0x0, 0x0, 0x5b, 0x0,
+ 0x0, 0xc, 0x50, 0x0, 0x3, 0xe0, 0x0, 0x0,
/* U+38 "8" */
- 0x1, 0x69, 0x60, 0x0, 0xda, 0x4d, 0x90, 0x1f,
- 0x0, 0x4d, 0x0, 0xf5, 0x8, 0xb0, 0x4, 0xef,
- 0xe2, 0x1, 0xe7, 0x8, 0xb0, 0x5c, 0x0, 0xf,
- 0x13, 0xf1, 0x4, 0xf0, 0x8, 0xeb, 0xf5, 0x0,
+ 0x3, 0xdf, 0xb1, 0x0, 0xe5, 0x9, 0xa0, 0x1f,
+ 0x0, 0x3d, 0x0, 0xd5, 0x9, 0x90, 0x4, 0xff,
+ 0xe1, 0x1, 0xe4, 0x7, 0xb0, 0x4c, 0x0, 0xf,
+ 0x2, 0xf3, 0x6, 0xd0, 0x5, 0xdf, 0xc3, 0x0,
/* U+39 "9" */
- 0x1, 0x78, 0x50, 0x1d, 0x85, 0xd6, 0x5d, 0x0,
- 0x5c, 0x7c, 0x0, 0x4f, 0x3f, 0x10, 0x7f, 0x9,
- 0xfc, 0xdf, 0x0, 0x1, 0x4e, 0x0, 0x0, 0xba,
- 0xb, 0xbd, 0xb1,
+ 0x4, 0xdf, 0x90, 0x1f, 0x31, 0xc7, 0x5b, 0x0,
+ 0x4d, 0x5b, 0x0, 0x2e, 0x1f, 0x30, 0xae, 0x5,
+ 0xde, 0x8d, 0x0, 0x0, 0x79, 0x0, 0x6, 0xe2,
+ 0x3, 0xeb, 0x30,
/* U+3A ":" */
- 0x4f, 0x0, 0x4, 0xf0,
+ 0x1e, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x40, 0x1e, 0x0,
/* U+3B ";" */
- 0x4, 0xf, 0x0, 0x0, 0x0, 0x13, 0x4c, 0x4a,
- 0x23,
+ 0x3d, 0x4, 0x0, 0x0, 0x0, 0x18, 0x3d, 0x79,
+ 0x51,
/* U+3C "<" */
- 0x0, 0x2, 0x94, 0x4, 0xaf, 0x81, 0x7e, 0x60,
- 0x0, 0x2a, 0xe7, 0x20, 0x0, 0x2a, 0xf3, 0x0,
- 0x0, 0x11,
+ 0x0, 0x2, 0x93, 0x2, 0x9f, 0x91, 0x6e, 0x71,
+ 0x0, 0x4d, 0xa3, 0x0, 0x0, 0x6e, 0xc1, 0x0,
+ 0x0, 0x62,
/* U+3D "=" */
- 0xcb, 0xbb, 0x94, 0x44, 0x43, 0x43, 0x33, 0x38,
- 0x88, 0x86,
+ 0x1e, 0xee, 0xeb, 0x1, 0x11, 0x11, 0x0, 0x0,
+ 0x0, 0x1e, 0xee, 0xeb, 0x1, 0x11, 0x11,
/* U+3E ">" */
- 0x37, 0x10, 0x0, 0x1a, 0xf9, 0x30, 0x0, 0x16,
- 0xca, 0x0, 0x6b, 0xe5, 0x3e, 0xc4, 0x0, 0x22,
+ 0x3a, 0x20, 0x0, 0x8, 0xea, 0x30, 0x0, 0x6,
+ 0xd9, 0x0, 0x3a, 0xe6, 0x1c, 0xe7, 0x0, 0x26,
0x0, 0x0,
/* U+3F "?" */
- 0x6, 0x97, 0x20, 0x6e, 0x59, 0xd0, 0x54, 0x0,
- 0xf3, 0x0, 0x4, 0xf0, 0x0, 0x1e, 0x60, 0x0,
- 0xc8, 0x0, 0x0, 0x82, 0x0, 0x0, 0x41, 0x0,
- 0x0, 0xf4, 0x0,
+ 0x9, 0xfe, 0x60, 0x6c, 0x13, 0xf0, 0x11, 0x0,
+ 0xe2, 0x0, 0x5, 0xd0, 0x0, 0x4e, 0x20, 0x0,
+ 0xc5, 0x0, 0x0, 0x51, 0x0, 0x0, 0x30, 0x0,
+ 0x0, 0xc3, 0x0,
/* U+40 "@" */
- 0x0, 0x0, 0x34, 0x30, 0x0, 0x0, 0x3, 0xc9,
- 0x58, 0xb6, 0x0, 0x2, 0xc2, 0x0, 0x0, 0xa4,
- 0x0, 0xa4, 0x5, 0xba, 0x21, 0xb0, 0xd, 0x4,
- 0xe1, 0x86, 0xc, 0x4, 0xb0, 0xa6, 0x9, 0x40,
- 0xc1, 0x48, 0xc, 0x40, 0xc4, 0xc, 0x14, 0xb0,
- 0xc5, 0xd, 0x41, 0xb0, 0x1e, 0x5, 0xec, 0xab,
- 0xd3, 0x0, 0xa7, 0x1, 0x0, 0x0, 0x0, 0x1,
- 0xc6, 0x30, 0x42, 0x0, 0x0, 0x0, 0x58, 0xb7,
- 0x20, 0x0,
+ 0x0, 0x6, 0xcd, 0xda, 0x10, 0x0, 0xa, 0x81,
+ 0x0, 0x4c, 0x10, 0x5, 0x90, 0x0, 0x0, 0x39,
+ 0x0, 0xc1, 0x5, 0xcb, 0x20, 0xb0, 0x1c, 0x2,
+ 0xc0, 0x86, 0xa, 0x14, 0x90, 0x95, 0x9, 0x40,
+ 0x92, 0x58, 0xc, 0x20, 0xa2, 0xb, 0x14, 0x90,
+ 0xb3, 0xe, 0x21, 0xb0, 0x1c, 0x4, 0xda, 0x5d,
+ 0xc2, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0xd3, 0x0, 0x11, 0x0, 0x0, 0x2, 0xad, 0xcc,
+ 0x30, 0x0,
/* U+41 "A" */
- 0x0, 0x6, 0x30, 0x0, 0x0, 0x1f, 0xb0, 0x0,
- 0x0, 0x6c, 0xf1, 0x0, 0x0, 0xd6, 0xb6, 0x0,
- 0x2, 0xf0, 0x6b, 0x0, 0x7, 0xb3, 0x4f, 0x20,
- 0xe, 0xdc, 0xce, 0x70, 0x3f, 0x0, 0x6, 0xc0,
- 0x9a, 0x0, 0x1, 0xf2,
+ 0x0, 0xc, 0x90, 0x0, 0x0, 0x2e, 0xe0, 0x0,
+ 0x0, 0x79, 0xc4, 0x0, 0x0, 0xd4, 0x7a, 0x0,
+ 0x3, 0xe0, 0x1f, 0x10, 0x9, 0xa0, 0xc, 0x60,
+ 0xe, 0xff, 0xff, 0xc0, 0x4e, 0x0, 0x1, 0xf2,
+ 0xa8, 0x0, 0x0, 0xb7,
/* U+42 "B" */
- 0x87, 0x77, 0x20, 0xf, 0x88, 0x9f, 0x30, 0xf0,
- 0x0, 0xa8, 0xf, 0x0, 0x1d, 0x60, 0xff, 0xff,
- 0xc1, 0xf, 0x0, 0x8, 0xd0, 0xf0, 0x0, 0xf,
- 0x1f, 0x0, 0x6, 0xf0, 0xff, 0xff, 0xd4, 0x0,
+ 0xf, 0xff, 0xe8, 0x0, 0xf1, 0x2, 0xd5, 0xf,
+ 0x10, 0x9, 0x80, 0xf1, 0x2, 0xe4, 0xf, 0xff,
+ 0xfb, 0x0, 0xf1, 0x1, 0xb8, 0xf, 0x10, 0x5,
+ 0xc0, 0xf1, 0x1, 0xb9, 0xf, 0xff, 0xea, 0x0,
/* U+43 "C" */
- 0x0, 0x58, 0x85, 0x0, 0x7e, 0x65, 0xd9, 0x1e,
- 0x40, 0x2, 0xf4, 0xf0, 0x0, 0x4, 0x4c, 0x0,
- 0x0, 0x4, 0xc0, 0x0, 0x0, 0x3f, 0x10, 0x0,
- 0xc0, 0xc9, 0x0, 0x7d, 0x1, 0xcd, 0xdc, 0x30,
+ 0x0, 0x8e, 0xea, 0x10, 0x9, 0xb2, 0x19, 0xc0,
+ 0x1f, 0x10, 0x0, 0xe2, 0x3e, 0x0, 0x0, 0x0,
+ 0x4d, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x0,
+ 0x1f, 0x10, 0x0, 0xe2, 0x9, 0xb2, 0x18, 0xc0,
+ 0x0, 0x9f, 0xea, 0x10,
/* U+44 "D" */
- 0x87, 0x75, 0x20, 0xf, 0xa8, 0x9e, 0x50, 0xf4,
- 0x0, 0x4f, 0x1f, 0x40, 0x0, 0xe4, 0xf4, 0x0,
- 0xc, 0x7f, 0x40, 0x0, 0xc5, 0xf4, 0x0, 0x1f,
- 0x3f, 0x40, 0x1a, 0xb0, 0xff, 0xfe, 0x81, 0x0,
+ 0xf, 0xff, 0xd4, 0x0, 0xf, 0x10, 0x4e, 0x40,
+ 0xf, 0x10, 0x4, 0xd0, 0xf, 0x10, 0x0, 0xf1,
+ 0xf, 0x10, 0x0, 0xf2, 0xf, 0x10, 0x0, 0xf1,
+ 0xf, 0x10, 0x5, 0xd0, 0xf, 0x10, 0x4e, 0x40,
+ 0xf, 0xff, 0xd4, 0x0,
/* U+45 "E" */
- 0x87, 0x77, 0x72, 0xf8, 0x88, 0x82, 0xf0, 0x0,
- 0x0, 0xf0, 0x0, 0x0, 0xfb, 0xbb, 0x60, 0xf0,
- 0x0, 0x0, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0,
- 0xff, 0xff, 0xf4,
+ 0xf, 0xff, 0xff, 0x50, 0xf1, 0x0, 0x0, 0xf,
+ 0x10, 0x0, 0x0, 0xf1, 0x0, 0x0, 0xf, 0xff,
+ 0xfd, 0x0, 0xf1, 0x0, 0x0, 0xf, 0x10, 0x0,
+ 0x0, 0xf1, 0x0, 0x0, 0xf, 0xff, 0xff, 0x60,
/* U+46 "F" */
- 0x87, 0x77, 0x72, 0xf8, 0x88, 0x82, 0xf0, 0x0,
- 0x0, 0xf0, 0x0, 0x0, 0xfb, 0xbb, 0x90, 0xf4,
- 0x44, 0x30, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0,
- 0xf0, 0x0, 0x0,
+ 0xf, 0xff, 0xff, 0x40, 0xf1, 0x0, 0x0, 0xf,
+ 0x10, 0x0, 0x0, 0xf1, 0x0, 0x0, 0xf, 0xff,
+ 0xfa, 0x0, 0xf1, 0x0, 0x0, 0xf, 0x10, 0x0,
+ 0x0, 0xf1, 0x0, 0x0, 0xf, 0x10, 0x0, 0x0,
/* U+47 "G" */
- 0x0, 0x48, 0x85, 0x0, 0x7, 0xe6, 0x5d, 0x90,
- 0x1e, 0x30, 0x2, 0xf0, 0x4f, 0x0, 0x0, 0x0,
- 0x4f, 0x0, 0x43, 0x31, 0x4f, 0x0, 0xcc, 0xf4,
- 0x3f, 0x10, 0x0, 0xf4, 0xc, 0x90, 0x2, 0xf3,
- 0x1, 0xbe, 0xbf, 0x60, 0x0, 0x0, 0x10, 0x0,
+ 0x0, 0x8e, 0xfb, 0x20, 0x9, 0xb2, 0x7, 0xe0,
+ 0x1f, 0x20, 0x0, 0x61, 0x3e, 0x0, 0x0, 0x0,
+ 0x4d, 0x0, 0xcf, 0xf4, 0x3e, 0x0, 0x0, 0xd4,
+ 0xf, 0x20, 0x0, 0xd4, 0x8, 0xd2, 0x4, 0xf3,
+ 0x0, 0x7e, 0xfd, 0x60,
/* U+48 "H" */
- 0x82, 0x0, 0x6, 0x4f, 0x40, 0x0, 0xc8, 0xf4,
- 0x0, 0xc, 0x8f, 0x40, 0x0, 0xc8, 0xfc, 0xbb,
- 0xbe, 0x8f, 0x74, 0x44, 0xd8, 0xf4, 0x0, 0xc,
- 0x8f, 0x40, 0x0, 0xc8, 0xf4, 0x0, 0xc, 0x80,
+ 0xf, 0x10, 0x0, 0x98, 0xf, 0x10, 0x0, 0x98,
+ 0xf, 0x10, 0x0, 0x98, 0xf, 0x10, 0x0, 0x98,
+ 0xf, 0xff, 0xff, 0xf8, 0xf, 0x10, 0x0, 0x98,
+ 0xf, 0x10, 0x0, 0x98, 0xf, 0x10, 0x0, 0x98,
+ 0xf, 0x10, 0x0, 0x98,
/* U+49 "I" */
- 0x72, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
- 0xe4,
+ 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
+ 0xe3,
/* U+4A "J" */
- 0x0, 0x0, 0x44, 0x0, 0x0, 0x88, 0x0, 0x0,
- 0x88, 0x0, 0x0, 0x88, 0x0, 0x0, 0x88, 0x0,
- 0x0, 0x88, 0x22, 0x0, 0x88, 0x7c, 0x0, 0xe7,
- 0xc, 0xdd, 0xb0,
+ 0x0, 0x0, 0x7b, 0x0, 0x0, 0x7b, 0x0, 0x0,
+ 0x7b, 0x0, 0x0, 0x7b, 0x0, 0x0, 0x7b, 0x0,
+ 0x0, 0x7b, 0x64, 0x0, 0x7a, 0x7c, 0x12, 0xd6,
+ 0x9, 0xee, 0x90,
/* U+4B "K" */
- 0x80, 0x0, 0x37, 0xf, 0x0, 0x1d, 0x60, 0xf0,
- 0xc, 0x90, 0xf, 0x9, 0xb0, 0x0, 0xfb, 0xf2,
- 0x0, 0xf, 0x4c, 0x90, 0x0, 0xf0, 0x1e, 0x70,
- 0xf, 0x0, 0x3f, 0x50, 0xf0, 0x0, 0x6f, 0x30,
+ 0xf, 0x10, 0x8, 0xc0, 0xf, 0x10, 0x5e, 0x10,
+ 0xf, 0x13, 0xe3, 0x0, 0xf, 0x4e, 0x40, 0x0,
+ 0xf, 0xef, 0x40, 0x0, 0xf, 0x85, 0xe1, 0x0,
+ 0xf, 0x10, 0x9b, 0x0, 0xf, 0x10, 0xd, 0x70,
+ 0xf, 0x10, 0x3, 0xf3,
/* U+4C "L" */
- 0x82, 0x0, 0x0, 0xf4, 0x0, 0x0, 0xf4, 0x0,
- 0x0, 0xf4, 0x0, 0x0, 0xf4, 0x0, 0x0, 0xf4,
- 0x0, 0x0, 0xf4, 0x0, 0x0, 0xf4, 0x0, 0x0,
- 0xff, 0xff, 0xf4,
+ 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf,
+ 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf, 0x20,
+ 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf, 0x20, 0x0,
+ 0x0, 0xf2, 0x0, 0x0, 0xf, 0xff, 0xff, 0x20,
/* U+4D "M" */
- 0x85, 0x0, 0x0, 0x17, 0x4f, 0xd0, 0x0, 0x7,
- 0xf8, 0xfe, 0x40, 0x0, 0xef, 0x8f, 0x6a, 0x0,
- 0x4d, 0xc8, 0xf1, 0xf1, 0xa, 0x6c, 0x8f, 0xa,
- 0x71, 0xf1, 0xc8, 0xf0, 0x3e, 0x7a, 0xc, 0x8f,
- 0x0, 0xde, 0x30, 0xc8, 0xf0, 0x6, 0xd0, 0xc,
- 0x80,
+ 0xf, 0xa0, 0x0, 0x2, 0xf7, 0xf, 0xf0, 0x0,
+ 0x8, 0xf7, 0xf, 0xb6, 0x0, 0xe, 0xb7, 0xf,
+ 0x5c, 0x0, 0x4c, 0x97, 0xf, 0x1e, 0x20, 0xb6,
+ 0x97, 0xf, 0x18, 0x81, 0xe0, 0xa7, 0xf, 0x12,
+ 0xe7, 0x90, 0xa7, 0xf, 0x10, 0xcf, 0x30, 0xa7,
+ 0xf, 0x10, 0x6d, 0x0, 0xa7,
/* U+4E "N" */
- 0x83, 0x0, 0x6, 0x4f, 0xb0, 0x0, 0xc8, 0xff,
- 0x70, 0xc, 0x8f, 0x7f, 0x20, 0xc8, 0xf4, 0x9a,
- 0xc, 0x8f, 0x41, 0xe5, 0xc8, 0xf4, 0x4, 0xed,
- 0x8f, 0x40, 0xb, 0xf8, 0xf4, 0x0, 0x1f, 0x80,
+ 0xf, 0x60, 0x0, 0x98, 0xf, 0xf1, 0x0, 0x98,
+ 0xf, 0xba, 0x0, 0x98, 0xf, 0x3e, 0x40, 0x98,
+ 0xf, 0x25, 0xd0, 0x98, 0xf, 0x20, 0xb8, 0x98,
+ 0xf, 0x20, 0x2f, 0xb8, 0xf, 0x20, 0x8, 0xf8,
+ 0xf, 0x20, 0x0, 0xd8,
/* U+4F "O" */
- 0x0, 0x48, 0x85, 0x0, 0x7, 0xf7, 0x6d, 0x90,
- 0x1e, 0x20, 0x1, 0xf3, 0x4e, 0x0, 0x0, 0xc7,
- 0x4c, 0x0, 0x0, 0xc8, 0x4c, 0x0, 0x0, 0xc8,
- 0x3f, 0x0, 0x0, 0xd5, 0xc, 0x90, 0x6, 0xe1,
- 0x1, 0xce, 0xed, 0x30,
+ 0x0, 0x8e, 0xfa, 0x10, 0x8, 0xc3, 0x29, 0xc0,
+ 0xf, 0x20, 0x0, 0xd4, 0x3e, 0x0, 0x0, 0xa7,
+ 0x4d, 0x0, 0x0, 0x98, 0x3e, 0x0, 0x0, 0xa7,
+ 0xf, 0x20, 0x0, 0xd4, 0x8, 0xc2, 0x19, 0xc0,
+ 0x0, 0x8e, 0xfa, 0x10,
/* U+50 "P" */
- 0x87, 0x77, 0x40, 0xf8, 0x88, 0xd9, 0xf0, 0x0,
- 0x3f, 0xf0, 0x0, 0x2f, 0xf3, 0x35, 0xca, 0xf8,
- 0x88, 0x60, 0xf0, 0x0, 0x0, 0xf0, 0x0, 0x0,
- 0xf0, 0x0, 0x0,
+ 0xf, 0xff, 0xfb, 0x20, 0xf, 0x10, 0x8, 0xd0,
+ 0xf, 0x10, 0x0, 0xf1, 0xf, 0x10, 0x7, 0xe0,
+ 0xf, 0xff, 0xfc, 0x30, 0xf, 0x10, 0x0, 0x0,
+ 0xf, 0x10, 0x0, 0x0, 0xf, 0x10, 0x0, 0x0,
+ 0xf, 0x10, 0x0, 0x0,
/* U+51 "Q" */
- 0x0, 0x48, 0x85, 0x0, 0x7, 0xf7, 0x6d, 0x90,
- 0x1e, 0x20, 0x1, 0xf3, 0x4e, 0x0, 0x0, 0xc7,
- 0x4c, 0x0, 0x0, 0xc8, 0x4c, 0x0, 0x0, 0xc8,
- 0x3f, 0x0, 0x0, 0xd6, 0xc, 0x90, 0x6, 0xf1,
- 0x1, 0xce, 0xed, 0xf6, 0x0, 0x0, 0x0, 0x39,
+ 0x0, 0x9e, 0xfa, 0x10, 0x9, 0xc2, 0x2a, 0xc0,
+ 0x1f, 0x10, 0x0, 0xe3, 0x4d, 0x0, 0x0, 0xb6,
+ 0x5c, 0x0, 0x0, 0xa7, 0x4d, 0x0, 0x0, 0xb7,
+ 0x1f, 0x10, 0x0, 0xe3, 0x9, 0xb2, 0x19, 0xc0,
+ 0x0, 0x8e, 0xff, 0x50, 0x0, 0x0, 0x5, 0xf3,
+ 0x0, 0x0, 0x0, 0x20,
/* U+52 "R" */
- 0x87, 0x77, 0x40, 0xf, 0xa8, 0x8f, 0x70, 0xf4,
- 0x0, 0x5c, 0xf, 0x40, 0x6, 0xb0, 0xf9, 0x7b,
- 0xe3, 0xf, 0x74, 0x5d, 0x80, 0xf4, 0x0, 0x5c,
- 0xf, 0x40, 0x4, 0xc0, 0xf4, 0x0, 0x3f, 0x10,
+ 0xf, 0xff, 0xe9, 0x0, 0xf, 0x10, 0x1b, 0x80,
+ 0xf, 0x10, 0x6, 0xc0, 0xf, 0x10, 0x1c, 0x80,
+ 0xf, 0xff, 0xf9, 0x0, 0xf, 0x10, 0xa8, 0x0,
+ 0xf, 0x10, 0x2e, 0x0, 0xf, 0x10, 0xb, 0x70,
+ 0xf, 0x10, 0x4, 0xe0,
/* U+53 "S" */
- 0x0, 0x69, 0x72, 0x0, 0x9b, 0x47, 0xf3, 0xf,
- 0x40, 0x9, 0x90, 0xd8, 0x0, 0x0, 0x3, 0xce,
- 0x93, 0x0, 0x0, 0x28, 0xf5, 0x27, 0x0, 0x8,
- 0xc1, 0xf4, 0x0, 0xb9, 0x4, 0xec, 0xdb, 0x10,
+ 0x3, 0xcf, 0xd6, 0x1, 0xf5, 0x3, 0xe4, 0x3e,
+ 0x0, 0x5, 0x60, 0xd9, 0x20, 0x0, 0x1, 0x8e,
+ 0xc4, 0x0, 0x0, 0x5, 0xe4, 0x57, 0x0, 0x8,
+ 0x93, 0xf4, 0x2, 0xc7, 0x4, 0xcf, 0xe8, 0x0,
/* U+54 "T" */
- 0x67, 0x77, 0x77, 0x76, 0x88, 0xfa, 0x88, 0x0,
- 0xf, 0x40, 0x0, 0x0, 0xf4, 0x0, 0x0, 0xf,
- 0x40, 0x0, 0x0, 0xf4, 0x0, 0x0, 0xf, 0x40,
- 0x0, 0x0, 0xf4, 0x0, 0x0, 0xf, 0x40, 0x0,
+ 0xbf, 0xff, 0xff, 0xe0, 0x0, 0xf2, 0x0, 0x0,
+ 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf,
+ 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf, 0x20,
+ 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf, 0x20, 0x0,
/* U+55 "U" */
- 0x27, 0x0, 0x0, 0x62, 0x4f, 0x0, 0x0, 0xc4,
- 0x4f, 0x0, 0x0, 0xc4, 0x4f, 0x0, 0x0, 0xc4,
- 0x4f, 0x0, 0x0, 0xc4, 0x4f, 0x0, 0x0, 0xc4,
- 0x1f, 0x10, 0x0, 0xf4, 0xd, 0x80, 0x6, 0xf0,
- 0x3, 0xcd, 0xdd, 0x30,
+ 0x2f, 0x0, 0x2, 0xf2, 0xf0, 0x0, 0x2f, 0x2f,
+ 0x0, 0x2, 0xf2, 0xf0, 0x0, 0x2f, 0x2f, 0x0,
+ 0x2, 0xf2, 0xf0, 0x0, 0x2f, 0x1f, 0x0, 0x3,
+ 0xe0, 0xc8, 0x1, 0xb9, 0x2, 0xbf, 0xe9, 0x0,
/* U+56 "V" */
- 0x64, 0x0, 0x0, 0x73, 0x8b, 0x0, 0x2, 0xf1,
- 0x2f, 0x20, 0x7, 0xb0, 0xc, 0x70, 0xe, 0x60,
- 0x6, 0xc0, 0x3f, 0x0, 0x1, 0xf2, 0x9a, 0x0,
- 0x0, 0xa7, 0xe3, 0x0, 0x0, 0x4f, 0xe0, 0x0,
- 0x0, 0xe, 0x70, 0x0,
+ 0xa8, 0x0, 0x0, 0xe4, 0x4d, 0x0, 0x3, 0xe0,
+ 0xe, 0x20, 0x8, 0x90, 0x9, 0x80, 0xd, 0x40,
+ 0x4, 0xd0, 0x3e, 0x0, 0x0, 0xe2, 0x88, 0x0,
+ 0x0, 0x87, 0xd3, 0x0, 0x0, 0x3e, 0xd0, 0x0,
+ 0x0, 0xd, 0x70, 0x0,
/* U+57 "W" */
- 0x64, 0x0, 0x46, 0x0, 0x27, 0x9b, 0x0, 0xbf,
- 0x0, 0x6e, 0x5e, 0x0, 0xfe, 0x50, 0x9a, 0x1f,
- 0x23, 0xe9, 0x90, 0xd6, 0xd, 0x68, 0xa4, 0xc0,
- 0xf2, 0x9, 0x9c, 0x50, 0xf6, 0xf0, 0x5, 0xcf,
- 0x10, 0xbc, 0xb0, 0x1, 0xfc, 0x0, 0x6f, 0x70,
- 0x0, 0xd7, 0x0, 0x2f, 0x30,
+ 0x89, 0x0, 0x3f, 0x0, 0xd, 0x44, 0xc0, 0x7,
+ 0xf4, 0x1, 0xf0, 0x1f, 0x0, 0xca, 0x80, 0x4d,
+ 0x0, 0xd3, 0xe, 0x3c, 0x7, 0x90, 0x9, 0x74,
+ 0xb0, 0xe0, 0xb5, 0x0, 0x6a, 0x86, 0xa, 0x5e,
+ 0x20, 0x2, 0xed, 0x20, 0x6a, 0xe0, 0x0, 0xe,
+ 0xd0, 0x1, 0xfa, 0x0, 0x0, 0xb9, 0x0, 0xd,
+ 0x70, 0x0,
/* U+58 "X" */
- 0x37, 0x0, 0x3, 0x70, 0x1e, 0x70, 0xd, 0x80,
- 0x4, 0xf1, 0x7e, 0x10, 0x0, 0x9a, 0xe4, 0x0,
- 0x0, 0x1f, 0xa0, 0x0, 0x0, 0x5f, 0xf1, 0x0,
- 0x1, 0xe4, 0xaa, 0x0, 0xb, 0xb0, 0x1f, 0x40,
- 0x4f, 0x20, 0x7, 0xd1,
+ 0x4e, 0x10, 0x7, 0xd0, 0xb, 0x90, 0x1f, 0x30,
+ 0x2, 0xf2, 0x9a, 0x0, 0x0, 0x7d, 0xe1, 0x0,
+ 0x0, 0x1f, 0x90, 0x0, 0x0, 0x8d, 0xf1, 0x0,
+ 0x2, 0xf2, 0x9a, 0x0, 0xc, 0x90, 0x1e, 0x40,
+ 0x5e, 0x0, 0x6, 0xd0,
/* U+59 "Y" */
- 0x56, 0x0, 0x1, 0x71, 0x4f, 0x20, 0x8, 0xc0,
- 0xa, 0xa0, 0x1e, 0x40, 0x2, 0xf2, 0x8b, 0x0,
- 0x0, 0xab, 0xf2, 0x0, 0x0, 0x1f, 0xa0, 0x0,
- 0x0, 0xc, 0x40, 0x0, 0x0, 0xc, 0x40, 0x0,
- 0x0, 0xc, 0x40, 0x0,
+ 0xa9, 0x0, 0x6, 0xd0, 0x2f, 0x10, 0xe, 0x40,
+ 0x9, 0x90, 0x6c, 0x0, 0x1, 0xe1, 0xd4, 0x0,
+ 0x0, 0x9c, 0xb0, 0x0, 0x0, 0x1f, 0x40, 0x0,
+ 0x0, 0xf, 0x20, 0x0, 0x0, 0xf, 0x20, 0x0,
+ 0x0, 0xf, 0x20, 0x0,
/* U+5A "Z" */
- 0x27, 0x77, 0x77, 0x42, 0x88, 0x89, 0xf5, 0x0,
- 0x0, 0xbb, 0x0, 0x0, 0x5f, 0x10, 0x0, 0x1e,
- 0x50, 0x0, 0xb, 0x90, 0x0, 0x5, 0xe1, 0x0,
- 0x1, 0xe4, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xc0,
+ 0x6f, 0xff, 0xff, 0x80, 0x0, 0x2, 0xf2, 0x0,
+ 0x0, 0xc7, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x2f,
+ 0x20, 0x0, 0xc, 0x70, 0x0, 0x7, 0xc0, 0x0,
+ 0x2, 0xf2, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xb0,
/* U+5B "[" */
- 0x3b, 0xb4, 0xf4, 0x4f, 0x4, 0xf0, 0x4f, 0x4,
- 0xf0, 0x4f, 0x4, 0xf0, 0x4f, 0x4, 0xf0, 0x4f,
- 0x3, 0xcc,
+ 0x2f, 0xf0, 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0,
+ 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0,
+ 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0, 0x2f, 0x0,
+ 0x2f, 0xf0,
/* U+5C "\\" */
- 0x53, 0x0, 0x6, 0xb0, 0x0, 0x1f, 0x20, 0x0,
- 0xa7, 0x0, 0x3, 0xe0, 0x0, 0xe, 0x40, 0x0,
- 0x7a, 0x0, 0x1, 0xf1, 0x0, 0xb, 0x60, 0x0,
- 0x49,
+ 0x97, 0x0, 0x3, 0xc0, 0x0, 0xd, 0x20, 0x0,
+ 0x88, 0x0, 0x2, 0xd0, 0x0, 0xc, 0x30, 0x0,
+ 0x79, 0x0, 0x1, 0xe0, 0x0, 0xb, 0x40, 0x0,
+ 0x6a,
/* U+5D "]" */
- 0xcb, 0x34, 0xd4, 0xc, 0x40, 0xc4, 0xc, 0x40,
- 0xc4, 0xc, 0x40, 0xc4, 0xc, 0x40, 0xc4, 0xc,
- 0x4c, 0xc3,
+ 0xef, 0x40, 0xd4, 0xd, 0x40, 0xd4, 0xd, 0x40,
+ 0xd4, 0xd, 0x40, 0xd4, 0xd, 0x40, 0xd4, 0xd,
+ 0x40, 0xd4, 0xef, 0x40,
/* U+5E "^" */
- 0x0, 0x80, 0x0, 0x5f, 0x50, 0xc, 0xab, 0x2,
- 0xe0, 0xe2, 0x67, 0x7, 0x60,
+ 0x0, 0x70, 0x0, 0x4f, 0x40, 0xa, 0x9a, 0x1,
+ 0xe0, 0xe1, 0x69, 0x9, 0x60,
/* U+5F "_" */
- 0xde, 0xee, 0xe6,
+ 0xef, 0xff, 0xf5,
/* U+60 "`" */
- 0x3e, 0x20, 0x38,
+ 0x4e, 0x0, 0x87,
/* U+61 "a" */
- 0x0, 0x57, 0x30, 0xc, 0xb8, 0xf6, 0x8, 0x0,
- 0x8c, 0x4, 0x9b, 0xdc, 0x3f, 0x40, 0x8c, 0x4c,
- 0x1, 0xac, 0x1d, 0xde, 0x8c,
+ 0x4, 0xde, 0xb0, 0x1f, 0x30, 0xb7, 0x2, 0x0,
+ 0x7a, 0x5, 0xcd, 0xea, 0x3e, 0x10, 0x7a, 0x4e,
+ 0x12, 0xca, 0x9, 0xfd, 0x9b,
/* U+62 "b" */
- 0x13, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x4f,
- 0x0, 0x0, 0x4, 0xf2, 0x63, 0x0, 0x4f, 0xc8,
- 0xe9, 0x4, 0xf1, 0x3, 0xf0, 0x4f, 0x0, 0xf,
- 0x44, 0xf0, 0x0, 0xf4, 0x4f, 0x30, 0x4f, 0x4,
- 0xdc, 0xcf, 0x60,
+ 0x2e, 0x0, 0x0, 0x2, 0xe0, 0x0, 0x0, 0x2e,
+ 0x0, 0x0, 0x2, 0xe9, 0xec, 0x20, 0x2f, 0x50,
+ 0x8c, 0x2, 0xe0, 0x0, 0xf1, 0x2e, 0x0, 0xe,
+ 0x22, 0xe0, 0x0, 0xf1, 0x2f, 0x50, 0x8c, 0x2,
+ 0xd9, 0xec, 0x20,
/* U+63 "c" */
- 0x0, 0x46, 0x20, 0xa, 0xb8, 0xf5, 0x3f, 0x0,
- 0x59, 0x7c, 0x0, 0x0, 0x6c, 0x0, 0x0, 0x2f,
- 0x30, 0x8a, 0x6, 0xfc, 0xd2,
+ 0x3, 0xdf, 0xb1, 0x1e, 0x40, 0x99, 0x5b, 0x0,
+ 0x16, 0x6a, 0x0, 0x0, 0x5b, 0x0, 0x3, 0x1e,
+ 0x40, 0x8a, 0x3, 0xdf, 0xa1,
/* U+64 "d" */
- 0x0, 0x0, 0x13, 0x0, 0x0, 0x4f, 0x0, 0x0,
- 0x4f, 0x0, 0x56, 0x5f, 0xc, 0xd8, 0xdf, 0x3f,
- 0x10, 0x4f, 0x6c, 0x0, 0x4f, 0x6c, 0x0, 0x4f,
- 0x2f, 0x30, 0x7f, 0x7, 0xfc, 0xaf,
+ 0x0, 0x0, 0x2e, 0x0, 0x0, 0x2e, 0x0, 0x0,
+ 0x2e, 0x4, 0xde, 0x9e, 0x1f, 0x50, 0x8e, 0x5c,
+ 0x0, 0x2e, 0x6a, 0x0, 0x2e, 0x5b, 0x0, 0x2e,
+ 0x1e, 0x30, 0x7e, 0x4, 0xdd, 0x9e,
/* U+65 "e" */
- 0x0, 0x46, 0x20, 0xa, 0xc8, 0xf4, 0x3f, 0x10,
- 0x7b, 0x7e, 0xbb, 0xcc, 0x6c, 0x0, 0x0, 0x2f,
- 0x30, 0x1, 0x5, 0xfb, 0xd6,
+ 0x3, 0xcf, 0xa0, 0xe, 0x50, 0xa8, 0x4c, 0x0,
+ 0x3d, 0x6f, 0xff, 0xfe, 0x5b, 0x0, 0x0, 0x1e,
+ 0x40, 0x47, 0x3, 0xcf, 0xc3,
/* U+66 "f" */
- 0x0, 0x33, 0x6, 0xfc, 0xc, 0x50, 0x3c, 0x62,
- 0x6e, 0xa4, 0xc, 0x40, 0xc, 0x40, 0xc, 0x40,
- 0xc, 0x40, 0xc, 0x40,
+ 0x1, 0xcf, 0x20, 0x8a, 0x0, 0xa, 0x70, 0x9,
+ 0xff, 0xb0, 0xa, 0x70, 0x0, 0xa7, 0x0, 0xa,
+ 0x70, 0x0, 0xa7, 0x0, 0xa, 0x70, 0x0, 0xa7,
+ 0x0,
/* U+67 "g" */
- 0x0, 0x56, 0x14, 0xa, 0xd8, 0xcf, 0x2f, 0x10,
- 0x4f, 0x4c, 0x0, 0x4f, 0x4c, 0x0, 0x4f, 0x2f,
- 0x30, 0x7f, 0x6, 0xfb, 0xdf, 0x0, 0x0, 0x4f,
- 0x7, 0x77, 0xc9, 0x2, 0x88, 0x60,
+ 0x4, 0xde, 0x8e, 0x1f, 0x50, 0x8e, 0x5c, 0x0,
+ 0x2e, 0x6a, 0x0, 0x2e, 0x5c, 0x0, 0x2e, 0x1f,
+ 0x50, 0x9e, 0x4, 0xde, 0x9e, 0x0, 0x0, 0x4d,
+ 0xb, 0x20, 0xb9, 0x6, 0xee, 0xa1,
/* U+68 "h" */
- 0x13, 0x0, 0x0, 0x4f, 0x0, 0x0, 0x4f, 0x0,
- 0x0, 0x4f, 0x16, 0x40, 0x4f, 0xb8, 0xda, 0x4f,
- 0x0, 0x4f, 0x4f, 0x0, 0x4f, 0x4f, 0x0, 0x4f,
- 0x4f, 0x0, 0x4f, 0x4f, 0x0, 0x4f,
+ 0x2e, 0x0, 0x0, 0x2e, 0x0, 0x0, 0x2e, 0x0,
+ 0x0, 0x2e, 0x8f, 0xd2, 0x2f, 0x60, 0x9a, 0x2e,
+ 0x0, 0x4c, 0x2e, 0x0, 0x4d, 0x2e, 0x0, 0x4d,
+ 0x2e, 0x0, 0x4d, 0x2e, 0x0, 0x4d,
/* U+69 "i" */
- 0x4f, 0x4, 0xff, 0xff, 0xff,
+ 0x1e, 0x0, 0x30, 0x1f, 0x1, 0xf0, 0x1f, 0x1,
+ 0xf0, 0x1f, 0x1, 0xf0, 0x1f, 0x0,
/* U+6A "j" */
- 0x0, 0x41, 0x0, 0xf4, 0x0, 0x0, 0x0, 0x41,
- 0x0, 0xf4, 0x0, 0xf4, 0x0, 0xf4, 0x0, 0xf4,
- 0x0, 0xf4, 0x0, 0xf4, 0x0, 0xf3, 0x28, 0xf0,
- 0x38, 0x30,
+ 0x2, 0xd0, 0x0, 0x30, 0x2, 0xf0, 0x2, 0xf0,
+ 0x2, 0xf0, 0x2, 0xf0, 0x2, 0xf0, 0x2, 0xf0,
+ 0x2, 0xf0, 0x2, 0xe0, 0x4, 0xd0, 0x5f, 0x60,
/* U+6B "k" */
- 0x13, 0x0, 0x0, 0x4f, 0x0, 0x0, 0x4f, 0x0,
- 0x0, 0x4f, 0x0, 0x33, 0x4f, 0x3, 0xe4, 0x4f,
- 0xd, 0x80, 0x4f, 0xcd, 0x0, 0x4f, 0x1f, 0x50,
- 0x4f, 0x5, 0xf1, 0x4f, 0x0, 0xba,
+ 0x2e, 0x0, 0x0, 0x2, 0xe0, 0x0, 0x0, 0x2e,
+ 0x0, 0x0, 0x2, 0xe0, 0x1d, 0x50, 0x2e, 0xc,
+ 0x80, 0x2, 0xea, 0xa0, 0x0, 0x2f, 0xfb, 0x0,
+ 0x2, 0xf2, 0xd6, 0x0, 0x2e, 0x3, 0xe1, 0x2,
+ 0xe0, 0x8, 0xb0,
/* U+6C "l" */
- 0x2, 0x0, 0xf1, 0xf, 0x10, 0xf1, 0xf, 0x10,
- 0xf1, 0xf, 0x10, 0xf1, 0xf, 0x10, 0xf1,
+ 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x1f, 0x1f,
/* U+6D "m" */
- 0x13, 0x16, 0x50, 0x27, 0x30, 0x4f, 0xb8, 0xfa,
- 0xc9, 0xf4, 0x4f, 0x0, 0x7f, 0x0, 0x98, 0x4f,
- 0x0, 0x4c, 0x0, 0x8c, 0x4f, 0x0, 0x4c, 0x0,
- 0x8c, 0x4f, 0x0, 0x4c, 0x0, 0x8c, 0x4f, 0x0,
- 0x4c, 0x0, 0x8c,
+ 0x3e, 0x9e, 0xd3, 0xbf, 0xc1, 0x3f, 0x50, 0x9f,
+ 0x40, 0xa8, 0x3e, 0x0, 0x4d, 0x0, 0x6b, 0x3e,
+ 0x0, 0x4c, 0x0, 0x6b, 0x3e, 0x0, 0x4c, 0x0,
+ 0x6b, 0x3e, 0x0, 0x4c, 0x0, 0x6b, 0x3e, 0x0,
+ 0x4c, 0x0, 0x6b,
/* U+6E "n" */
- 0x13, 0x16, 0x40, 0x4f, 0xa8, 0xda, 0x4f, 0x0,
- 0x4e, 0x4f, 0x0, 0x4f, 0x4f, 0x0, 0x4f, 0x4f,
- 0x0, 0x4f, 0x4f, 0x0, 0x4f,
+ 0x2d, 0x8f, 0xd2, 0x2f, 0x60, 0x9a, 0x2e, 0x0,
+ 0x4c, 0x2e, 0x0, 0x4d, 0x2e, 0x0, 0x4d, 0x2e,
+ 0x0, 0x4d, 0x2e, 0x0, 0x4d,
/* U+6F "o" */
- 0x0, 0x46, 0x30, 0x0, 0xad, 0x8d, 0x70, 0x3f,
- 0x10, 0x2f, 0x7, 0xc0, 0x0, 0xf4, 0x5c, 0x0,
- 0xf, 0x32, 0xf3, 0x7, 0xe0, 0x6, 0xfc, 0xe3,
+ 0x3, 0xdf, 0xb1, 0x0, 0xe5, 0x7, 0xc0, 0x5c,
+ 0x0, 0xe, 0x27, 0xa0, 0x0, 0xc4, 0x5c, 0x0,
+ 0xe, 0x20, 0xe5, 0x7, 0xc0, 0x3, 0xcf, 0xb2,
0x0,
/* U+70 "p" */
- 0x13, 0x27, 0x30, 0x4, 0xeb, 0x8f, 0x90, 0x4f,
- 0x10, 0x4f, 0x4, 0xf0, 0x0, 0xf4, 0x4f, 0x0,
- 0xf, 0x34, 0xf3, 0x5, 0xf0, 0x4f, 0xbc, 0xf6,
- 0x4, 0xf0, 0x0, 0x0, 0x4f, 0x0, 0x0, 0x2,
- 0x80, 0x0, 0x0,
+ 0x2e, 0xae, 0xc2, 0x2, 0xf3, 0x7, 0xc0, 0x2e,
+ 0x0, 0xf, 0x12, 0xe0, 0x0, 0xe2, 0x2e, 0x0,
+ 0xf, 0x2, 0xf4, 0x8, 0xc0, 0x2e, 0xae, 0xc2,
+ 0x2, 0xe0, 0x0, 0x0, 0x2e, 0x0, 0x0, 0x2,
+ 0xe0, 0x0, 0x0,
/* U+71 "q" */
- 0x0, 0x56, 0x14, 0xc, 0xd8, 0xcf, 0x3f, 0x10,
- 0x4f, 0x6c, 0x0, 0x4f, 0x6c, 0x0, 0x4f, 0x2f,
- 0x20, 0x7f, 0x7, 0xfc, 0xcf, 0x0, 0x0, 0x4f,
- 0x0, 0x0, 0x4f, 0x0, 0x0, 0x28,
+ 0x4, 0xde, 0x8e, 0x1f, 0x50, 0x8e, 0x5c, 0x0,
+ 0x3e, 0x6a, 0x0, 0x3e, 0x5c, 0x0, 0x3e, 0x1f,
+ 0x40, 0x8e, 0x4, 0xde, 0xae, 0x0, 0x0, 0x3e,
+ 0x0, 0x0, 0x3e, 0x0, 0x0, 0x3e,
/* U+72 "r" */
- 0x13, 0x27, 0x4f, 0xcb, 0x4f, 0x10, 0x4f, 0x0,
- 0x4f, 0x0, 0x4f, 0x0, 0x4f, 0x0,
+ 0x2e, 0xbd, 0x2f, 0x50, 0x2e, 0x0, 0x2e, 0x0,
+ 0x2e, 0x0, 0x2e, 0x0, 0x2e, 0x0,
/* U+73 "s" */
- 0x0, 0x56, 0x20, 0xd, 0xb9, 0xf3, 0x2f, 0x10,
- 0x54, 0x9, 0xe9, 0x40, 0x0, 0x16, 0xd6, 0x4d,
- 0x10, 0x9a, 0x9, 0xec, 0xe3,
+ 0x6, 0xee, 0x90, 0x1f, 0x21, 0xc6, 0x1f, 0x40,
+ 0x0, 0x4, 0xbe, 0x80, 0x12, 0x1, 0xb7, 0x4e,
+ 0x10, 0xa7, 0x7, 0xee, 0xa0,
/* U+74 "t" */
- 0x9, 0x30, 0x3c, 0x62, 0x6e, 0xa4, 0xc, 0x40,
- 0xc, 0x40, 0xc, 0x40, 0xc, 0x50, 0x8, 0xe7,
+ 0x6, 0x20, 0xc, 0x40, 0xdf, 0xe6, 0xc, 0x40,
+ 0xc, 0x40, 0xc, 0x40, 0xc, 0x40, 0xc, 0x60,
+ 0x5, 0xf7,
/* U+75 "u" */
- 0x13, 0x0, 0x13, 0x4f, 0x0, 0x4f, 0x4f, 0x0,
- 0x4f, 0x4f, 0x0, 0x4f, 0x4f, 0x0, 0x4f, 0xf,
- 0x20, 0x7f, 0x8, 0xfc, 0x7f,
+ 0x3e, 0x0, 0x4c, 0x3e, 0x0, 0x4c, 0x3e, 0x0,
+ 0x4c, 0x3e, 0x0, 0x4c, 0x2e, 0x0, 0x4c, 0x1f,
+ 0x31, 0xbc, 0x7, 0xee, 0x9c,
/* U+76 "v" */
- 0x32, 0x0, 0x23, 0x7b, 0x0, 0xa9, 0x1f, 0x10,
- 0xf2, 0xb, 0x65, 0xd0, 0x5, 0xba, 0x70, 0x0,
- 0xfd, 0x10, 0x0, 0x9b, 0x0,
+ 0xa7, 0x0, 0xa6, 0x5c, 0x0, 0xf1, 0xf, 0x14,
+ 0xc0, 0xa, 0x59, 0x70, 0x5, 0xad, 0x20, 0x0,
+ 0xfc, 0x0, 0x0, 0xa7, 0x0,
/* U+77 "w" */
- 0x32, 0x0, 0x40, 0x2, 0x38, 0xb0, 0x3f, 0x40,
- 0xa9, 0x3f, 0x9, 0xd9, 0xe, 0x40, 0xe3, 0xd4,
- 0xe1, 0xf0, 0xa, 0x9d, 0xd, 0x8b, 0x0, 0x5d,
- 0x90, 0x7e, 0x60, 0x1, 0xf3, 0x2, 0xf2, 0x0,
+ 0x97, 0x1, 0xf1, 0x7, 0x95, 0xa0, 0x5f, 0x50,
+ 0xb5, 0x1e, 0xa, 0x8a, 0xe, 0x10, 0xd2, 0xd0,
+ 0xe2, 0xc0, 0x9, 0x9a, 0xb, 0x98, 0x0, 0x4f,
+ 0x60, 0x6f, 0x40, 0x0, 0xf1, 0x2, 0xf0, 0x0,
/* U+78 "x" */
- 0x23, 0x0, 0x32, 0x2f, 0x22, 0xf3, 0x8, 0xbc,
- 0x80, 0x0, 0xee, 0x0, 0x2, 0xee, 0x20, 0xc,
- 0x88, 0xb0, 0x7e, 0x0, 0xe7,
+ 0x6d, 0x0, 0xe5, 0xc, 0x67, 0xb0, 0x3, 0xee,
+ 0x20, 0x0, 0xcb, 0x0, 0x4, 0xde, 0x20, 0xd,
+ 0x56, 0xc0, 0x7c, 0x0, 0xd6,
/* U+79 "y" */
- 0x32, 0x0, 0x23, 0x9b, 0x0, 0xb9, 0x2f, 0x11,
- 0xf3, 0xc, 0x66, 0xd0, 0x6, 0xbb, 0x70, 0x1,
- 0xff, 0x20, 0x0, 0xab, 0x0, 0x0, 0xc6, 0x0,
- 0x28, 0xe0, 0x0, 0x38, 0x20, 0x0,
+ 0xb7, 0x0, 0xc6, 0x6c, 0x1, 0xf1, 0x1f, 0x15,
+ 0xc0, 0xc, 0x6a, 0x70, 0x6, 0xbe, 0x20, 0x1,
+ 0xfd, 0x0, 0x0, 0xc8, 0x0, 0x0, 0xc3, 0x0,
+ 0x4, 0xd0, 0x0, 0x7e, 0x30, 0x0,
/* U+7A "z" */
- 0x23, 0x33, 0x32, 0x48, 0x89, 0xf5, 0x0, 0xb,
- 0xa0, 0x0, 0x7d, 0x10, 0x3, 0xf3, 0x0, 0x1d,
- 0x60, 0x0, 0x8f, 0xff, 0xf8,
+ 0x6f, 0xff, 0xf5, 0x0, 0x5, 0xd0, 0x0, 0x1e,
+ 0x40, 0x0, 0xb9, 0x0, 0x6, 0xd0, 0x0, 0x1e,
+ 0x30, 0x0, 0x7f, 0xff, 0xf8,
/* U+7B "{" */
- 0x0, 0x2, 0x0, 0xb8, 0x4, 0xe0, 0x8, 0xc0,
- 0x8, 0xc0, 0x1a, 0x80, 0x7e, 0x10, 0x9, 0xa0,
- 0x8, 0xc0, 0x7, 0xc0, 0x3, 0xf1, 0x0, 0x8a,
+ 0x0, 0x27, 0x0, 0xe4, 0x4, 0xc0, 0x5, 0xb0,
+ 0x6, 0xa0, 0xa, 0x70, 0x9f, 0x10, 0xa, 0x70,
+ 0x6, 0xa0, 0x5, 0xb0, 0x4, 0xc0, 0x0, 0xd4,
+ 0x0, 0x27,
/* U+7C "|" */
- 0x18, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
- 0x2f, 0x2f, 0x18,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xe0,
/* U+7D "}" */
- 0x30, 0x0, 0x7d, 0x0, 0xd, 0x50, 0xc, 0x80,
- 0xc, 0x80, 0x8, 0xb1, 0x1, 0xea, 0x9, 0xa0,
- 0xc, 0x80, 0xc, 0x80, 0xe, 0x30, 0xa9, 0x0,
+ 0x72, 0x0, 0x3e, 0x0, 0xb, 0x50, 0xa, 0x60,
+ 0xa, 0x60, 0x6, 0xb0, 0x0, 0xea, 0x6, 0xb0,
+ 0xa, 0x60, 0xa, 0x60, 0xb, 0x50, 0x4e, 0x0,
+ 0x72, 0x0,
/* U+7E "~" */
- 0x5, 0xa6, 0x0, 0x42, 0x2e, 0x5b, 0xc5, 0xc3,
- 0x12, 0x0, 0x6a, 0x50,
+ 0x5, 0xd9, 0x0, 0x85, 0xe, 0x3a, 0x90, 0xc2,
+ 0x2a, 0x0, 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0,
/* U+F001 "" */
- 0x0, 0x0, 0x0, 0x0, 0x26, 0x10, 0x0, 0x0,
- 0x37, 0xcf, 0xf4, 0x0, 0x5, 0xdf, 0xff, 0xff,
- 0x40, 0x0, 0x8f, 0xff, 0xff, 0xf4, 0x0, 0x8,
- 0xff, 0xfb, 0x69, 0x40, 0x0, 0x8b, 0x50, 0x0,
- 0x84, 0x0, 0x8, 0x40, 0x0, 0x8, 0x40, 0x0,
- 0x84, 0x2, 0x77, 0xa4, 0x0, 0x8, 0x40, 0xff,
- 0xff, 0x45, 0xbb, 0xc4, 0x8, 0xff, 0xb1, 0xff,
- 0xff, 0x40, 0x0, 0x0, 0x4, 0xac, 0x60, 0x0,
- 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0,
+ 0x0, 0x3, 0x7c, 0xff, 0x0, 0x0, 0x59, 0xef,
+ 0xff, 0xff, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0xf, 0xff, 0xfd, 0x84, 0x8f, 0x0, 0xf,
+ 0xd7, 0x20, 0x0, 0x8f, 0x0, 0xf, 0x80, 0x0,
+ 0x0, 0x8f, 0x0, 0xf, 0x80, 0x0, 0x0, 0x8f,
+ 0x0, 0xf, 0x80, 0x0, 0x7b, 0xdf, 0x2, 0x3f,
+ 0x80, 0x6, 0xff, 0xff, 0xaf, 0xff, 0x80, 0x2,
+ 0xef, 0xf9, 0xef, 0xff, 0x60, 0x0, 0x2, 0x10,
+ 0x29, 0xa7, 0x0, 0x0, 0x0, 0x0,
/* U+F008 "" */
- 0x47, 0x77, 0x77, 0x77, 0x77, 0x77, 0x2e, 0x8c,
- 0xc8, 0x88, 0x88, 0xda, 0x8c, 0xd0, 0x88, 0x0,
- 0x0, 0x8, 0x40, 0xcf, 0xce, 0x80, 0x0, 0x0,
- 0x8e, 0xcc, 0xd0, 0x88, 0x0, 0x0, 0x8, 0x51,
- 0xcf, 0x39, 0x93, 0x33, 0x33, 0xa7, 0x4c, 0xf8,
- 0xdd, 0x88, 0x88, 0x8d, 0xb9, 0xcc, 0x8, 0x80,
- 0x0, 0x0, 0x84, 0xc, 0xfb, 0xd8, 0x0, 0x0,
- 0x8, 0xdb, 0xce, 0x4a, 0x80, 0x0, 0x0, 0x87,
- 0x4c, 0xe3, 0x99, 0x33, 0x33, 0x3a, 0x63, 0xc7,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc6,
+ 0xb4, 0xdf, 0xff, 0xff, 0xfd, 0x4b, 0xe8, 0xe7,
+ 0x22, 0x22, 0x7e, 0x8e, 0xc0, 0xc5, 0x0, 0x0,
+ 0x6c, 0xc, 0xfc, 0xf6, 0x11, 0x11, 0x7f, 0xcf,
+ 0xc0, 0xcf, 0xff, 0xff, 0xfb, 0xc, 0xfc, 0xf6,
+ 0x11, 0x11, 0x7f, 0xcf, 0xc0, 0xc5, 0x0, 0x0,
+ 0x6c, 0xc, 0xe8, 0xe7, 0x22, 0x22, 0x7e, 0x8e,
+ 0xb4, 0xdf, 0xff, 0xff, 0xfd, 0x4b,
/* U+F00B "" */
- 0x67, 0x71, 0x37, 0x77, 0x77, 0x75, 0xff, 0xf8,
+ 0xdf, 0xf6, 0x9f, 0xff, 0xff, 0xfd, 0xff, 0xf8,
+ 0xcf, 0xff, 0xff, 0xff, 0xef, 0xf6, 0xaf, 0xff,
+ 0xff, 0xfe, 0x13, 0x20, 0x3, 0x33, 0x33, 0x31,
+ 0xff, 0xf7, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf8,
0xcf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xff,
- 0xff, 0xff, 0x24, 0x30, 0x14, 0x44, 0x44, 0x42,
- 0xff, 0xf6, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xf8,
- 0xcf, 0xff, 0xff, 0xff, 0x78, 0x83, 0x58, 0x88,
- 0x88, 0x87, 0x77, 0x73, 0x57, 0x77, 0x77, 0x76,
- 0xff, 0xf8, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf6,
- 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x13, 0x20, 0x3, 0x33, 0x33, 0x31,
+ 0xef, 0xf6, 0xaf, 0xff, 0xff, 0xfe, 0xff, 0xf8,
+ 0xcf, 0xff, 0xff, 0xff, 0xdf, 0xf6, 0xaf, 0xff,
+ 0xff, 0xfd,
/* U+F00C "" */
- 0x0, 0x0, 0x0, 0x0, 0x3e, 0x60, 0x0, 0x0,
- 0x0, 0x3, 0xef, 0xf2, 0x3, 0x71, 0x0, 0x3e,
- 0xff, 0x60, 0x1e, 0xfc, 0x13, 0xef, 0xf6, 0x0,
- 0x1d, 0xff, 0xce, 0xff, 0x60, 0x0, 0x1, 0xdf,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0x1d, 0xff, 0x60,
- 0x0, 0x0, 0x0, 0x1, 0xd6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xd4, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x3,
+ 0xff, 0xf4, 0x4d, 0x30, 0x0, 0x3f, 0xff, 0x40,
+ 0xef, 0xf3, 0x3, 0xff, 0xf4, 0x0, 0x4f, 0xff,
+ 0x6f, 0xff, 0x40, 0x0, 0x4, 0xff, 0xff, 0xf4,
+ 0x0, 0x0, 0x0, 0x4f, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x3, 0xd3, 0x0, 0x0, 0x0,
/* U+F00D "" */
- 0x6, 0xa1, 0x0, 0x68, 0x3, 0xff, 0xc1, 0x6f,
- 0xf9, 0xa, 0xff, 0xdf, 0xff, 0x30, 0xa, 0xff,
- 0xff, 0x30, 0x0, 0x6f, 0xff, 0xc1, 0x0, 0x6f,
- 0xff, 0xff, 0xc1, 0x3f, 0xff, 0x3a, 0xff, 0xa0,
- 0xaf, 0x30, 0xa, 0xf3,
+ 0x14, 0x0, 0x0, 0x22, 0xd, 0xf7, 0x0, 0x4f,
+ 0xf1, 0x9f, 0xf7, 0x4f, 0xfd, 0x0, 0xaf, 0xff,
+ 0xfd, 0x10, 0x0, 0xbf, 0xfe, 0x10, 0x0, 0x4f,
+ 0xff, 0xf7, 0x0, 0x4f, 0xfd, 0xaf, 0xf7, 0xe,
+ 0xfd, 0x10, 0xaf, 0xf2, 0x5b, 0x10, 0x0, 0x99,
+ 0x0,
/* U+F011 "" */
- 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0x0, 0xb,
- 0xe0, 0x0, 0x0, 0x1, 0x71, 0xcf, 0x7, 0x30,
- 0x0, 0xdf, 0x6c, 0xf1, 0xfe, 0x30, 0x8f, 0xa0,
- 0xcf, 0x5, 0xfb, 0xe, 0xf0, 0xc, 0xf0, 0xa,
- 0xf2, 0xfc, 0x0, 0x69, 0x0, 0x8f, 0x4f, 0xc0,
- 0x0, 0x0, 0x9, 0xf4, 0xaf, 0x40, 0x0, 0x1,
- 0xef, 0x2, 0xfe, 0x40, 0x2, 0xcf, 0x70, 0x6,
- 0xff, 0xfe, 0xff, 0xa0, 0x0, 0x2, 0x9c, 0xca,
- 0x40, 0x0,
+ 0x0, 0x0, 0x7, 0x70, 0x0, 0x0, 0x0, 0x32,
+ 0xf, 0xf0, 0x24, 0x0, 0x5, 0xfc, 0xf, 0xf0,
+ 0xcf, 0x50, 0x1f, 0xf4, 0xf, 0xf0, 0x5f, 0xf1,
+ 0x7f, 0x80, 0xf, 0xf0, 0x8, 0xf7, 0xbf, 0x20,
+ 0xf, 0xf0, 0x2, 0xfb, 0xcf, 0x10, 0xe, 0xe0,
+ 0x1, 0xfc, 0xaf, 0x40, 0x1, 0x10, 0x4, 0xfa,
+ 0x5f, 0xb0, 0x0, 0x0, 0xb, 0xf6, 0xd, 0xfa,
+ 0x10, 0x1, 0xaf, 0xd0, 0x2, 0xdf, 0xfc, 0xcf,
+ 0xfd, 0x20, 0x0, 0x8, 0xef, 0xfe, 0x91, 0x0,
+ 0x0, 0x0, 0x1, 0x10, 0x0, 0x0,
/* U+F013 "" */
- 0x0, 0x0, 0x67, 0x10, 0x0, 0x0, 0x15, 0xf,
- 0xf4, 0x33, 0x0, 0xd, 0xfd, 0xff, 0xef, 0xe2,
- 0x0, 0xaf, 0xff, 0xff, 0xfd, 0x10, 0x5b, 0xfe,
- 0x21, 0xbf, 0xd4, 0x1f, 0xff, 0x80, 0x4, 0xff,
- 0xf4, 0xce, 0xfa, 0x0, 0x6f, 0xfc, 0x30, 0x8f,
- 0xfc, 0x9f, 0xfc, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xf3, 0x0, 0x6d, 0x5f, 0xf8, 0xaa, 0x0, 0x0,
- 0x0, 0xbc, 0x30, 0x0, 0x0,
-
- /* U+F014 "" */
- 0x0, 0x7, 0x77, 0x20, 0x0, 0x0, 0x6c, 0x88,
- 0xd0, 0x0, 0xcb, 0xec, 0xbb, 0xeb, 0xb6, 0x6d,
- 0x44, 0x44, 0x47, 0xa1, 0x4c, 0x44, 0x62, 0x64,
- 0x80, 0x4c, 0x88, 0xc4, 0xc4, 0x80, 0x4c, 0x88,
- 0xc4, 0xc4, 0x80, 0x4c, 0x88, 0xc4, 0xc4, 0x80,
- 0x4c, 0x66, 0x92, 0x94, 0x80, 0x2c, 0x0, 0x0,
- 0x5, 0x80, 0xb, 0xcc, 0xcc, 0xcc, 0x30,
+ 0x0, 0x0, 0x14, 0x41, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xf7, 0x0, 0x0, 0x3, 0x43, 0xdf, 0xfd,
+ 0x34, 0x30, 0xe, 0xff, 0xff, 0xff, 0xff, 0xe0,
+ 0x6f, 0xff, 0xfb, 0xbf, 0xff, 0xf6, 0x1b, 0xff,
+ 0x70, 0x7, 0xff, 0xb1, 0x7, 0xff, 0x20, 0x2,
+ 0xff, 0x70, 0x1b, 0xff, 0x70, 0x7, 0xff, 0xb1,
+ 0x6f, 0xff, 0xfb, 0xbf, 0xff, 0xf6, 0xe, 0xff,
+ 0xff, 0xff, 0xff, 0xe0, 0x3, 0x42, 0xcf, 0xfc,
+ 0x23, 0x30, 0x0, 0x0, 0x7f, 0xf7, 0x0, 0x0,
+ 0x0, 0x0, 0x4, 0x41, 0x0, 0x0,
/* U+F015 "" */
- 0x0, 0x0, 0x17, 0x32, 0x74, 0x0, 0x0, 0x3d,
- 0xcf, 0x7f, 0x80, 0x0, 0x5e, 0x89, 0x9f, 0xf8,
- 0x0, 0x7f, 0x8d, 0xfe, 0x7f, 0xa0, 0x9e, 0x9e,
- 0xff, 0xff, 0x7d, 0xb3, 0x4f, 0xff, 0xff, 0xff,
- 0x84, 0x4, 0xff, 0xe8, 0xcf, 0xf8, 0x0, 0x4f,
- 0xfc, 0x8, 0xff, 0x80, 0x4, 0xff, 0xc0, 0x8f,
- 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x73, 0x3, 0x83, 0x0, 0x0,
+ 0x0, 0x1d, 0xff, 0x67, 0xf7, 0x0, 0x0, 0x3,
+ 0xee, 0x5a, 0xfe, 0xf7, 0x0, 0x0, 0x6f, 0xd3,
+ 0xb5, 0x7f, 0xf7, 0x0, 0x9, 0xfb, 0x3d, 0xff,
+ 0x85, 0xfe, 0x30, 0xbf, 0x95, 0xff, 0xff, 0xfb,
+ 0x3e, 0xf4, 0x76, 0x6f, 0xff, 0xff, 0xff, 0xd2,
+ 0xa1, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xf4, 0x0,
+ 0x0, 0xcf, 0xfa, 0x2, 0xff, 0xf4, 0x0, 0x0,
+ 0xcf, 0xfa, 0x2, 0xff, 0xf4, 0x0, 0x0, 0xaf,
+ 0xf8, 0x1, 0xff, 0xf3, 0x0,
/* U+F019 "" */
- 0x0, 0x0, 0x23, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc0, 0x0, 0x0,
- 0x0, 0x9b, 0xef, 0xeb, 0xb0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0x60, 0x0, 0x0, 0x3, 0xff, 0xf6,
- 0x0, 0x0, 0x67, 0x76, 0x3f, 0x67, 0x77, 0x60,
- 0xff, 0xff, 0x93, 0x9f, 0xff, 0xf3, 0xff, 0xff,
- 0xff, 0xfe, 0xaa, 0xe4, 0xff, 0xff, 0xff, 0xff,
- 0xee, 0xf2,
+ 0x0, 0x0, 0x27, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf8, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xf8, 0x0, 0x0, 0x0, 0xdf,
+ 0xff, 0xff, 0xfd, 0x0, 0x0, 0x4f, 0xff, 0xff,
+ 0xf4, 0x0, 0x0, 0x4, 0xff, 0xff, 0x40, 0x0,
+ 0x23, 0x33, 0x5f, 0xf5, 0x33, 0x32, 0xff, 0xff,
+ 0xa4, 0x4a, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xcf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5c, 0x8f,
+ 0x9a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8,
/* U+F01C "" */
- 0x1, 0x77, 0x77, 0x77, 0x40, 0x0, 0x8f, 0xcc,
- 0xcc, 0xec, 0x0, 0xf, 0x70, 0x0, 0x2, 0xf4,
- 0x6, 0xf1, 0x0, 0x0, 0xc, 0xb0, 0xda, 0x0,
- 0x0, 0x0, 0x5f, 0x2f, 0xcb, 0x80, 0x5, 0xbb,
- 0xf4, 0xff, 0xff, 0x77, 0xdf, 0xff, 0x4f, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x40,
+ 0x0, 0x4f, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x1,
+ 0xed, 0x88, 0x88, 0x89, 0xf8, 0x0, 0xa, 0xf2,
+ 0x0, 0x0, 0x0, 0xaf, 0x30, 0x5f, 0x70, 0x0,
+ 0x0, 0x0, 0x1e, 0xc0, 0xef, 0x88, 0x60, 0x0,
+ 0x28, 0x8b, 0xf6, 0xff, 0xff, 0xf3, 0x0, 0xbf,
+ 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
/* U+F021 "" */
- 0x0, 0x2, 0x46, 0x30, 0x0, 0x0, 0x19, 0xff,
- 0xff, 0xd4, 0xc4, 0x1c, 0xfc, 0x65, 0xaf, 0xff,
- 0x47, 0xfa, 0x0, 0x1, 0xdf, 0xf4, 0x9c, 0x0,
- 0x0, 0x6c, 0xcc, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x77, 0x75, 0x0, 0x0, 0x57, 0xf, 0xff,
- 0x90, 0x0, 0x1d, 0xe0, 0xff, 0xf4, 0x0, 0x2c,
- 0xf5, 0xf, 0xcf, 0xff, 0xef, 0xf8, 0x0, 0x50,
- 0x29, 0xcc, 0xa4, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x10, 0x0, 0x59, 0x0, 0x19,
+ 0xef, 0xfd, 0x70, 0x9f, 0x3, 0xef, 0xda, 0x9d,
+ 0xfe, 0xbf, 0xe, 0xf6, 0x0, 0x0, 0x5f, 0xff,
+ 0x7f, 0x70, 0x0, 0x3f, 0xff, 0xff, 0x69, 0x0,
+ 0x0, 0x2a, 0xaa, 0xa9, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xaa, 0xaa, 0xa2, 0x0, 0x0, 0xa6,
+ 0xff, 0xfe, 0xf3, 0x0, 0x7, 0xf7, 0xff, 0xf5,
+ 0x0, 0x0, 0x7f, 0xe0, 0xfb, 0xef, 0xd9, 0xad,
+ 0xfe, 0x30, 0xfa, 0x8, 0xef, 0xfe, 0x91, 0x0,
+ 0x95, 0x0, 0x1, 0x10, 0x0, 0x0,
/* U+F026 "" */
- 0x0, 0x0, 0x30, 0x0, 0x6, 0xf4, 0x0, 0x6f,
- 0xf4, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xf4, 0xff,
- 0xff, 0xf4, 0x78, 0xbf, 0xf4, 0x0, 0xa, 0xf4,
- 0x0, 0x0, 0xb2,
+ 0x0, 0x0, 0x2a, 0x0, 0x2, 0xef, 0x78, 0x8e,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xdf, 0xff, 0xff, 0x0, 0x7, 0xff,
+ 0x0, 0x0, 0x7f, 0x0, 0x0, 0x1,
/* U+F027 "" */
- 0x0, 0x0, 0x30, 0x0, 0x0, 0x6, 0xf4, 0x0,
- 0x0, 0x6f, 0xf4, 0x0, 0xff, 0xff, 0xf4, 0xc3,
- 0xff, 0xff, 0xf4, 0x5b, 0xff, 0xff, 0xf4, 0xa8,
- 0x78, 0xbf, 0xf4, 0x30, 0x0, 0xa, 0xf4, 0x0,
- 0x0, 0x0, 0xb2, 0x0,
+ 0x0, 0x0, 0x2a, 0x0, 0x0, 0x0, 0x2e, 0xf0,
+ 0x0, 0x78, 0x8e, 0xff, 0x3, 0xf, 0xff, 0xff,
+ 0xf0, 0xba, 0xff, 0xff, 0xff, 0x3, 0xff, 0xff,
+ 0xff, 0xf0, 0xaa, 0xdf, 0xff, 0xff, 0x4, 0x0,
+ 0x0, 0x8f, 0xf0, 0x0, 0x0, 0x0, 0x8f, 0x0,
+ 0x0, 0x0, 0x0, 0x10, 0x0,
/* U+F028 "" */
- 0x0, 0x0, 0x30, 0x6, 0xc2, 0x0, 0x0, 0x6,
- 0xf4, 0x15, 0x4c, 0x10, 0x0, 0x6f, 0xf4, 0x1b,
- 0x96, 0xa0, 0xff, 0xff, 0xf4, 0xc3, 0xc2, 0xd0,
- 0xff, 0xff, 0xf4, 0x5b, 0x86, 0xc1, 0xff, 0xff,
- 0xf4, 0xa8, 0x94, 0xd0, 0x78, 0xbf, 0xf4, 0x33,
- 0xc2, 0xc0, 0x0, 0xa, 0xf4, 0x2c, 0x4c, 0x40,
- 0x0, 0x0, 0xb2, 0x3, 0xc6, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0x30, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x6, 0xd2, 0x0, 0x0, 0x0,
+ 0x2a, 0x0, 0x11, 0x8e, 0x10, 0x0, 0x2, 0xef,
+ 0x0, 0x7d, 0x2b, 0x90, 0x78, 0x8e, 0xff, 0x3,
+ 0xa, 0xb3, 0xf0, 0xff, 0xff, 0xff, 0xb, 0xa1,
+ 0xf1, 0xe3, 0xff, 0xff, 0xff, 0x3, 0xf0, 0xe3,
+ 0xc5, 0xff, 0xff, 0xff, 0xb, 0xa1, 0xf1, 0xe3,
+ 0xdf, 0xff, 0xff, 0x3, 0xa, 0xb3, 0xf0, 0x0,
+ 0x7, 0xff, 0x0, 0x7d, 0x2b, 0x90, 0x0, 0x0,
+ 0x7f, 0x0, 0x11, 0x9e, 0x10, 0x0, 0x0, 0x1,
+ 0x0, 0x6, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0,
/* U+F03E "" */
- 0x47, 0x77, 0x77, 0x77, 0x77, 0x77, 0x2d, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x8c, 0xc0, 0x98, 0x0,
- 0x0, 0x0, 0x0, 0xcc, 0x4f, 0xf4, 0x0, 0x17,
- 0x0, 0xc, 0xc1, 0xbb, 0x10, 0x1c, 0xf9, 0x0,
- 0xcc, 0x0, 0x10, 0x1c, 0xff, 0xf9, 0xc, 0xc0,
- 0x1c, 0x9c, 0xff, 0xff, 0xf4, 0xcc, 0x1c, 0xff,
- 0xff, 0xff, 0xff, 0x4c, 0xc4, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0xcd, 0x14, 0x44, 0x44, 0x44, 0x44,
- 0x1c, 0x9c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x80,
-
- /* U+F040 "" */
- 0x0, 0x0, 0x0, 0x3, 0x10, 0x0, 0x0, 0x0,
- 0x6, 0xfc, 0x10, 0x0, 0x0, 0x4, 0xaf, 0xfc,
- 0x0, 0x0, 0x6, 0xea, 0xaf, 0xf1, 0x0, 0x6,
- 0xdb, 0xf9, 0x93, 0x0, 0x6, 0xdb, 0xff, 0xf2,
- 0x0, 0x6, 0xdb, 0xff, 0xf3, 0x0, 0x6, 0xfb,
- 0xff, 0xf3, 0x0, 0x0, 0xe2, 0xdf, 0xf3, 0x0,
- 0x0, 0xf, 0x94, 0xf3, 0x0, 0x0, 0x0, 0xcc,
- 0xc3, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfd, 0x5b,
+ 0xff, 0xff, 0xff, 0xff, 0xf5, 0x1, 0xff, 0xff,
+ 0xef, 0xff, 0xfb, 0x18, 0xff, 0xf6, 0x1c, 0xff,
+ 0xff, 0xfc, 0xff, 0x60, 0x1, 0xdf, 0xff, 0x60,
+ 0x96, 0x0, 0x0, 0x8f, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x8f, 0xfc, 0x88, 0x88, 0x88, 0x88, 0xcf,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb,
/* U+F048 "" */
- 0x75, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x6c, 0xfc,
- 0x0, 0x6f, 0xcf, 0xc0, 0x6f, 0xfc, 0xfc, 0x6f,
- 0xff, 0xcf, 0xef, 0xff, 0xfc, 0xfc, 0xaf, 0xff,
- 0xcf, 0xc0, 0xaf, 0xfc, 0xfc, 0x0, 0xaf, 0xcf,
- 0xc0, 0x0, 0xac, 0xc9, 0x0, 0x0, 0x60,
+ 0x58, 0x0, 0x0, 0x35, 0x9f, 0x10, 0x5, 0xfe,
+ 0x9f, 0x10, 0x6f, 0xfe, 0x9f, 0x17, 0xff, 0xfe,
+ 0x9f, 0x9f, 0xff, 0xfe, 0x9f, 0xff, 0xff, 0xfe,
+ 0x9f, 0xef, 0xff, 0xfe, 0x9f, 0x2d, 0xff, 0xfe,
+ 0x9f, 0x10, 0xcf, 0xfe, 0x9f, 0x10, 0xb, 0xfe,
+ 0x8f, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0x0,
/* U+F04B "" */
- 0x60, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x40, 0x0,
- 0x0, 0x0, 0xff, 0xfb, 0x20, 0x0, 0x0, 0xff,
- 0xff, 0xf9, 0x10, 0x0, 0xff, 0xff, 0xff, 0xe7,
- 0x10, 0xff, 0xff, 0xff, 0xff, 0xd3, 0xff, 0xff,
- 0xff, 0xfe, 0x60, 0xff, 0xff, 0xff, 0x80, 0x0,
- 0xff, 0xff, 0x91, 0x0, 0x0, 0xff, 0xb2, 0x0,
- 0x0, 0x0, 0xc4, 0x0, 0x0, 0x0, 0x0,
+ 0x46, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0x40,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0xa1, 0x0, 0x0,
+ 0xf, 0xff, 0xff, 0xf7, 0x0, 0x0, 0xff, 0xff,
+ 0xff, 0xfd, 0x50, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff,
+ 0xff, 0xff, 0xff, 0xb1, 0xff, 0xff, 0xff, 0xfd,
+ 0x40, 0xf, 0xff, 0xff, 0xf7, 0x0, 0x0, 0xff,
+ 0xff, 0xa1, 0x0, 0x0, 0xf, 0xfd, 0x40, 0x0,
+ 0x0, 0x0, 0x36, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F04C "" */
- 0x77, 0x77, 0x10, 0x77, 0x77, 0x1f, 0xff, 0xf4,
- 0xf, 0xff, 0xf4, 0xff, 0xff, 0x40, 0xff, 0xff,
- 0x4f, 0xff, 0xf4, 0xf, 0xff, 0xf4, 0xff, 0xff,
- 0x40, 0xff, 0xff, 0x4f, 0xff, 0xf4, 0xf, 0xff,
- 0xf4, 0xff, 0xff, 0x40, 0xff, 0xff, 0x4f, 0xff,
- 0xf4, 0xf, 0xff, 0xf4, 0xff, 0xff, 0x40, 0xff,
- 0xff, 0x4f, 0xff, 0xf4, 0xf, 0xff, 0xf4, 0xcc,
- 0xcc, 0x30, 0xcc, 0xcc, 0x30,
+ 0xaf, 0xfe, 0x30, 0xaf, 0xfe, 0x3f, 0xff, 0xf7,
+ 0xf, 0xff, 0xf7, 0xff, 0xff, 0x80, 0xff, 0xff,
+ 0x8f, 0xff, 0xf8, 0xf, 0xff, 0xf8, 0xff, 0xff,
+ 0x80, 0xff, 0xff, 0x8f, 0xff, 0xf8, 0xf, 0xff,
+ 0xf8, 0xff, 0xff, 0x80, 0xff, 0xff, 0x8f, 0xff,
+ 0xf8, 0xf, 0xff, 0xf8, 0xff, 0xff, 0x80, 0xff,
+ 0xff, 0x8f, 0xff, 0xf7, 0xf, 0xff, 0xf7, 0x48,
+ 0x98, 0x10, 0x48, 0x98, 0x10,
/* U+F04D "" */
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x1f, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x4f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x30,
+ 0x48, 0x88, 0x88, 0x88, 0x88, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xaf,
+ 0xff, 0xff, 0xff, 0xfe, 0x30,
/* U+F051 "" */
- 0x30, 0x0, 0x5, 0x5f, 0x30, 0x0, 0xcc, 0xfe,
- 0x30, 0xc, 0xcf, 0xfe, 0x30, 0xcc, 0xff, 0xfe,
- 0x3c, 0xcf, 0xff, 0xfe, 0xdc, 0xff, 0xff, 0xac,
- 0xcf, 0xff, 0xa0, 0xcc, 0xff, 0xa0, 0xc, 0xcf,
- 0xa0, 0x0, 0xcc, 0x90, 0x0, 0x9, 0x90,
+ 0x26, 0x0, 0x0, 0x58, 0x7f, 0xa0, 0x0, 0xbf,
+ 0x8f, 0xfb, 0x0, 0xbf, 0x8f, 0xff, 0xc1, 0xbf,
+ 0x8f, 0xff, 0xfd, 0xcf, 0x8f, 0xff, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xef, 0x8f, 0xff, 0xf4, 0xbf,
+ 0x8f, 0xff, 0x40, 0xbf, 0x8f, 0xe3, 0x0, 0xbf,
+ 0x5d, 0x20, 0x0, 0xae, 0x0, 0x0, 0x0, 0x0,
/* U+F052 "" */
- 0x0, 0x0, 0x35, 0x0, 0x0, 0x0, 0x0, 0x3e,
- 0xf6, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xf6, 0x0,
- 0x0, 0x3e, 0xff, 0xff, 0xf6, 0x0, 0x3e, 0xff,
- 0xff, 0xff, 0xf6, 0x7, 0x88, 0x88, 0x88, 0x88,
- 0x81, 0x87, 0x77, 0x77, 0x77, 0x77, 0x2f, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x40,
+ 0x0, 0x0, 0x3, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x3f, 0xfa, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff,
+ 0x90, 0x0, 0x0, 0x1e, 0xff, 0xff, 0xf8, 0x0,
+ 0x1, 0xdf, 0xff, 0xff, 0xff, 0x70, 0xc, 0xff,
+ 0xff, 0xff, 0xff, 0xf4, 0xd, 0xff, 0xff, 0xff,
+ 0xff, 0xf5, 0x1, 0x34, 0x44, 0x44, 0x44, 0x30,
+ 0xd, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0xc, 0xff, 0xff, 0xff,
+ 0xff, 0xf5,
/* U+F053 "" */
- 0x0, 0x0, 0x6e, 0x30, 0x0, 0x6f, 0xfe, 0x0,
- 0x6f, 0xff, 0x30, 0x6f, 0xff, 0x30, 0x6f, 0xff,
- 0x30, 0xd, 0xff, 0xa0, 0x0, 0x1d, 0xff, 0x90,
- 0x0, 0x1d, 0xff, 0x90, 0x0, 0x1d, 0xff, 0x90,
- 0x0, 0x1d, 0xfd, 0x0, 0x0, 0x1a, 0x10,
+ 0x0, 0x0, 0x3, 0x10, 0x0, 0x5, 0xfb, 0x0,
+ 0x5, 0xff, 0x40, 0x5, 0xff, 0x40, 0x5, 0xff,
+ 0x50, 0x3, 0xff, 0x50, 0x0, 0xb, 0xfc, 0x10,
+ 0x0, 0xb, 0xfc, 0x10, 0x0, 0xc, 0xfc, 0x10,
+ 0x0, 0xc, 0xfb, 0x0, 0x0, 0xa, 0x50,
/* U+F054 "" */
- 0xa, 0xc1, 0x0, 0x0, 0x4f, 0xfc, 0x10, 0x0,
- 0x6, 0xff, 0xc1, 0x0, 0x0, 0x6f, 0xfc, 0x10,
- 0x0, 0x6, 0xff, 0xc1, 0x0, 0x1, 0xdf, 0xf7,
- 0x0, 0x1c, 0xff, 0xa0, 0x1, 0xcf, 0xfa, 0x0,
- 0x1c, 0xff, 0xa0, 0x0, 0x3f, 0xfa, 0x0, 0x0,
- 0x3, 0x80, 0x0, 0x0,
+ 0x3, 0x10, 0x0, 0x3, 0xfc, 0x10, 0x0, 0xb,
+ 0xfc, 0x10, 0x0, 0xb, 0xfc, 0x10, 0x0, 0xb,
+ 0xfc, 0x10, 0x0, 0xd, 0xfb, 0x0, 0x5, 0xff,
+ 0x50, 0x5, 0xff, 0x50, 0x5, 0xff, 0x50, 0x3,
+ 0xff, 0x50, 0x0, 0xa, 0x50, 0x0, 0x0,
/* U+F067 "" */
- 0x0, 0x3, 0x75, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xf6, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x8c,
- 0xff, 0x88, 0x83, 0x0, 0x8, 0xff, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0x0, 0x0, 0x0, 0x7, 0xff,
- 0x0, 0x0,
+ 0x0, 0x0, 0x69, 0x10, 0x0, 0x0, 0x0, 0xd,
+ 0xf5, 0x0, 0x0, 0x0, 0x0, 0xef, 0x60, 0x0,
+ 0x0, 0x0, 0xe, 0xf6, 0x0, 0x0, 0x58, 0x88,
+ 0xff, 0xb8, 0x88, 0x1f, 0xff, 0xff, 0xff, 0xff,
+ 0xf7, 0x9b, 0xbb, 0xff, 0xdb, 0xbb, 0x30, 0x0,
+ 0xe, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xef, 0x60,
+ 0x0, 0x0, 0x0, 0xe, 0xf6, 0x0, 0x0, 0x0,
+ 0x0, 0x9d, 0x20, 0x0, 0x0,
/* U+F068 "" */
- 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x83,
+ 0x46, 0x66, 0x66, 0x66, 0x66, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0xf7, 0xad, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0x40,
+
+ /* U+F06E "" */
+ 0x0, 0x3, 0xad, 0xff, 0xc7, 0x0, 0x0, 0x0,
+ 0x9f, 0xe6, 0x24, 0xaf, 0xe3, 0x0, 0xb, 0xff,
+ 0x20, 0x77, 0x9, 0xff, 0x40, 0x7f, 0xf9, 0x0,
+ 0xcf, 0xa1, 0xff, 0xe1, 0xef, 0xf6, 0x7f, 0xff,
+ 0xf0, 0xef, 0xf7, 0x8f, 0xf9, 0x3f, 0xff, 0xc1,
+ 0xff, 0xe1, 0xb, 0xff, 0x26, 0xca, 0x19, 0xff,
+ 0x40, 0x0, 0x9f, 0xe6, 0x24, 0xaf, 0xe3, 0x0,
+ 0x0, 0x3, 0x9d, 0xff, 0xc7, 0x0, 0x0,
+
+ /* U+F070 "" */
+ 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xdf, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1c, 0xf8, 0x4a, 0xef, 0xeb, 0x50, 0x0, 0x0,
+ 0x0, 0x9f, 0xfd, 0x52, 0x5d, 0xfc, 0x10, 0x0,
+ 0x0, 0x5, 0xfe, 0x4a, 0x70, 0xcf, 0xe1, 0x0,
+ 0xb, 0x80, 0x2d, 0xff, 0xf7, 0x4f, 0xfb, 0x0,
+ 0x2f, 0xfb, 0x0, 0xaf, 0xfb, 0x2f, 0xff, 0x30,
+ 0xb, 0xff, 0x50, 0x7, 0xfe, 0x7f, 0xfb, 0x0,
+ 0x1, 0xdf, 0xc0, 0x0, 0x3e, 0xff, 0xe1, 0x0,
+ 0x0, 0x1b, 0xfc, 0x42, 0x1, 0xbf, 0xa0, 0x0,
+ 0x0, 0x0, 0x5b, 0xef, 0xb0, 0x8, 0xfc, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xe0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x40,
/* U+F071 "" */
- 0x0, 0x0, 0x2, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x1d, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf8,
- 0x0, 0x0, 0x0, 0x1, 0xef, 0xfe, 0x10, 0x0,
- 0x0, 0x9, 0xf4, 0x4f, 0x90, 0x0, 0x0, 0x2f,
- 0xf0, 0xf, 0xf2, 0x0, 0x0, 0xaf, 0xf1, 0x2f,
- 0xfa, 0x0, 0x4, 0xff, 0xf9, 0x9f, 0xff, 0x40,
- 0xc, 0xff, 0xfa, 0xaf, 0xff, 0xb0, 0x4f, 0xff,
- 0xf4, 0x4f, 0xff, 0xf4, 0xef, 0xff, 0xfc, 0xcf,
- 0xff, 0xfd, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb,
+ 0x0, 0x0, 0x0, 0x3, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5, 0xfd, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xf7, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8f, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0,
+ 0x2f, 0xfd, 0xef, 0xa0, 0x0, 0x0, 0x0, 0xb,
+ 0xfb, 0x3, 0xff, 0x30, 0x0, 0x0, 0x4, 0xff,
+ 0xc0, 0x4f, 0xfc, 0x0, 0x0, 0x0, 0xdf, 0xfd,
+ 0x5, 0xff, 0xf6, 0x0, 0x0, 0x7f, 0xff, 0xf8,
+ 0xcf, 0xff, 0xe1, 0x0, 0x1f, 0xff, 0xfc, 0x4,
+ 0xff, 0xff, 0x90, 0xa, 0xff, 0xff, 0xd2, 0x7f,
+ 0xff, 0xff, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf6, 0x4, 0x78, 0x88, 0x88, 0x88, 0x88,
+ 0x87, 0x0,
/* U+F074 "" */
- 0x0, 0x0, 0x0, 0x0, 0x8, 0x60, 0x87, 0x51,
- 0x0, 0x67, 0x7b, 0xf6, 0xff, 0xfc, 0x2a, 0xff,
- 0xff, 0xfd, 0x34, 0x7f, 0x8f, 0xc4, 0x4a, 0xd1,
- 0x0, 0x4, 0xef, 0x10, 0x5, 0x10, 0x0, 0x5,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0xd, 0xf8, 0x40,
- 0x8, 0x60, 0x87, 0xcf, 0x9e, 0xe8, 0x7b, 0xf6,
- 0xff, 0xf9, 0x5, 0xef, 0xff, 0xfd, 0x34, 0x0,
- 0x0, 0x2, 0x4a, 0xd1, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0xf, 0xc1, 0xff, 0xf8, 0x0, 0x2e,
+ 0xff, 0xfc, 0xcd, 0xff, 0x62, 0xef, 0xdf, 0xf9,
+ 0x0, 0x2c, 0x4e, 0xf9, 0xf, 0x90, 0x0, 0x2,
+ 0xef, 0x90, 0x7, 0x0, 0x0, 0x2e, 0xf8, 0x88,
+ 0xf, 0xa0, 0xcd, 0xff, 0x80, 0xdf, 0xdf, 0xf9,
+ 0xff, 0xf8, 0x0, 0x1e, 0xff, 0xfc, 0x0, 0x0,
+ 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x6, 0x10,
/* U+F077 "" */
- 0x0, 0x0, 0xa, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xf9, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff,
- 0x90, 0x0, 0x1, 0x9f, 0xfa, 0xaf, 0xf9, 0x0,
- 0x1c, 0xff, 0xa0, 0xa, 0xff, 0x90, 0x4f, 0xfa,
- 0x0, 0x0, 0xaf, 0xf4, 0x6, 0x90, 0x0, 0x0,
- 0x9, 0x60,
+ 0x0, 0x0, 0x27, 0x0, 0x0, 0x0, 0x0, 0x2e,
+ 0xf9, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf9, 0x0,
+ 0x0, 0x2e, 0xf9, 0x2e, 0xf9, 0x0, 0x2e, 0xf9,
+ 0x0, 0x2e, 0xf9, 0xb, 0xf9, 0x0, 0x0, 0x2e,
+ 0xf4, 0x27, 0x0, 0x0, 0x0, 0x27, 0x0,
/* U+F078 "" */
- 0x3, 0x80, 0x0, 0x0, 0x9, 0x50, 0x3e, 0xf9,
- 0x0, 0x0, 0xaf, 0xf4, 0x1d, 0xff, 0x90, 0xa,
- 0xff, 0xd1, 0x1, 0xdf, 0xf9, 0xaf, 0xfd, 0x10,
- 0x0, 0x1d, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x1,
- 0xdf, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x1d, 0xd1,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0,
+ 0x27, 0x0, 0x0, 0x0, 0x27, 0xb, 0xf9, 0x0,
+ 0x0, 0x2e, 0xf4, 0x2e, 0xf9, 0x0, 0x2e, 0xf9,
+ 0x0, 0x2e, 0xf9, 0x2e, 0xf9, 0x0, 0x0, 0x2e,
+ 0xff, 0xf9, 0x0, 0x0, 0x0, 0x2e, 0xf9, 0x0,
+ 0x0, 0x0, 0x0, 0x26, 0x0, 0x0, 0x0,
/* U+F079 "" */
- 0x0, 0xa1, 0x8b, 0xbb, 0xbb, 0xb2, 0x0, 0xaf,
- 0xc1, 0xef, 0xff, 0xff, 0x40, 0x7f, 0xff, 0x90,
- 0x0, 0x8, 0xf4, 0xb, 0xdf, 0xec, 0x0, 0x0,
- 0x8f, 0x40, 0x4, 0xf8, 0x0, 0x1, 0x7b, 0xf9,
- 0x50, 0x4f, 0x80, 0x0, 0x1f, 0xff, 0xf9, 0x4,
- 0xfd, 0xbb, 0xb8, 0x3f, 0xfb, 0x0, 0x4f, 0xff,
- 0xff, 0xf5, 0x6d, 0x10,
+ 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3f, 0xc0, 0x7, 0x77, 0x77, 0x72, 0x0,
+ 0x3, 0xff, 0xfc, 0x2e, 0xff, 0xff, 0xf9, 0x0,
+ 0xf, 0xcf, 0xcf, 0xa0, 0x0, 0x0, 0xe9, 0x0,
+ 0x4, 0x1e, 0x93, 0x20, 0x0, 0x0, 0xe9, 0x0,
+ 0x0, 0xe, 0x90, 0x0, 0x0, 0x0, 0xe9, 0x0,
+ 0x0, 0xe, 0x90, 0x0, 0x0, 0xb5, 0xe9, 0x97,
+ 0x0, 0xe, 0xc7, 0x77, 0x73, 0xbf, 0xff, 0xf6,
+ 0x0, 0xd, 0xff, 0xff, 0xfd, 0xb, 0xff, 0x70,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa6, 0x0,
/* U+F07B "" */
- 0x16, 0x77, 0x20, 0x0, 0x0, 0x0, 0xef, 0xff,
- 0xe0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xfc, 0xbb,
- 0xbb, 0x60, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xa0,
+ 0xbf, 0xff, 0xf6, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0xff, 0x98, 0x88, 0x74, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb,
/* U+F093 "" */
- 0x0, 0x0, 0x1a, 0x30, 0x0, 0x0, 0x0, 0x1,
- 0xcf, 0xe3, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xfe,
- 0x30, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xe0, 0x0,
- 0x0, 0x0, 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc0,
- 0x0, 0x0, 0x77, 0x75, 0x58, 0x55, 0x77, 0x70,
- 0xff, 0xff, 0xcb, 0xbf, 0xff, 0xf4, 0xff, 0xff,
- 0xff, 0xfd, 0xaa, 0xd4, 0xbc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xc1,
+ 0x0, 0x0, 0x2, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x3e, 0xe3, 0x0, 0x0, 0x0, 0x3, 0xef, 0xfe,
+ 0x30, 0x0, 0x0, 0x3e, 0xff, 0xff, 0xe3, 0x0,
+ 0x0, 0xef, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
+ 0x8f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf8, 0x0, 0x0,
+ 0x23, 0x32, 0x8f, 0xf8, 0x23, 0x32, 0xff, 0xfe,
+ 0x39, 0x93, 0xef, 0xff, 0xff, 0xff, 0xc9, 0x9c,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5c, 0x8f,
+ 0x9a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8,
/* U+F095 "" */
- 0x6, 0x20, 0x0, 0x0, 0x0, 0x9f, 0xb0, 0x0,
- 0x0, 0x0, 0xff, 0xf4, 0x0, 0x0, 0x0, 0xff,
- 0xd1, 0x0, 0x0, 0x0, 0x9f, 0x60, 0x0, 0x0,
- 0x0, 0x2f, 0xd1, 0x0, 0x0, 0x0, 0x7, 0xfc,
- 0x10, 0x14, 0x0, 0x0, 0xaf, 0xd5, 0xcf, 0xb2,
- 0x0, 0x7, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x29,
- 0xff, 0x90,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x62, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xcf, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0x3f, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x9,
+ 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff,
+ 0x90, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4, 0x0,
+ 0x0, 0x0, 0x0, 0xc, 0xfd, 0x0, 0x0, 0x1,
+ 0x0, 0x9, 0xff, 0x40, 0x1, 0x8e, 0xe1, 0x1a,
+ 0xff, 0x70, 0x0, 0xef, 0xff, 0xde, 0xff, 0x90,
+ 0x0, 0xc, 0xff, 0xff, 0xff, 0x60, 0x0, 0x0,
+ 0x8f, 0xff, 0xe9, 0x10, 0x0, 0x0, 0x2, 0x76,
+ 0x30, 0x0, 0x0, 0x0, 0x0,
/* U+F0C4 "" */
- 0x17, 0x73, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x9f,
- 0x70, 0x0, 0x2, 0x86, 0xf3, 0x3, 0xf1, 0x1,
- 0x76, 0x19, 0x6f, 0x76, 0xf6, 0x57, 0x14, 0x70,
- 0x4, 0xab, 0xa9, 0x50, 0x65, 0x0, 0x1, 0x45,
- 0x76, 0x88, 0x91, 0x0, 0x3e, 0xdd, 0xe7, 0xb5,
- 0x7, 0x40, 0xe6, 0x1, 0xf1, 0x4, 0x82, 0x56,
- 0xf6, 0x4b, 0xc0, 0x0, 0x6, 0x88, 0x4c, 0xc8,
- 0x0, 0x0, 0x0, 0x0,
+ 0x7, 0x93, 0x0, 0x0, 0x22, 0xa, 0xff, 0xf2,
+ 0x0, 0x8f, 0xf5, 0xf9, 0x1f, 0x70, 0x8f, 0xf9,
+ 0xc, 0xfc, 0xf8, 0x8f, 0xf9, 0x0, 0x1a, 0xef,
+ 0xff, 0xf9, 0x0, 0x0, 0x0, 0xef, 0xfc, 0x0,
+ 0x0, 0x7, 0xbf, 0xff, 0xf6, 0x0, 0xa, 0xff,
+ 0xfa, 0xbf, 0xf6, 0x0, 0xf9, 0x1f, 0x70, 0xbf,
+ 0xf6, 0xc, 0xfc, 0xf4, 0x0, 0xbf, 0xf4, 0x1a,
+ 0xc6, 0x0, 0x0, 0x56, 0x0,
/* U+F0C5 "" */
- 0x0, 0x1, 0x33, 0x32, 0x0, 0x0, 0x0, 0x3e,
- 0xa8, 0xac, 0x0, 0x0, 0x3, 0xeb, 0x40, 0x4c,
- 0x0, 0x0, 0x3e, 0x38, 0x40, 0x4d, 0xbb, 0xba,
- 0xed, 0xbd, 0x30, 0x7f, 0xa4, 0x4d, 0xc0, 0x0,
- 0x6, 0xd5, 0x80, 0xc, 0xc0, 0x0, 0x5e, 0x46,
- 0x80, 0xc, 0xc0, 0x0, 0xca, 0x88, 0x40, 0xc,
- 0xc0, 0x0, 0xc4, 0x0, 0x0, 0xc, 0xeb, 0xbb,
- 0xe4, 0x0, 0x0, 0xc, 0x24, 0x44, 0xd4, 0x0,
- 0x0, 0xc, 0x0, 0x0, 0xc6, 0x33, 0x33, 0x3c,
- 0x0, 0x0, 0x8c, 0xcc, 0xcc, 0xcb,
+ 0x0, 0x3, 0x44, 0x41, 0x20, 0x0, 0x0, 0xff,
+ 0xff, 0x5e, 0x40, 0x24, 0x1f, 0xff, 0xf5, 0xee,
+ 0x2f, 0xf4, 0xff, 0xff, 0xc8, 0x82, 0xff, 0x4f,
+ 0xff, 0xff, 0xff, 0x5f, 0xf4, 0xff, 0xff, 0xff,
+ 0xf5, 0xff, 0x4f, 0xff, 0xff, 0xff, 0x5f, 0xf4,
+ 0xff, 0xff, 0xff, 0xf5, 0xff, 0x4f, 0xff, 0xff,
+ 0xff, 0x5f, 0xf4, 0xff, 0xff, 0xff, 0xf4, 0xff,
+ 0x93, 0x44, 0x44, 0x43, 0xf, 0xff, 0xff, 0xff,
+ 0x50, 0x0, 0x68, 0x88, 0x88, 0x71, 0x0, 0x0,
/* U+F0C7 "" */
- 0x67, 0x77, 0x77, 0x74, 0x0, 0xe, 0xaf, 0xfa,
- 0x8e, 0xd6, 0x0, 0xc4, 0xff, 0x40, 0xc1, 0xd6,
- 0xc, 0x4f, 0xf4, 0xc, 0x1, 0xd3, 0xc3, 0xcc,
- 0xcc, 0x90, 0x8, 0x4c, 0x0, 0x0, 0x0, 0x0,
- 0x84, 0xc1, 0x77, 0x77, 0x77, 0x38, 0x4c, 0x4c,
- 0x88, 0x88, 0xa8, 0x84, 0xc4, 0x80, 0x0, 0x4,
- 0x88, 0x4c, 0x48, 0x0, 0x0, 0x48, 0x84, 0xbc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0x30,
+ 0x48, 0x88, 0x88, 0x87, 0x0, 0xf, 0xff, 0xff,
+ 0xff, 0xfb, 0x0, 0xf8, 0x0, 0x0, 0xb, 0xfb,
+ 0xf, 0x80, 0x0, 0x0, 0xbf, 0xf3, 0xfb, 0x77,
+ 0x77, 0x7d, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff,
+ 0xf4, 0xff, 0xff, 0x42, 0xdf, 0xff, 0x4f, 0xff,
+ 0xc0, 0x8, 0xff, 0xf4, 0xff, 0xfe, 0x0, 0xaf,
+ 0xff, 0x4f, 0xff, 0xfc, 0xaf, 0xff, 0xf4, 0xaf,
+ 0xff, 0xff, 0xff, 0xfd, 0x10,
/* U+F0E7 "" */
- 0x5, 0x77, 0x10, 0xd, 0xfe, 0x0, 0x1f, 0xf9,
- 0x0, 0x5f, 0xf4, 0x47, 0x9f, 0xff, 0xfa, 0xdf,
- 0xff, 0xf2, 0x96, 0x3f, 0xc0, 0x0, 0x4f, 0x40,
- 0x0, 0x8c, 0x0, 0x0, 0xc5, 0x0, 0x0, 0xe0,
- 0x0, 0x3, 0x50, 0x0,
+ 0x1, 0xbb, 0xba, 0x10, 0x0, 0x5f, 0xff, 0xf1,
+ 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0, 0x9f, 0xff,
+ 0x60, 0x0, 0xb, 0xff, 0xff, 0xff, 0x60, 0xef,
+ 0xff, 0xff, 0xf1, 0xe, 0xff, 0xff, 0xf8, 0x0,
+ 0x0, 0xc, 0xfe, 0x0, 0x0, 0x0, 0xff, 0x50,
+ 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x7, 0xf3,
+ 0x0, 0x0, 0x0, 0xa9, 0x0, 0x0, 0x0, 0x2,
+ 0x0, 0x0, 0x0,
+
+ /* U+F0EA "" */
+ 0x0, 0x2a, 0x50, 0x0, 0x0, 0xe, 0xff, 0x8f,
+ 0xff, 0x20, 0x0, 0xff, 0xf8, 0xff, 0xf4, 0x0,
+ 0xf, 0xff, 0xeb, 0xbb, 0x30, 0x0, 0xff, 0xf4,
+ 0x99, 0x92, 0x60, 0xf, 0xff, 0x5f, 0xff, 0x4f,
+ 0xa0, 0xff, 0xf5, 0xff, 0xf5, 0x56, 0x1f, 0xff,
+ 0x5f, 0xff, 0xff, 0xf4, 0xff, 0xf5, 0xff, 0xff,
+ 0xff, 0x4e, 0xff, 0x5f, 0xff, 0xff, 0xf4, 0x0,
+ 0x5, 0xff, 0xff, 0xff, 0x40, 0x0, 0x5f, 0xff,
+ 0xff, 0xf4, 0x0, 0x0, 0x44, 0x44, 0x44, 0x0,
/* U+F0F3 "" */
- 0x0, 0x0, 0x2, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x2a, 0xa2, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0x60, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xf2, 0x0,
- 0x0, 0x7f, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x8f,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0x9f, 0xff, 0xff,
- 0xf9, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xfc, 0x0,
- 0x4, 0xff, 0xff, 0xff, 0xff, 0x40, 0x1d, 0xff,
- 0xff, 0xff, 0xff, 0xd1, 0x7f, 0xff, 0xff, 0xff,
- 0xff, 0xf7, 0x0, 0x0, 0x9e, 0xfa, 0x0, 0x0,
- 0x0, 0x0, 0x19, 0xa1, 0x0, 0x0,
+ 0x0, 0x0, 0x15, 0x0, 0x0, 0x0, 0x0, 0x9,
+ 0xf1, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xf9, 0x0,
+ 0x0, 0xe, 0xff, 0xff, 0xf7, 0x0, 0x5, 0xff,
+ 0xff, 0xff, 0xd0, 0x0, 0x8f, 0xff, 0xff, 0xff,
+ 0x0, 0xa, 0xff, 0xff, 0xff, 0xf2, 0x0, 0xdf,
+ 0xff, 0xff, 0xff, 0x50, 0x6f, 0xff, 0xff, 0xff,
+ 0xfd, 0xe, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x24,
+ 0x44, 0x44, 0x44, 0x43, 0x0, 0x0, 0x2f, 0xf9,
+ 0x0, 0x0, 0x0, 0x0, 0x46, 0x0, 0x0, 0x0,
/* U+F11C "" */
- 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x8d, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x4c, 0xc3, 0x66, 0x39,
- 0x39, 0x66, 0xc4, 0xcc, 0x13, 0x23, 0x13, 0x12,
- 0x2c, 0x4c, 0xc2, 0x84, 0x62, 0x62, 0x44, 0x82,
- 0xcc, 0x24, 0x47, 0x77, 0x77, 0x46, 0x2c, 0xc1,
- 0x22, 0x44, 0x44, 0x42, 0x31, 0xcc, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xfc,
+ 0x8e, 0x8e, 0x8e, 0x88, 0xe8, 0xf7, 0xf8, 0xc,
+ 0xc, 0xb, 0x0, 0xb0, 0xf8, 0xff, 0xec, 0xfc,
+ 0xec, 0xee, 0xcf, 0xf8, 0xff, 0xa0, 0xc0, 0xa0,
+ 0x77, 0x2f, 0xf8, 0xff, 0xec, 0xfc, 0xec, 0xee,
+ 0xcf, 0xf8, 0xf8, 0xc, 0x0, 0x0, 0x0, 0xb0,
+ 0xf8, 0xfc, 0x8e, 0x88, 0x88, 0x88, 0xe8, 0xf7,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
/* U+F124 "" */
- 0x0, 0x0, 0x0, 0x0, 0x63, 0x0, 0x0, 0x0,
- 0x6d, 0xf2, 0x0, 0x0, 0x6d, 0xff, 0xa0, 0x0,
- 0x6d, 0xff, 0xff, 0x20, 0x6d, 0xff, 0xff, 0xfa,
- 0x0, 0x88, 0x88, 0xef, 0xf2, 0x0, 0x0, 0x0,
- 0xcf, 0xa0, 0x0, 0x0, 0x0, 0xcf, 0x20, 0x0,
- 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0x0, 0x92,
- 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x30, 0x0,
+ 0x0, 0x0, 0x0, 0x18, 0xef, 0xe0, 0x0, 0x0,
+ 0x0, 0x29, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x3a,
+ 0xff, 0xff, 0xff, 0x30, 0x0, 0x4c, 0xff, 0xff,
+ 0xff, 0xfc, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff,
+ 0xf5, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xd0,
+ 0x0, 0x1, 0x34, 0x44, 0xdf, 0xff, 0x60, 0x0,
+ 0x0, 0x0, 0x0, 0xcf, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xcf, 0xf8, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xcf, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26,
+ 0x0, 0x0, 0x0,
/* U+F15B "" */
- 0x33, 0x33, 0x33, 0x0, 0x0, 0xf, 0xff, 0xff,
- 0xf4, 0x60, 0x0, 0xff, 0xff, 0xff, 0x4f, 0x60,
- 0xf, 0xff, 0xff, 0xf4, 0xff, 0x60, 0xff, 0xff,
- 0xff, 0x24, 0x44, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0x20,
+ 0x9b, 0xbb, 0xb2, 0x70, 0xf, 0xff, 0xff, 0x4f,
+ 0x90, 0xff, 0xff, 0xf4, 0xff, 0x9f, 0xff, 0xff,
+ 0x54, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x44,
+ 0x44, 0x44, 0x30,
/* U+F1EB "" */
- 0x0, 0x0, 0x13, 0x64, 0x30, 0x0, 0x0, 0x0,
- 0x6c, 0xff, 0xff, 0xff, 0x92, 0x0, 0x1b, 0xff,
- 0xb7, 0x44, 0x8d, 0xff, 0x70, 0x8f, 0xb3, 0x6a,
- 0xbb, 0x94, 0x4d, 0xf4, 0x5, 0x4e, 0xff, 0xef,
- 0xff, 0xc3, 0x50, 0x0, 0xaf, 0x82, 0x33, 0x2b,
- 0xf5, 0x0, 0x0, 0x2, 0x9f, 0xff, 0xe6, 0x20,
- 0x0, 0x0, 0x0, 0xae, 0x89, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0xa8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xa6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0x9b, 0xcb, 0x95, 0x0, 0x0, 0x0,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3, 0xef,
+ 0xfa, 0x53, 0x23, 0x5a, 0xff, 0xe3, 0xdf, 0xa1,
+ 0x0, 0x0, 0x0, 0x1, 0xaf, 0xd2, 0x60, 0x5,
+ 0xbe, 0xfe, 0xb5, 0x0, 0x52, 0x0, 0x1c, 0xff,
+ 0xfe, 0xff, 0xfc, 0x10, 0x0, 0x2, 0xec, 0x40,
+ 0x0, 0x4c, 0xe2, 0x0, 0x0, 0x1, 0x0, 0x1,
+ 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0xa, 0xfa,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xd6, 0x0,
+ 0x0, 0x0,
/* U+F240 "" */
- 0x57, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x10,
- 0xe4, 0x44, 0x44, 0x44, 0x44, 0x44, 0x47, 0x80,
- 0xc3, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x94, 0xa1,
- 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc2, 0xc7,
- 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x88,
- 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x88,
- 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc4, 0xe4,
- 0xc1, 0x44, 0x44, 0x44, 0x44, 0x44, 0x34, 0x80,
- 0xdb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0x50,
+ 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
+ 0x34, 0x44, 0x44, 0x44, 0x44, 0x4f, 0xdf, 0x8c,
+ 0xff, 0xff, 0xff, 0xff, 0xf2, 0xcf, 0xf8, 0xcf,
+ 0xff, 0xff, 0xff, 0xff, 0x8, 0xff, 0x89, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xc3, 0xff, 0xfb, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+F241 "" */
- 0x57, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x10,
- 0xe4, 0x44, 0x44, 0x44, 0x44, 0x44, 0x47, 0x80,
- 0xc3, 0xbb, 0xbb, 0xbb, 0xbb, 0x30, 0x4, 0xa1,
- 0xc4, 0xff, 0xff, 0xff, 0xff, 0x40, 0x2, 0xc7,
- 0xc4, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x88,
- 0xc4, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x88,
- 0xc4, 0xff, 0xff, 0xff, 0xff, 0x40, 0x4, 0xe4,
- 0xc1, 0x44, 0x44, 0x44, 0x44, 0x10, 0x4, 0x80,
- 0xdb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0x50,
+ 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
+ 0x34, 0x44, 0x44, 0x43, 0x0, 0x4f, 0xdf, 0x8c,
+ 0xff, 0xff, 0xff, 0xc0, 0x2, 0xcf, 0xf8, 0xcf,
+ 0xff, 0xff, 0xfc, 0x0, 0x8, 0xff, 0x89, 0xcc,
+ 0xcc, 0xcc, 0x90, 0x3, 0xff, 0xfb, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+F242 "" */
- 0x57, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x10,
- 0xe4, 0x44, 0x44, 0x44, 0x44, 0x44, 0x47, 0x80,
- 0xc3, 0xbb, 0xbb, 0xb9, 0x0, 0x0, 0x4, 0xa1,
- 0xc4, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x2, 0xc7,
- 0xc4, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x88,
- 0xc4, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x88,
- 0xc4, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x4, 0xe4,
- 0xc1, 0x44, 0x44, 0x43, 0x0, 0x0, 0x4, 0x80,
- 0xdb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0x50,
+ 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
+ 0x34, 0x44, 0x42, 0x0, 0x0, 0x4f, 0xdf, 0x8c,
+ 0xff, 0xff, 0x80, 0x0, 0x2, 0xcf, 0xf8, 0xcf,
+ 0xff, 0xf8, 0x0, 0x0, 0x8, 0xff, 0x89, 0xcc,
+ 0xcc, 0x60, 0x0, 0x3, 0xff, 0xfb, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+F243 "" */
- 0x57, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x10,
- 0xe4, 0x44, 0x44, 0x44, 0x44, 0x44, 0x47, 0x80,
- 0xc3, 0xbb, 0xb3, 0x0, 0x0, 0x0, 0x4, 0xa1,
- 0xc4, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x2, 0xc7,
- 0xc4, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x88,
- 0xc4, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x88,
- 0xc4, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x4, 0xe4,
- 0xc1, 0x44, 0x41, 0x0, 0x0, 0x0, 0x4, 0x80,
- 0xdb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0x50,
+ 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
+ 0x34, 0x41, 0x0, 0x0, 0x0, 0x4f, 0xdf, 0x8c,
+ 0xff, 0x40, 0x0, 0x0, 0x2, 0xcf, 0xf8, 0xcf,
+ 0xf4, 0x0, 0x0, 0x0, 0x8, 0xff, 0x89, 0xcc,
+ 0x30, 0x0, 0x0, 0x3, 0xff, 0xfb, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+F244 "" */
- 0x57, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x10,
- 0xe4, 0x44, 0x44, 0x44, 0x44, 0x44, 0x47, 0x80,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xa1,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xc7,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xe4,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x80,
- 0xdb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0x50,
+ 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xdf, 0x80,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0xcf, 0xf8, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x80, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0xff, 0xfb, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x9f, 0x9c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F287 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x25, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5, 0xcb, 0xfe, 0x0, 0x0, 0x0,
+ 0x1, 0x0, 0xd, 0x10, 0x42, 0x0, 0x0, 0x0,
+ 0x9f, 0xd1, 0x68, 0x0, 0x0, 0x0, 0x68, 0x0,
+ 0xff, 0xfe, 0xee, 0xed, 0xdd, 0xdd, 0xef, 0xc0,
+ 0x9f, 0xd1, 0x0, 0xb3, 0x0, 0x0, 0x68, 0x0,
+ 0x1, 0x0, 0x0, 0x3b, 0x5, 0x74, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x9, 0xbe, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2d, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F293 "" */
- 0x0, 0x1, 0x33, 0x20, 0x0, 0x0, 0x9f, 0xff,
- 0xfb, 0x10, 0x7, 0xff, 0xc6, 0xff, 0xb0, 0xe,
- 0xff, 0xc0, 0x6f, 0xf2, 0x1f, 0xa6, 0xc4, 0x57,
- 0xf6, 0x4f, 0xf6, 0x32, 0x2c, 0xf8, 0x4f, 0xff,
- 0x50, 0xdf, 0xf8, 0x4f, 0xfd, 0x10, 0x6f, 0xf8,
- 0x3f, 0xd2, 0x94, 0x57, 0xf8, 0xf, 0xec, 0xc2,
- 0x2c, 0xf4, 0xa, 0xff, 0xc1, 0xcf, 0xf0, 0x2,
- 0xff, 0xdc, 0xff, 0x50, 0x0, 0x17, 0xcc, 0x92,
- 0x0
+ 0x0, 0x0, 0x34, 0x20, 0x0, 0x0, 0x6e, 0xfe,
+ 0xfd, 0x20, 0x4, 0xff, 0xf3, 0xff, 0xd0, 0xc,
+ 0xff, 0xf0, 0x4f, 0xf5, 0xf, 0xd5, 0xf2, 0x95,
+ 0xf8, 0x2f, 0xf7, 0x41, 0x3c, 0xfa, 0x3f, 0xff,
+ 0x60, 0xaf, 0xfb, 0x3f, 0xfe, 0x20, 0x4f, 0xfb,
+ 0x2f, 0xe2, 0x92, 0x75, 0xfa, 0xf, 0xeb, 0xf1,
+ 0x49, 0xf8, 0x9, 0xff, 0xf0, 0x9f, 0xf2, 0x1,
+ 0xdf, 0xf9, 0xff, 0x90, 0x0, 0x6, 0xab, 0x95,
+ 0x0,
+
+ /* U+F2ED "" */
+ 0x0, 0x4, 0x88, 0x70, 0x0, 0xb, 0xcc, 0xff,
+ 0xff, 0xdc, 0xc5, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0x52, 0x88, 0x88, 0x88, 0x88, 0x60, 0x4f, 0xff,
+ 0xff, 0xff, 0xfc, 0x4, 0xfa, 0xae, 0x6f, 0x5f,
+ 0xc0, 0x4f, 0xaa, 0xe6, 0xf4, 0xfc, 0x4, 0xfa,
+ 0xae, 0x6f, 0x4f, 0xc0, 0x4f, 0xaa, 0xe6, 0xf4,
+ 0xfc, 0x4, 0xfa, 0xae, 0x6f, 0x4f, 0xc0, 0x4f,
+ 0xaa, 0xe6, 0xf5, 0xfc, 0x3, 0xff, 0xff, 0xff,
+ 0xff, 0xb0, 0x6, 0x88, 0x88, 0x88, 0x72, 0x0,
+
+ /* U+F304 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x71, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0xef, 0xd1, 0x0, 0x0, 0x0,
+ 0x1, 0x5f, 0xff, 0xc0, 0x0, 0x0, 0x2, 0xea,
+ 0x5f, 0xfd, 0x0, 0x0, 0x2, 0xef, 0xfa, 0x5d,
+ 0x20, 0x0, 0x2, 0xef, 0xff, 0xf8, 0x0, 0x0,
+ 0x2, 0xef, 0xff, 0xfe, 0x20, 0x0, 0x2, 0xef,
+ 0xff, 0xfe, 0x20, 0x0, 0x2, 0xef, 0xff, 0xfe,
+ 0x20, 0x0, 0x0, 0xbf, 0xff, 0xfe, 0x20, 0x0,
+ 0x0, 0xd, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
+ 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x6, 0x64,
+ 0x10, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F55A "" */
+ 0x0, 0x5, 0xef, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5,
+ 0xff, 0xff, 0x91, 0xdd, 0x19, 0xff, 0xf5, 0xff,
+ 0xff, 0xfd, 0x11, 0x11, 0xdf, 0xff, 0xef, 0xff,
+ 0xff, 0xfb, 0x0, 0xbf, 0xff, 0xf5, 0xff, 0xff,
+ 0xfd, 0x11, 0x11, 0xdf, 0xff, 0x5, 0xff, 0xff,
+ 0x91, 0xdd, 0x19, 0xff, 0xf0, 0x5, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x0, 0x4, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0x80,
+
+ /* U+F7C2 "" */
+ 0x0, 0x17, 0x88, 0x87, 0x20, 0x2d, 0xff, 0xff,
+ 0xfd, 0x2e, 0xa0, 0xb3, 0x78, 0xfe, 0xfa, 0xb,
+ 0x37, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0x4, 0x44,
+ 0x44, 0x44, 0x0,
+
+ /* U+F8A2 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x69, 0x0,
+ 0x0, 0x0, 0xdf, 0x0, 0x7f, 0xc0, 0x0, 0x0,
+ 0xd, 0xf0, 0x8f, 0xff, 0xdd, 0xdd, 0xdd, 0xff,
+ 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xb,
+ 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xc0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0
};
@@ -1024,152 +1163,159 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 48, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 51, .box_h = 9, .box_w = 2, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 9, .adv_w = 69, .box_h = 4, .box_w = 4, .ofs_x = 0, .ofs_y = 5},
- {.bitmap_index = 17, .adv_w = 120, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 49, .adv_w = 112, .box_h = 12, .box_w = 7, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 91, .adv_w = 140, .box_h = 9, .box_w = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 132, .adv_w = 120, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 168, .adv_w = 42, .box_h = 4, .box_w = 2, .ofs_x = 0, .ofs_y = 5},
- {.bitmap_index = 172, .adv_w = 64, .box_h = 13, .box_w = 4, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 198, .adv_w = 64, .box_h = 13, .box_w = 4, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 224, .adv_w = 83, .box_h = 5, .box_w = 5, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 237, .adv_w = 109, .box_h = 7, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 262, .adv_w = 43, .box_h = 4, .box_w = 2, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 266, .adv_w = 87, .box_h = 2, .box_w = 4, .ofs_x = 1, .ofs_y = 3},
- {.bitmap_index = 270, .adv_w = 51, .box_h = 2, .box_w = 3, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 273, .adv_w = 80, .box_h = 10, .box_w = 5, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 298, .adv_w = 108, .box_h = 10, .box_w = 6, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 328, .adv_w = 108, .box_h = 9, .box_w = 4, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 346, .adv_w = 108, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 378, .adv_w = 108, .box_h = 9, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 405, .adv_w = 108, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 437, .adv_w = 108, .box_h = 9, .box_w = 5, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 460, .adv_w = 108, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 492, .adv_w = 108, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 524, .adv_w = 108, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 556, .adv_w = 108, .box_h = 9, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 583, .adv_w = 48, .box_h = 7, .box_w = 1, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 587, .adv_w = 49, .box_h = 9, .box_w = 2, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 596, .adv_w = 98, .box_h = 6, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 614, .adv_w = 108, .box_h = 4, .box_w = 5, .ofs_x = 1, .ofs_y = 2},
- {.bitmap_index = 624, .adv_w = 101, .box_h = 6, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 642, .adv_w = 91, .box_h = 9, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 669, .adv_w = 172, .box_h = 12, .box_w = 11, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 735, .adv_w = 121, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 771, .adv_w = 121, .box_h = 9, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 803, .adv_w = 122, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 835, .adv_w = 130, .box_h = 9, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 867, .adv_w = 105, .box_h = 9, .box_w = 6, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 894, .adv_w = 105, .box_h = 9, .box_w = 6, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 921, .adv_w = 130, .box_h = 10, .box_w = 8, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 961, .adv_w = 135, .box_h = 9, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 993, .adv_w = 54, .box_h = 9, .box_w = 2, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1002, .adv_w = 105, .box_h = 9, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1029, .adv_w = 121, .box_h = 9, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1061, .adv_w = 105, .box_h = 9, .box_w = 6, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1088, .adv_w = 165, .box_h = 9, .box_w = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1129, .adv_w = 135, .box_h = 9, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1161, .adv_w = 131, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1197, .adv_w = 121, .box_h = 9, .box_w = 6, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1224, .adv_w = 134, .box_h = 10, .box_w = 8, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 1264, .adv_w = 122, .box_h = 9, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1296, .adv_w = 117, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1328, .adv_w = 115, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1360, .adv_w = 130, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1396, .adv_w = 121, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1432, .adv_w = 165, .box_h = 9, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1477, .adv_w = 121, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1513, .adv_w = 121, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1549, .adv_w = 115, .box_h = 9, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1581, .adv_w = 52, .box_h = 12, .box_w = 3, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 1599, .adv_w = 79, .box_h = 10, .box_w = 5, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 1624, .adv_w = 52, .box_h = 12, .box_w = 3, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 1642, .adv_w = 80, .box_h = 5, .box_w = 5, .ofs_x = 0, .ofs_y = 4},
- {.bitmap_index = 1655, .adv_w = 87, .box_h = 1, .box_w = 6, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 1658, .adv_w = 60, .box_h = 2, .box_w = 3, .ofs_x = 0, .ofs_y = 7},
- {.bitmap_index = 1661, .adv_w = 106, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1682, .adv_w = 109, .box_h = 10, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1717, .adv_w = 101, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1738, .adv_w = 109, .box_h = 10, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1768, .adv_w = 101, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1789, .adv_w = 59, .box_h = 10, .box_w = 4, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1809, .adv_w = 109, .box_h = 10, .box_w = 6, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 1839, .adv_w = 109, .box_h = 10, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1869, .adv_w = 48, .box_h = 10, .box_w = 1, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1874, .adv_w = 50, .box_h = 13, .box_w = 4, .ofs_x = -1, .ofs_y = -3},
- {.bitmap_index = 1900, .adv_w = 98, .box_h = 10, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1930, .adv_w = 48, .box_h = 10, .box_w = 3, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1945, .adv_w = 168, .box_h = 7, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1980, .adv_w = 109, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2001, .adv_w = 109, .box_h = 7, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2026, .adv_w = 109, .box_h = 10, .box_w = 7, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2061, .adv_w = 109, .box_h = 10, .box_w = 6, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2091, .adv_w = 67, .box_h = 7, .box_w = 4, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2105, .adv_w = 100, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2126, .adv_w = 61, .box_h = 8, .box_w = 4, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2142, .adv_w = 109, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2163, .adv_w = 97, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2184, .adv_w = 145, .box_h = 7, .box_w = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2216, .adv_w = 97, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2237, .adv_w = 97, .box_h = 10, .box_w = 6, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2267, .adv_w = 97, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2288, .adv_w = 65, .box_h = 12, .box_w = 4, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2312, .adv_w = 48, .box_h = 11, .box_w = 2, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2323, .adv_w = 65, .box_h = 12, .box_w = 4, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2347, .adv_w = 130, .box_h = 3, .box_w = 8, .ofs_x = 0, .ofs_y = 2},
- {.bitmap_index = 2359, .adv_w = 165, .box_h = 12, .box_w = 11, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2425, .adv_w = 206, .box_h = 12, .box_w = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2503, .adv_w = 192, .box_h = 10, .box_w = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2563, .adv_w = 192, .box_h = 8, .box_w = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2611, .adv_w = 151, .box_h = 8, .box_w = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2647, .adv_w = 165, .box_h = 12, .box_w = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 2713, .adv_w = 165, .box_h = 11, .box_w = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 2774, .adv_w = 151, .box_h = 11, .box_w = 10, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 2829, .adv_w = 178, .box_h = 9, .box_w = 11, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2879, .adv_w = 178, .box_h = 11, .box_w = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2945, .adv_w = 165, .box_h = 9, .box_w = 11, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2995, .adv_w = 165, .box_h = 11, .box_w = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3056, .adv_w = 82, .box_h = 9, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3083, .adv_w = 123, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3119, .adv_w = 178, .box_h = 10, .box_w = 12, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3179, .adv_w = 206, .box_h = 11, .box_w = 13, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3251, .adv_w = 165, .box_h = 11, .box_w = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3312, .adv_w = 110, .box_h = 11, .box_w = 7, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3351, .adv_w = 151, .box_h = 11, .box_w = 10, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3406, .adv_w = 165, .box_h = 11, .box_w = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3467, .adv_w = 165, .box_h = 11, .box_w = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3528, .adv_w = 110, .box_h = 11, .box_w = 7, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3567, .adv_w = 165, .box_h = 9, .box_w = 11, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3617, .adv_w = 137, .box_h = 11, .box_w = 7, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 3656, .adv_w = 137, .box_h = 11, .box_w = 8, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3700, .adv_w = 151, .box_h = 10, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3750, .adv_w = 151, .box_h = 3, .box_w = 10, .ofs_x = 0, .ofs_y = 3},
- {.bitmap_index = 3765, .adv_w = 192, .box_h = 12, .box_w = 12, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3837, .adv_w = 192, .box_h = 11, .box_w = 12, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3903, .adv_w = 192, .box_h = 7, .box_w = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3945, .adv_w = 192, .box_h = 8, .box_w = 12, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3993, .adv_w = 206, .box_h = 8, .box_w = 13, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4045, .adv_w = 178, .box_h = 10, .box_w = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4105, .adv_w = 178, .box_h = 11, .box_w = 12, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 4171, .adv_w = 151, .box_h = 10, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4221, .adv_w = 192, .box_h = 10, .box_w = 12, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 4281, .adv_w = 192, .box_h = 13, .box_w = 12, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4359, .adv_w = 165, .box_h = 11, .box_w = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 4420, .adv_w = 96, .box_h = 12, .box_w = 6, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4456, .adv_w = 192, .box_h = 13, .box_w = 12, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4534, .adv_w = 206, .box_h = 8, .box_w = 13, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4586, .adv_w = 151, .box_h = 10, .box_w = 10, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 4636, .adv_w = 165, .box_h = 13, .box_w = 11, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4708, .adv_w = 219, .box_h = 10, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4778, .adv_w = 247, .box_h = 9, .box_w = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4850, .adv_w = 247, .box_h = 9, .box_w = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4922, .adv_w = 247, .box_h = 9, .box_w = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4994, .adv_w = 247, .box_h = 9, .box_w = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5066, .adv_w = 247, .box_h = 9, .box_w = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5138, .adv_w = 165, .box_h = 13, .box_w = 10, .ofs_x = 0, .ofs_y = -2}
+ {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 48, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 0, .adv_w = 49, .box_w = 3, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 14, .adv_w = 61, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 6},
+ {.bitmap_index = 22, .adv_w = 120, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 54, .adv_w = 108, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 96, .adv_w = 141, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 137, .adv_w = 119, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 173, .adv_w = 33, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = 6},
+ {.bitmap_index = 177, .adv_w = 66, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 205, .adv_w = 67, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 233, .adv_w = 83, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 3},
+ {.bitmap_index = 248, .adv_w = 109, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 273, .adv_w = 38, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 277, .adv_w = 53, .box_w = 4, .box_h = 1, .ofs_x = 0, .ofs_y = 3},
+ {.bitmap_index = 279, .adv_w = 51, .box_w = 3, .box_h = 2, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 282, .adv_w = 79, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 307, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 339, .adv_w = 108, .box_w = 4, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 357, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 389, .adv_w = 108, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 416, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 448, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 480, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 512, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 544, .adv_w = 108, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 576, .adv_w = 108, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 603, .adv_w = 47, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 614, .adv_w = 41, .box_w = 2, .box_h = 9, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 623, .adv_w = 98, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 641, .adv_w = 105, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 656, .adv_w = 100, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 674, .adv_w = 91, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 701, .adv_w = 172, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 767, .adv_w = 125, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 803, .adv_w = 120, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 835, .adv_w = 125, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 871, .adv_w = 126, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 907, .adv_w = 109, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 939, .adv_w = 106, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 971, .adv_w = 131, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1007, .adv_w = 137, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1043, .adv_w = 52, .box_w = 2, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1052, .adv_w = 106, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1079, .adv_w = 120, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1115, .adv_w = 103, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1147, .adv_w = 168, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1192, .adv_w = 137, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1228, .adv_w = 132, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1264, .adv_w = 121, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1300, .adv_w = 132, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 1344, .adv_w = 118, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1380, .adv_w = 114, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1412, .adv_w = 115, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1444, .adv_w = 125, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1476, .adv_w = 122, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1512, .adv_w = 170, .box_w = 11, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1562, .adv_w = 120, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1598, .adv_w = 115, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1634, .adv_w = 115, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1666, .adv_w = 51, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 1692, .adv_w = 79, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 1717, .adv_w = 51, .box_w = 3, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 1737, .adv_w = 80, .box_w = 5, .box_h = 5, .ofs_x = 0, .ofs_y = 5},
+ {.bitmap_index = 1750, .adv_w = 87, .box_w = 6, .box_h = 1, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 1753, .adv_w = 59, .box_w = 3, .box_h = 2, .ofs_x = 0, .ofs_y = 8},
+ {.bitmap_index = 1756, .adv_w = 104, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1777, .adv_w = 108, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1812, .adv_w = 101, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1833, .adv_w = 108, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1863, .adv_w = 102, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1884, .adv_w = 67, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1909, .adv_w = 108, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 1939, .adv_w = 106, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1969, .adv_w = 47, .box_w = 3, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1983, .adv_w = 46, .box_w = 4, .box_h = 12, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 2007, .adv_w = 97, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2042, .adv_w = 47, .box_w = 2, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2052, .adv_w = 168, .box_w = 10, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2087, .adv_w = 106, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2108, .adv_w = 110, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2133, .adv_w = 108, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 2168, .adv_w = 109, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 2198, .adv_w = 65, .box_w = 4, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2212, .adv_w = 99, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2233, .adv_w = 63, .box_w = 4, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2251, .adv_w = 106, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2272, .adv_w = 93, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2293, .adv_w = 144, .box_w = 9, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2325, .adv_w = 95, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2346, .adv_w = 91, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 2376, .adv_w = 95, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2397, .adv_w = 65, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 2423, .adv_w = 47, .box_w = 1, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 2429, .adv_w = 65, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 2455, .adv_w = 131, .box_w = 8, .box_h = 4, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 2471, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 2549, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2603, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 2669, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2723, .adv_w = 132, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2764, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 2842, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 2920, .adv_w = 216, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 2997, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 3075, .adv_w = 216, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3138, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 3216, .adv_w = 96, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 3246, .adv_w = 144, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 3291, .adv_w = 216, .box_w = 14, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 3382, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3436, .adv_w = 168, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 3484, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 3556, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 3617, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 3678, .adv_w = 168, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 3726, .adv_w = 168, .box_w = 12, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 3792, .adv_w = 120, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 3831, .adv_w = 120, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 3870, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 3931, .adv_w = 168, .box_w = 11, .box_h = 3, .ofs_x = 0, .ofs_y = 3},
+ {.bitmap_index = 3948, .adv_w = 216, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4011, .adv_w = 240, .box_w = 16, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 4115, .adv_w = 216, .box_w = 15, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 4213, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 4279, .adv_w = 168, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 4318, .adv_w = 168, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 4357, .adv_w = 240, .box_w = 16, .box_h = 10, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 4437, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4491, .adv_w = 192, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 4569, .adv_w = 192, .box_w = 13, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 4654, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 4715, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 4787, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 4848, .adv_w = 120, .box_w = 9, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 4907, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 4979, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5051, .adv_w = 216, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5114, .adv_w = 192, .box_w = 14, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 5205, .adv_w = 144, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5264, .adv_w = 240, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 5354, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5422, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5490, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5558, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5626, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5694, .adv_w = 240, .box_w = 16, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 5782, .adv_w = 168, .box_w = 10, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5847, .adv_w = 168, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5919, .adv_w = 192, .box_w = 13, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 6004, .adv_w = 240, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6072, .adv_w = 144, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 6131, .adv_w = 193, .box_w = 13, .box_h = 9, .ofs_x = 0, .ofs_y = 0}
};
/*---------------------
@@ -1177,25 +1323,26 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
*--------------------*/
static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x13,
- 0x14, 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d,
- 0x3f, 0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52,
- 0x53, 0x66, 0x67, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xf2,
- 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241, 0x242,
- 0x243, 0x292
+ 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
+ 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
+ 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
+ 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
+ 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
+ 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
+ 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
+ 0x8a1
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
- .range_start = 32, .range_length = 95, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY,
- .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0
+ .range_start = 32, .range_length = 95, .glyph_id_start = 1,
+ .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
- .range_start = 61441, .range_length = 659, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY,
- .glyph_id_start = 96, .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 50
+ .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
+ .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
@@ -1204,569 +1351,245 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
*----------------*/
-/*Pair left and right glyphs for kerning*/
-static const uint8_t kern_pair_glyph_ids[] =
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] =
{
- 9, 43,
- 9, 55,
- 9, 56,
- 9, 58,
- 17, 17,
- 17, 18,
- 17, 20,
- 17, 21,
- 17, 22,
- 17, 23,
- 17, 24,
- 17, 26,
- 18, 19,
- 18, 20,
- 18, 22,
- 18, 24,
- 19, 17,
- 19, 18,
- 19, 19,
- 19, 22,
- 19, 23,
- 19, 24,
- 19, 25,
- 19, 26,
- 20, 18,
- 20, 19,
- 20, 20,
- 20, 21,
- 20, 22,
- 20, 23,
- 20, 24,
- 20, 25,
- 20, 26,
- 21, 17,
- 21, 19,
- 21, 21,
- 21, 22,
- 21, 23,
- 21, 24,
- 21, 25,
- 22, 18,
- 22, 19,
- 22, 20,
- 22, 21,
- 22, 22,
- 22, 23,
- 22, 24,
- 22, 25,
- 22, 26,
- 23, 17,
- 23, 18,
- 23, 19,
- 23, 21,
- 23, 22,
- 23, 23,
- 23, 24,
- 23, 25,
- 24, 18,
- 24, 21,
- 24, 22,
- 24, 23,
- 24, 24,
- 24, 25,
- 24, 26,
- 25, 17,
- 25, 18,
- 25, 20,
- 25, 21,
- 25, 22,
- 25, 23,
- 26, 17,
- 26, 18,
- 26, 19,
- 26, 21,
- 26, 22,
- 26, 23,
- 26, 24,
- 26, 26,
- 34, 36,
- 34, 40,
- 34, 48,
- 34, 50,
- 34, 53,
- 34, 54,
- 34, 55,
- 34, 56,
- 34, 58,
- 34, 66,
- 34, 68,
- 34, 69,
- 34, 70,
- 34, 72,
- 34, 80,
- 34, 82,
- 34, 84,
- 34, 85,
- 34, 86,
- 34, 87,
- 34, 88,
- 34, 91,
- 35, 58,
- 35, 66,
- 35, 74,
- 35, 77,
- 35, 80,
- 35, 83,
- 35, 86,
- 35, 90,
- 36, 36,
- 36, 40,
- 36, 48,
- 36, 50,
- 36, 74,
- 36, 83,
- 36, 86,
- 36, 90,
- 36, 91,
- 37, 55,
- 37, 56,
- 37, 66,
- 37, 70,
- 37, 80,
- 37, 86,
- 38, 55,
- 38, 56,
- 38, 58,
- 38, 67,
- 38, 68,
- 38, 69,
- 38, 70,
- 38, 71,
- 38, 72,
- 38, 74,
- 38, 75,
- 38, 76,
- 38, 77,
- 38, 78,
- 38, 79,
- 38, 80,
- 38, 81,
- 38, 82,
- 38, 83,
- 38, 85,
- 38, 86,
- 38, 87,
- 38, 88,
- 38, 89,
- 38, 90,
- 38, 91,
- 39, 13,
- 39, 15,
- 39, 34,
- 39, 66,
- 39, 70,
- 39, 74,
- 39, 77,
- 39, 80,
- 39, 83,
- 39, 86,
- 39, 90,
- 40, 66,
- 40, 70,
- 40, 79,
- 40, 80,
- 40, 83,
- 40, 86,
- 40, 90,
- 41, 66,
- 41, 70,
- 41, 80,
- 41, 86,
- 41, 90,
- 42, 66,
- 42, 68,
- 42, 69,
- 42, 71,
- 42, 72,
- 42, 78,
- 42, 79,
- 42, 80,
- 42, 81,
- 42, 83,
- 42, 84,
- 42, 85,
- 42, 86,
- 42, 87,
- 42, 88,
- 42, 90,
- 43, 66,
- 43, 80,
- 44, 36,
- 44, 40,
- 44, 48,
- 44, 50,
- 44, 66,
- 44, 70,
- 44, 74,
- 44, 80,
- 44, 83,
- 44, 86,
- 44, 88,
- 44, 90,
- 45, 34,
- 45, 36,
- 45, 40,
- 45, 48,
- 45, 50,
- 45, 53,
- 45, 54,
- 45, 55,
- 45, 56,
- 45, 58,
- 45, 75,
- 45, 86,
- 45, 88,
- 45, 90,
- 46, 66,
- 46, 70,
- 46, 75,
- 46, 79,
- 46, 80,
- 46, 86,
- 46, 90,
- 47, 70,
- 47, 80,
- 47, 90,
- 48, 34,
- 48, 53,
- 48, 55,
- 48, 56,
- 48, 57,
- 48, 58,
- 48, 68,
- 48, 69,
- 48, 70,
- 48, 71,
- 48, 72,
- 48, 75,
- 48, 80,
- 48, 81,
- 48, 82,
- 48, 84,
- 48, 85,
- 48, 86,
- 48, 89,
- 48, 90,
- 48, 91,
- 49, 13,
- 49, 15,
- 49, 34,
- 49, 38,
- 49, 41,
- 49, 42,
- 49, 66,
- 49, 70,
- 49, 73,
- 49, 74,
- 49, 77,
- 49, 79,
- 49, 80,
- 49, 83,
- 49, 84,
- 49, 85,
- 49, 90,
- 50, 34,
- 50, 53,
- 50, 54,
- 50, 55,
- 50, 56,
- 50, 57,
- 50, 58,
- 50, 66,
- 50, 86,
- 51, 36,
- 51, 40,
- 51, 48,
- 51, 50,
- 51, 53,
- 51, 54,
- 51, 55,
- 51, 56,
- 51, 58,
- 51, 66,
- 51, 70,
- 51, 80,
- 51, 86,
- 51, 90,
- 52, 66,
- 52, 70,
- 52, 75,
- 52, 78,
- 52, 79,
- 52, 80,
- 52, 81,
- 52, 82,
- 52, 86,
- 52, 88,
- 52, 90,
- 53, 13,
- 53, 14,
- 53, 15,
- 53, 27,
- 53, 28,
- 53, 34,
- 53, 36,
- 53, 40,
- 53, 48,
- 53, 50,
- 53, 52,
- 53, 53,
- 53, 55,
- 53, 56,
- 53, 57,
- 53, 58,
- 53, 66,
- 53, 70,
- 53, 74,
- 53, 78,
- 53, 80,
- 53, 83,
- 53, 84,
- 53, 86,
- 53, 88,
- 53, 90,
- 53, 91,
- 54, 34,
- 54, 69,
- 54, 71,
- 54, 72,
- 54, 78,
- 54, 79,
- 54, 81,
- 54, 83,
- 54, 84,
- 54, 85,
- 54, 89,
- 54, 91,
- 55, 10,
- 55, 13,
- 55, 14,
- 55, 15,
- 55, 27,
- 55, 28,
- 55, 34,
- 55, 36,
- 55, 40,
- 55, 48,
- 55, 50,
- 55, 62,
- 55, 66,
- 55, 70,
- 55, 80,
- 55, 83,
- 55, 86,
- 55, 90,
- 55, 94,
- 56, 10,
- 56, 13,
- 56, 14,
- 56, 15,
- 56, 27,
- 56, 28,
- 56, 34,
- 56, 36,
- 56, 40,
- 56, 48,
- 56, 50,
- 56, 53,
- 56, 62,
- 56, 66,
- 56, 70,
- 56, 80,
- 56, 83,
- 56, 86,
- 56, 90,
- 56, 94,
- 57, 36,
- 57, 40,
- 57, 48,
- 57, 50,
- 57, 70,
- 57, 86,
- 57, 90,
- 58, 10,
- 58, 13,
- 58, 14,
- 58, 15,
- 58, 27,
- 58, 28,
- 58, 34,
- 58, 36,
- 58, 40,
- 58, 48,
- 58, 50,
- 58, 53,
- 58, 55,
- 58, 56,
- 58, 57,
- 58, 58,
- 58, 62,
- 58, 66,
- 58, 70,
- 58, 80,
- 58, 82,
- 58, 85,
- 58, 86,
- 58, 87,
- 58, 94,
- 59, 34,
- 59, 36,
- 59, 40,
- 59, 48,
- 59, 50,
- 59, 66,
- 59, 70,
- 59, 74,
- 59, 80,
- 59, 86,
- 59, 88,
- 59, 90,
- 60, 43,
- 67, 87,
- 67, 88,
- 67, 90,
- 70, 90,
- 71, 3,
- 71, 8,
- 71, 10,
- 71, 62,
- 71, 72,
- 71, 94,
- 76, 70,
- 80, 87,
- 80, 88,
- 80, 89,
- 80, 90,
- 81, 88,
- 83, 13,
- 83, 15,
- 83, 68,
- 83, 69,
- 83, 70,
- 83, 71,
- 83, 76,
- 83, 80,
- 83, 82,
- 83, 85,
- 83, 86,
- 83, 87,
- 83, 88,
- 83, 89,
- 83, 90,
- 83, 91,
- 87, 13,
- 87, 15,
- 87, 66,
- 87, 68,
- 87, 69,
- 87, 70,
- 87, 80,
- 87, 82,
- 88, 13,
- 88, 15,
- 88, 68,
- 88, 69,
- 88, 70,
- 88, 82,
- 89, 68,
- 89, 69,
- 89, 70,
- 89, 80,
- 89, 82,
- 90, 13,
- 90, 15,
- 90, 68,
- 90, 69,
- 90, 70,
- 90, 80,
- 90, 82,
- 91, 68,
- 91, 69,
- 91, 70,
- 91, 80,
- 92, 43
+ 0, 1, 0, 2, 0, 0, 0, 0,
+ 2, 3, 0, 0, 0, 4, 0, 4,
+ 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 7, 8, 9, 10, 11,
+ 0, 12, 12, 13, 14, 15, 12, 12,
+ 9, 16, 17, 18, 0, 19, 13, 20,
+ 21, 22, 23, 24, 25, 0, 0, 0,
+ 0, 0, 26, 27, 28, 0, 29, 30,
+ 0, 31, 0, 0, 32, 0, 31, 31,
+ 33, 27, 0, 34, 0, 35, 0, 36,
+ 37, 38, 36, 39, 40, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
};
-/* Kerning between the respective left and right glyphs
- * 4.4 format which needs to scaled with `kern_scale`*/
-static const int8_t kern_pair_values[] =
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] =
{
- -9, 4, 3, 4, 0, -3, 0, 0,
- 0, 0, -4, 1, -1, -1, -1, 0,
- -2, -2, 1, -1, -2, -2, -2, 0,
- -2, 0, 1, 1, 0, 0, -3, 0,
- 0, 0, -3, 3, 2, 0, -8, 2,
- 0, -2, 1, 2, 0, 0, 0, 1,
- -3, 0, -4, -2, 2, 1, 0, -4,
- 1, 3, -15, -3, -4, 4, -2, -1,
- 0, -2, 1, 2, 1, 0, 0, -4,
- -1, 0, 0, 0, -4, 0, -4, -4,
- -4, -4, -14, -4, -14, -9, -15, 0,
- -2, -3, -2, -1, -2, -1, 0, -6,
- -2, -8, -6, 2, -15, 1, 0, 0,
- 1, 0, 0, 0, -1, -1, -1, -1,
- -1, -1, -1, 1, -1, -4, -2, 0,
- 0, 0, 0, 2, 2, 2, -1, -4,
- -4, -4, -3, -3, -1, -1, -1, -1,
- -2, -2, -4, -1, -3, -1, -4, -3,
- -5, -4, 0, -5, 1, -29, -29, -11,
- -6, -4, -1, -1, -4, -5, -4, -5,
- 0, 0, 0, 0, 0, 0, 0, -1,
- -1, -1, -1, 0, -1, -1, -2, -1,
- -1, -1, -1, -1, 0, -1, -1, -1,
- -1, -1, 0, -1, -1, -1, -5, -6,
- -6, -6, -1, -5, -1, -5, -1, -4,
- -7, -8, 4, -4, -4, -5, -4, -15,
- -5, -17, -10, -17, 0, -3, -8, -10,
- -1, -1, -1, -1, -1, -1, 0, -1,
- -1, 0, -4, -5, -4, -2, -4, -5,
+ 0, 1, 0, 2, 0, 0, 0, 3,
+ 2, 0, 4, 5, 0, 6, 7, 6,
+ 8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 10, 0, 11, 0, 0, 0,
+ 11, 0, 0, 12, 0, 0, 0, 0,
+ 11, 0, 11, 0, 13, 14, 15, 16,
+ 17, 18, 19, 20, 0, 0, 21, 0,
+ 0, 0, 22, 0, 23, 23, 23, 24,
+ 23, 0, 0, 0, 0, 0, 25, 25,
+ 26, 25, 23, 27, 28, 29, 30, 31,
+ 32, 33, 31, 34, 0, 0, 35, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
+};
+
+/*Kern values between classes*/
+static const int8_t kern_class_values[] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -10, 0, 0, 0,
+ 0, 0, 0, 0, -11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -5, -6, 0, -2, -6, 0, -7, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -16, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -21, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -11, 0, 0, 0, 0, 0, 0, -6,
+ 0, -1, 0, 0, -12, -2, -8, -6,
+ 0, -9, 0, 0, 0, 0, 0, 0,
+ -1, 0, 0, -2, -1, -5, -3, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3,
+ 0, -2, 0, 0, -5, 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, 0,
+ 0, 0, -3, 0, 0, 0, 0, 0,
+ 0, -1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -2,
+ 0, 0, 0, 0, 0, -10, 0, 0,
+ 0, -2, 0, 0, 0, -3, 0, -2,
+ 0, -2, -4, -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,
+ 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, -2, -2, 0, -2, 0, 0, 0,
+ -2, -2, -2, 0, 0, 0, 0, 0,
+ 0, 0, 0, -22, 0, 0, 0, -16,
+ 0, -25, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, -3, -2, 0, 0, -2,
+ -2, 0, 0, -2, -2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, -3, 0,
+ 0, 0, 2, -3, 0, 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, 0, 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, 0,
+ 0, -3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -2, 0, -2,
+ -3, 0, 0, 0, -2, -4, -6, 0,
+ 0, 0, 0, -31, 0, 0, 0, 0,
+ 0, 0, 0, 2, -6, 0, 0, -26,
+ -5, -16, -13, 0, -22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -4,
+ -12, -9, 0, 0, 0, 0, 0, 0,
+ 0, 0, -30, 0, 0, 0, -13, 0,
+ -19, 0, 0, 0, 0, 0, -3, 0,
+ -2, 0, -1, -1, 0, 0, -1, 0,
+ 0, 1, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -4, 0, -3,
+ -2, 0, -3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -7, 0, -2, 0, 0, -4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -4, 0,
+ 0, 0, 0, -20, -22, 0, 0, -7,
+ -3, -22, -1, 2, 0, 2, 1, 0,
+ 2, 0, 0, -11, -9, 0, -10, -9,
+ -7, -11, 0, -9, -7, -5, -7, -6,
+ 0, 0, 0, 0, 2, 0, -21, -3,
+ 0, 0, -7, -1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, -4, -4,
+ 0, 0, -4, -3, 0, 0, -3, -1,
+ 0, 0, 0, 2, 0, 0, 0, 1,
+ 0, -12, -6, 0, 0, -4, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0,
+ 1, -3, -3, 0, 0, -3, -2, 0,
+ 0, -2, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, -4, 0, 0,
+ 0, -2, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, -2, 0, 0,
+ -2, 0, 0, 0, -2, -3, 0, 0,
+ 0, 0, 0, 0, -3, 2, -5, -20,
+ -5, 0, 0, -9, -3, -9, -1, 2,
+ -9, 2, 2, 1, 2, 0, 2, -7,
+ -6, -2, -4, -6, -4, -5, -2, -4,
+ -2, 0, -2, -3, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, -2,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -2, 0, 0, -2, 0,
+ 0, 0, -2, -3, -3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -2, 0, 0, -2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -6, 0, 0, 0,
+ 0, 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, 0, -3,
+ 0, 0, 0, 0, 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, -1, -1,
+ 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, 0, 0, -1, 0, 0,
- 0, 0, 0, 0, -1, 1, -1, -31,
- -31, -10, -1, -1, -1, -2, -2, 0,
- -1, -1, -1, -2, 0, -1, 3, 3,
- 3, -6, -1, -5, -4, 2, -7, 0,
- 0, -1, -1, -1, -1, -4, -1, -4,
- -3, -9, 0, -1, -1, -1, 0, 0,
- 0, -1, -1, -1, 0, 0, 0, 0,
- 1, 0, -15, -15, -15, -14, -15, -15,
- -5, -5, -5, -5, -3, 3, 3, 3,
- 2, 3, -15, -15, -1, -13, -15, -13,
- -15, -13, -9, -9, -12, -4, -1, 0,
- -1, -1, -1, -1, -1, -1, 0, -1,
- -2, 4, -17, -7, -16, -6, -6, -14,
- -4, -4, -4, -4, 3, -9, -9, -9,
- -6, -5, -2, 4, 3, -11, -4, -11,
- -4, -4, -10, -3, -3, -3, -3, 3,
- 2, -6, -6, -6, -4, -4, -1, 3,
- -4, -4, -5, -4, -5, -4, -6, 4,
- -18, -10, -18, -8, -8, -16, -5, -5,
- -6, -5, 3, 3, 3, 3, 3, 3,
- -12, -13, -13, -12, -4, -7, -4, 4,
- 3, -4, -5, -5, -5, 0, -4, -1,
- -4, -4, -5, -5, -3, -2, -1, -2,
- -2, 3, 3, 4, 3, -5, 4, -4,
- -3, -2, -4, -3, -1, -12, -12, -4,
- -3, -4, 3, 0, -4, -3, 3, 0,
- 3, 3, 2, 3, 1, -11, -11, -3,
- -3, -3, -3, -3, -3, -9, -8, -2,
- -2, -2, -2, -4, -3, -4, -4, -3,
- -13, -12, -3, -3, -3, -3, -4, -3,
- -3, -3, -3, -4
+ 0, 0, 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, 0,
+ 2, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, -2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, -10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 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, 0, 0, 0, 0, 0, 0,
+ 0, -13, 0, 0, 0, 0, 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,
+ -2, -1, 0, 0, 2, 0, 0, 0,
+ -12, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -4, -2, 1, 0, -2, 0, 0, 5,
+ 0, 2, 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, -2,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, -10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -1, -1,
+ 1, 0, -1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -12, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 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,
+ -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,
+ -1, 0, 0, -1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -2, 0, 0, -2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0
};
-/*Collect the kern pair's data in one place*/
-static const lv_font_fmt_txt_kern_pair_t kern_pairs =
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
- .glyph_ids = kern_pair_glyph_ids,
- .values = kern_pair_values,
- .pair_cnt = 484,
- .glyph_ids_size = 0
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 40,
+ .right_class_cnt = 35,
};
/*--------------------
@@ -1778,12 +1601,12 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
-
- .kern_scale = 16,
- .kern_dsc = &kern_pairs,
- .kern_classes = 0
+ .kern_classes = 1,
+ .bitmap_format = 0
};
@@ -1793,11 +1616,13 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
/*Initialize a public general font descriptor*/
lv_font_t lv_font_roboto_12 = {
- .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 14, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
+ .subpx = LV_FONT_SUBPX_NONE,
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if LV_FONT_ROBOTO_12*/
+
diff --git a/src/lv_font/lv_font_roboto_12_subpx.c b/src/lv_font/lv_font_roboto_12_subpx.c
new file mode 100644
index 000000000..4565b99c1
--- /dev/null
+++ b/src/lv_font/lv_font_roboto_12_subpx.c
@@ -0,0 +1,3419 @@
+#include "../../lvgl.h"
+
+/*******************************************************************************
+ * Size: 12 px
+ * Bpp: 4
+ * Opts: --no-compress --no-prefilter --bpp 4 --size 12 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_12_subpx.c --force-fast-kern-format --lcd
+ ******************************************************************************/
+
+#ifndef LV_FONT_ROBOTO_12_SUBPX
+#define LV_FONT_ROBOTO_12_SUBPX 1
+#endif
+
+#if LV_FONT_ROBOTO_12_SUBPX
+
+/*-----------------
+ * BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
+ /* U+20 " " */
+
+ /* U+21 "!" */
+ 0x0, 0x5a, 0xfc, 0x61, 0x0, 0x5, 0xaf, 0xc6,
+ 0x10, 0x0, 0x5a, 0xfb, 0x61, 0x0, 0x4, 0xaf,
+ 0xb6, 0x10, 0x0, 0x4a, 0xfb, 0x60, 0x0, 0x4,
+ 0x9f, 0xb5, 0x0, 0x0, 0x26, 0x97, 0x30, 0x0,
+ 0x0, 0x23, 0x21, 0x0, 0x0, 0x49, 0xeb, 0x61,
+ 0x0,
+
+ /* U+22 "\"" */
+ 0x3, 0x8d, 0x94, 0x49, 0xc8, 0x30, 0x3, 0x8c,
+ 0x93, 0x49, 0xc7, 0x20, 0x3, 0x8b, 0x82, 0x49,
+ 0xb6, 0x10, 0x0, 0x11, 0x10, 0x1, 0x10, 0x0,
+
+ /* U+23 "#" */
+ 0x0, 0x0, 0x0, 0x1, 0x7c, 0xb6, 0x0, 0x16,
+ 0xbc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xac, 0x72, 0x0, 0x4a, 0xd8, 0x30, 0x0, 0x0,
+ 0x1, 0x6b, 0xee, 0xef, 0xff, 0xee, 0xee, 0xff,
+ 0xfe, 0xed, 0x83, 0x0, 0x0, 0x0, 0x1, 0x6b,
+ 0xc6, 0x10, 0x5, 0xbc, 0x72, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4, 0x9d, 0x93, 0x0, 0x38, 0xd9,
+ 0x40, 0x0, 0x0, 0x0, 0x38, 0xce, 0xee, 0xff,
+ 0xee, 0xee, 0xef, 0xfe, 0xee, 0xb7, 0x20, 0x0,
+ 0x0, 0x0, 0x49, 0xd9, 0x30, 0x3, 0x8d, 0xa4,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c, 0xb6,
+ 0x10, 0x5, 0xbc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0x9d, 0x94, 0x0, 0x38, 0xda, 0x50,
+ 0x0, 0x0, 0x0, 0x0,
+
+ /* U+24 "$" */
+ 0x0, 0x0, 0x0, 0x0, 0x49, 0xd9, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x69, 0xdf,
+ 0xd9, 0x63, 0x10, 0x0, 0x0, 0x0, 0x5, 0xae,
+ 0xec, 0x97, 0x77, 0xad, 0xfd, 0x83, 0x0, 0x0,
+ 0x4, 0xaf, 0xc7, 0x20, 0x0, 0x0, 0x38, 0xde,
+ 0x94, 0x0, 0x0, 0x49, 0xee, 0x93, 0x0, 0x0,
+ 0x0, 0x23, 0x53, 0x10, 0x0, 0x0, 0x26, 0xbe,
+ 0xfd, 0xa8, 0x63, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x13, 0x68, 0xad, 0xef, 0xda, 0x52,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x49, 0xee, 0x94, 0x0, 0x4, 0x9f, 0xd7, 0x20,
+ 0x0, 0x0, 0x0, 0x5b, 0xfb, 0x50, 0x0, 0x4,
+ 0xae, 0xeb, 0x75, 0x44, 0x46, 0xad, 0xfc, 0x72,
+ 0x0, 0x0, 0x0, 0x25, 0x8a, 0xce, 0xfd, 0xb9,
+ 0x74, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xbd, 0x82, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+25 "%" */
+ 0x0, 0x37, 0xbc, 0xcc, 0xcb, 0x84, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xc7,
+ 0x20, 0x1, 0x7c, 0xb6, 0x0, 0x2, 0x7a, 0x83,
+ 0x0, 0x0, 0x0, 0x5, 0xad, 0x83, 0x0, 0x27,
+ 0xcb, 0x50, 0x16, 0xbb, 0x61, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x59, 0xbc, 0xcb, 0xa6, 0x21, 0x5a,
+ 0xb7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x14, 0xac, 0x83, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x49, 0xc9, 0x42, 0x48, 0xab, 0xcc, 0xb8, 0x41,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c, 0xa5, 0x12,
+ 0x7c, 0xb5, 0x0, 0x5, 0xac, 0x83, 0x0, 0x0,
+ 0x0, 0x17, 0xbb, 0x61, 0x0, 0x28, 0xca, 0x50,
+ 0x0, 0x49, 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x15, 0x9c, 0xcc, 0xcc, 0xa6,
+ 0x20, 0x0,
+
+ /* U+26 "&" */
+ 0x0, 0x0, 0x25, 0x9c, 0xee, 0xfe, 0xda, 0x63,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9e, 0xd9,
+ 0x40, 0x1, 0x6b, 0xfb, 0x60, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xaf, 0xd8, 0x20, 0x2, 0x7c, 0xe9,
+ 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xde,
+ 0xcb, 0xcd, 0xc7, 0x31, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x59, 0xde, 0xff, 0xe9, 0x40, 0x0,
+ 0x1, 0x33, 0x20, 0x0, 0x2, 0x7c, 0xfc, 0x72,
+ 0x14, 0x9d, 0xeb, 0x51, 0x27, 0xdd, 0x82, 0x0,
+ 0x5, 0xbf, 0xb6, 0x0, 0x0, 0x2, 0x7c, 0xed,
+ 0xcd, 0xe9, 0x40, 0x0, 0x2, 0x7d, 0xea, 0x51,
+ 0x0, 0x0, 0x15, 0xaf, 0xff, 0xb5, 0x10, 0x0,
+ 0x0, 0x2, 0x59, 0xbd, 0xdd, 0xde, 0xdc, 0xa8,
+ 0x7a, 0xde, 0xb5, 0x10,
+
+ /* U+27 "'" */
+ 0x16, 0xbc, 0x72, 0x16, 0xbc, 0x71, 0x16, 0xbb,
+ 0x60, 0x0, 0x0, 0x0,
+
+ /* U+28 "(" */
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x5a, 0xda, 0x51, 0x0, 0x0,
+ 0x0, 0x15, 0xbd, 0xa4, 0x0, 0x0, 0x0, 0x0,
+ 0x38, 0xdd, 0x72, 0x0, 0x0, 0x0, 0x0, 0x28,
+ 0xdd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x16, 0xbf,
+ 0xa5, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xe8,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x38, 0xde, 0x83,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xfa, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xaf, 0xb6, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x16, 0xbf, 0xa5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0xae, 0xa5, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x6c, 0xd9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x99, 0x61,
+ 0x0,
+
+ /* U+29 ")" */
+ 0x0, 0x1, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x38, 0xcb, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x8d, 0xc7, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x6b, 0xe9, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x7c, 0xe9, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0x9e, 0xd7, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x28, 0xdf, 0x94, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x7c, 0xfa, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x38, 0xde, 0x83, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xaf, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x3, 0x9e,
+ 0xd7, 0x20, 0x0, 0x0, 0x0, 0x4, 0x9d, 0xc6,
+ 0x10, 0x0, 0x0, 0x0, 0x27, 0xcc, 0x83, 0x0,
+ 0x0, 0x0, 0x0, 0x58, 0xa5, 0x20, 0x0, 0x0,
+ 0x0,
+
+ /* U+2A "*" */
+ 0x0, 0x0, 0x0, 0x0, 0x28, 0xdb, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x24, 0x53, 0x12, 0x7c,
+ 0xa5, 0x2, 0x44, 0x30, 0x0, 0x0, 0x3, 0x7a,
+ 0xcd, 0xef, 0xff, 0xee, 0xdc, 0x95, 0x20, 0x0,
+ 0x0, 0x0, 0x2, 0x6b, 0xde, 0xdc, 0x83, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x15, 0xbd, 0xa4, 0x13,
+ 0x8d, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x11, 0x0, 0x0, 0x12, 0x10, 0x0, 0x0,
+
+ /* U+2B "+" */
+ 0x0, 0x0, 0x0, 0x1, 0x59, 0xb7, 0x30, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27, 0xde,
+ 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x7d, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x3,
+ 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf9, 0x40, 0x1, 0x12, 0x22, 0x24, 0x8d, 0xea,
+ 0x52, 0x22, 0x22, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x27, 0xde, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x7d, 0xe9, 0x40, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+2C "," */
+ 0x0, 0x0, 0x49, 0xec, 0x72, 0x0, 0x0, 0x0,
+ 0x5a, 0xfb, 0x60, 0x0, 0x0, 0x5, 0xad, 0xa5,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+2D "-" */
+ 0x0, 0x16, 0xbf, 0xff, 0xff, 0xfb, 0x61, 0x0,
+
+ /* U+2E "." */
+ 0x0, 0x13, 0x43, 0x10, 0x0, 0x15, 0xbe, 0xb6,
+ 0x10,
+
+ /* U+2F "/" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0xdb,
+ 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d,
+ 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38,
+ 0xdb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x9d, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x49, 0xda, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x9d, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5a, 0xd9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xad, 0x93, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5a, 0xd9, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x16, 0xbd, 0x83, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+30 "0" */
+ 0x0, 0x1, 0x37, 0xbd, 0xee, 0xfe, 0xdb, 0x84,
+ 0x10, 0x0, 0x0, 0x4, 0x9e, 0xea, 0x51, 0x0,
+ 0x14, 0x9d, 0xfa, 0x50, 0x0, 0x3, 0x8e, 0xd8,
+ 0x30, 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40, 0x0,
+ 0x5a, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x6, 0xbf,
+ 0xb6, 0x0, 0x5, 0xaf, 0xc7, 0x10, 0x0, 0x0,
+ 0x0, 0x5b, 0xfb, 0x61, 0x0, 0x4a, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x6, 0xbf, 0xb5, 0x0, 0x3,
+ 0x8e, 0xe8, 0x30, 0x0, 0x0, 0x2, 0x7d, 0xf9,
+ 0x40, 0x0, 0x4, 0x9e, 0xea, 0x52, 0x0, 0x14,
+ 0x9d, 0xfa, 0x50, 0x0, 0x0, 0x1, 0x37, 0xad,
+ 0xef, 0xfe, 0xdb, 0x84, 0x10, 0x0, 0x0,
+
+ /* U+31 "1" */
+ 0x0, 0x0, 0x1, 0x35, 0x7a, 0xcd, 0x84, 0x0,
+ 0x4, 0x9e, 0xec, 0xaa, 0xce, 0xf9, 0x40, 0x0,
+ 0x1, 0x10, 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x27, 0xdf, 0x94, 0x0,
+
+ /* U+32 "2" */
+ 0x0, 0x2, 0x59, 0xbd, 0xef, 0xfe, 0xdb, 0x95,
+ 0x20, 0x0, 0x0, 0x27, 0xde, 0xb7, 0x31, 0x0,
+ 0x14, 0x9d, 0xfb, 0x61, 0x0, 0x4, 0x8b, 0x84,
+ 0x0, 0x0, 0x0, 0x3, 0x8e, 0xd8, 0x30, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xe9,
+ 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
+ 0xce, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x15, 0xad, 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x8c, 0xeb, 0x62, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x6b, 0xdc, 0x83, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0x94, 0x0,
+
+ /* U+33 "3" */
+ 0x0, 0x2, 0x59, 0xcd, 0xef, 0xfe, 0xdb, 0x84,
+ 0x10, 0x0, 0x0, 0x27, 0xce, 0xb7, 0x20, 0x0,
+ 0x14, 0x9d, 0xe9, 0x40, 0x0, 0x2, 0x47, 0x53,
+ 0x0, 0x0, 0x0, 0x4, 0x9f, 0xc7, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xad, 0xd8,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x6b, 0xff, 0xff,
+ 0xfd, 0x94, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x24, 0x9d, 0xea, 0x51, 0x0, 0x2,
+ 0x46, 0x42, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xe9,
+ 0x30, 0x0, 0x38, 0xee, 0xa5, 0x20, 0x0, 0x13,
+ 0x8c, 0xeb, 0x61, 0x0, 0x0, 0x3, 0x6a, 0xce,
+ 0xef, 0xfe, 0xdb, 0x84, 0x10, 0x0, 0x0,
+
+ /* U+34 "4" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d,
+ 0xff, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x7c, 0xef, 0xff, 0x94, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xda, 0x78,
+ 0xcf, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x5a, 0xdb, 0x61, 0x27, 0xcf, 0x94, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x49, 0xdc, 0x72, 0x0, 0x27,
+ 0xcf, 0x94, 0x0, 0x0, 0x0, 0x0, 0x38, 0xdd,
+ 0x83, 0x0, 0x0, 0x27, 0xcf, 0x94, 0x0, 0x0,
+ 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x27, 0xcf, 0x94, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
+ 0xcf, 0x94, 0x0, 0x0,
+
+ /* U+35 "5" */
+ 0x0, 0x1, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfb, 0x50, 0x0, 0x0, 0x28, 0xdd, 0x83, 0x11,
+ 0x11, 0x11, 0x11, 0x0, 0x0, 0x0, 0x4, 0x9e,
+ 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6b, 0xfd, 0xcc, 0xde, 0xed, 0xca, 0x63,
+ 0x0, 0x0, 0x0, 0x3, 0x69, 0x86, 0x32, 0x23,
+ 0x58, 0xcf, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0x9e, 0xd8, 0x20, 0x0,
+ 0x25, 0x74, 0x20, 0x0, 0x0, 0x0, 0x38, 0xdd,
+ 0x83, 0x0, 0x2, 0x7d, 0xea, 0x62, 0x0, 0x2,
+ 0x5a, 0xee, 0x94, 0x0, 0x0, 0x0, 0x26, 0xac,
+ 0xee, 0xfe, 0xec, 0xa7, 0x31, 0x0, 0x0,
+
+ /* U+36 "6" */
+ 0x0, 0x0, 0x0, 0x24, 0x7a, 0xcd, 0xee, 0x94,
+ 0x0, 0x0, 0x0, 0x0, 0x14, 0x9e, 0xeb, 0x85,
+ 0x32, 0x10, 0x0, 0x0, 0x0, 0x0, 0x27, 0xde,
+ 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x16, 0xcf, 0xca, 0x9c, 0xde, 0xee, 0xca, 0x62,
+ 0x0, 0x0, 0x3, 0x8d, 0xfe, 0xa6, 0x31, 0x1,
+ 0x37, 0xcf, 0xd8, 0x20, 0x0, 0x38, 0xee, 0x83,
+ 0x0, 0x0, 0x0, 0x4, 0xaf, 0xc6, 0x10, 0x1,
+ 0x6c, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x4a, 0xfb,
+ 0x61, 0x0, 0x1, 0x6b, 0xfc, 0x83, 0x10, 0x2,
+ 0x7b, 0xec, 0x72, 0x0, 0x0, 0x0, 0x14, 0x8c,
+ 0xef, 0xfe, 0xdc, 0x95, 0x20, 0x0, 0x0,
+
+ /* U+37 "7" */
+ 0x38, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x28, 0xdd, 0x83, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x49, 0xec, 0x71, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xea, 0x50,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c,
+ 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x9e, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x15, 0xbe, 0xb6, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x27, 0xce, 0xa5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0xee,
+ 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+38 "8" */
+ 0x0, 0x1, 0x37, 0xbd, 0xef, 0xfe, 0xdb, 0x84,
+ 0x10, 0x0, 0x0, 0x3, 0x9e, 0xea, 0x51, 0x0,
+ 0x14, 0x9d, 0xfa, 0x50, 0x0, 0x1, 0x6c, 0xfa,
+ 0x40, 0x0, 0x0, 0x3, 0x9e, 0xd8, 0x20, 0x0,
+ 0x3, 0x8d, 0xda, 0x52, 0x0, 0x14, 0x9d, 0xe9,
+ 0x40, 0x0, 0x0, 0x0, 0x49, 0xdf, 0xff, 0xff,
+ 0xfe, 0xa4, 0x10, 0x0, 0x0, 0x15, 0xbe, 0xc8,
+ 0x41, 0x0, 0x13, 0x7c, 0xeb, 0x61, 0x0, 0x4,
+ 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x6b, 0xfb,
+ 0x50, 0x0, 0x27, 0xcf, 0xc7, 0x30, 0x0, 0x2,
+ 0x6b, 0xed, 0x83, 0x0, 0x0, 0x2, 0x59, 0xbd,
+ 0xef, 0xfe, 0xdc, 0xa6, 0x30, 0x0, 0x0,
+
+ /* U+39 "9" */
+ 0x0, 0x1, 0x48, 0xbd, 0xef, 0xfe, 0xc9, 0x52,
+ 0x0, 0x0, 0x0, 0x16, 0xbf, 0xc8, 0x31, 0x1,
+ 0x37, 0xce, 0xc7, 0x20, 0x0, 0x5, 0xaf, 0xb6,
+ 0x0, 0x0, 0x0, 0x4, 0x9e, 0xd7, 0x20, 0x0,
+ 0x5a, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x27, 0xde,
+ 0x94, 0x0, 0x1, 0x6c, 0xfc, 0x83, 0x10, 0x2,
+ 0x5a, 0xdf, 0xe9, 0x40, 0x0, 0x0, 0x25, 0x9c,
+ 0xde, 0xfe, 0xc9, 0x8a, 0xed, 0x82, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x27, 0xce, 0x94,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x36, 0x9d,
+ 0xec, 0x62, 0x0, 0x0, 0x0, 0x0, 0x38, 0xde,
+ 0xed, 0xb9, 0x63, 0x10, 0x0, 0x0, 0x0,
+
+ /* U+3A ":" */
+ 0x1, 0x6b, 0xea, 0x50, 0x0, 0x1, 0x34, 0x31,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x34, 0x31, 0x0, 0x1, 0x6b, 0xea, 0x50, 0x0,
+
+ /* U+3B ";" */
+ 0x0, 0x0, 0x38, 0xdd, 0x83, 0x0, 0x0, 0x0,
+ 0x2, 0x44, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x15, 0x88, 0x51, 0x0, 0x0, 0x0, 0x38, 0xed,
+ 0x82, 0x0, 0x0, 0x2, 0x7c, 0xe9, 0x40, 0x0,
+ 0x0, 0x2, 0x56, 0x41, 0x0, 0x0,
+
+ /* U+3C "<" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x79, 0xa7,
+ 0x30, 0x0, 0x0, 0x24, 0x79, 0xce, 0xfd, 0xb9,
+ 0x63, 0x10, 0x26, 0xbe, 0xec, 0xa7, 0x52, 0x10,
+ 0x0, 0x0, 0x0, 0x14, 0x8b, 0xde, 0xda, 0x86,
+ 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x36,
+ 0x9b, 0xef, 0xec, 0x95, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x36, 0x75, 0x20,
+
+ /* U+3D "=" */
+ 0x1, 0x6b, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
+ 0xb6, 0x10, 0x0, 0x0, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x16, 0xbe, 0xee, 0xee, 0xee, 0xee, 0xee, 0xeb,
+ 0x61, 0x0, 0x0, 0x1, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x10, 0x0, 0x0,
+
+ /* U+3E ">" */
+ 0x3, 0x7a, 0xa7, 0x52, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x58, 0xad, 0xee, 0xda,
+ 0x85, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x13, 0x68, 0xbd, 0xed, 0x95, 0x10, 0x0,
+ 0x0, 0x0, 0x1, 0x35, 0x7a, 0xce, 0xec, 0xa6,
+ 0x30, 0x0, 0x1, 0x59, 0xce, 0xfe, 0xc9, 0x74,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x25, 0x76, 0x31,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+3F "?" */
+ 0x0, 0x25, 0x9c, 0xef, 0xff, 0xec, 0xa6, 0x20,
+ 0x0, 0x16, 0xbf, 0xc8, 0x31, 0x1, 0x38, 0xdf,
+ 0xb5, 0x0, 0x1, 0x22, 0x10, 0x0, 0x0, 0x4,
+ 0x9e, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x5a, 0xed, 0x82, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0x9d, 0xeb, 0x62, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x7c, 0xfb, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x35, 0x53, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x13, 0x31, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x7c, 0xd8, 0x30, 0x0, 0x0,
+ 0x0,
+
+ /* U+40 "@" */
+ 0x0, 0x0, 0x0, 0x0, 0x13, 0x69, 0xbc, 0xdd,
+ 0xdd, 0xdd, 0xdb, 0xa7, 0x41, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x15, 0xac, 0xc8, 0x52, 0x10,
+ 0x0, 0x0, 0x0, 0x24, 0x7b, 0xca, 0x51, 0x0,
+ 0x0, 0x0, 0x1, 0x5b, 0xc9, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c, 0x94,
+ 0x0, 0x0, 0x2, 0x7c, 0xb6, 0x10, 0x0, 0x2,
+ 0x59, 0xbc, 0xdc, 0xba, 0x62, 0x0, 0x2, 0x7b,
+ 0x94, 0x0, 0x1, 0x6c, 0xc7, 0x10, 0x0, 0x27,
+ 0xcc, 0x83, 0x0, 0x28, 0xdb, 0x60, 0x0, 0x4,
+ 0xab, 0x71, 0x0, 0x49, 0xe9, 0x40, 0x0, 0x39,
+ 0xea, 0x50, 0x0, 0x4, 0x9d, 0x94, 0x0, 0x0,
+ 0x49, 0xc7, 0x20, 0x5, 0xad, 0x83, 0x0, 0x16,
+ 0xcd, 0x82, 0x0, 0x0, 0x5a, 0xd8, 0x20, 0x0,
+ 0x5, 0xbb, 0x61, 0x0, 0x49, 0xd9, 0x40, 0x0,
+ 0x6b, 0xe9, 0x30, 0x0, 0x4a, 0xed, 0x82, 0x0,
+ 0x16, 0xbb, 0x71, 0x0, 0x1, 0x6c, 0xc7, 0x10,
+ 0x1, 0x48, 0xcd, 0xcb, 0xa7, 0x45, 0x9c, 0xdc,
+ 0xcc, 0xa6, 0x20, 0x0, 0x0, 0x1, 0x6b, 0xd8,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26,
+ 0xcd, 0xb6, 0x31, 0x0, 0x0, 0x0, 0x1, 0x22,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x25, 0x8a, 0xcc, 0xdc, 0xcc, 0xcd, 0xcb,
+ 0x63, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+41 "A" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c, 0xfe,
+ 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x7c, 0xee, 0xee, 0x94, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x7c, 0xe9, 0x67, 0xcf, 0xa4, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x40,
+ 0x17, 0xcf, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x8d, 0xea, 0x40, 0x0, 0x17, 0xcf,
+ 0xb5, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, 0x9e,
+ 0xea, 0x40, 0x0, 0x0, 0x17, 0xcf, 0xb6, 0x10,
+ 0x0, 0x0, 0x0, 0x4, 0x9e, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xc6, 0x10, 0x0, 0x0,
+ 0x4, 0x9e, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x16, 0xcf, 0xc7, 0x20, 0x0, 0x5, 0xaf, 0xd8,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xbf,
+ 0xd7, 0x20,
+
+ /* U+42 "B" */
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdb,
+ 0x85, 0x20, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x2, 0x49, 0xdf, 0xa5, 0x10, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x4,
+ 0x9e, 0xd8, 0x30, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x2, 0x5a, 0xee, 0x94, 0x0, 0x0,
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xb6, 0x20, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x1, 0x26, 0xbe, 0xd8, 0x30, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x5b, 0xfc, 0x61, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x1, 0x37, 0xbe, 0xe9, 0x30, 0x0,
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xec,
+ 0xa6, 0x30, 0x0, 0x0,
+
+ /* U+43 "C" */
+ 0x0, 0x0, 0x1, 0x48, 0xbd, 0xef, 0xfe, 0xec,
+ 0xa8, 0x41, 0x0, 0x0, 0x0, 0x4, 0x9e, 0xeb,
+ 0x74, 0x21, 0x1, 0x24, 0x9c, 0xfc, 0x72, 0x0,
+ 0x1, 0x6b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x9e, 0xc7, 0x20, 0x3, 0x8e, 0xe8, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x9f, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x8e, 0xe8, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x6b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x9e, 0xc7, 0x20, 0x0, 0x4, 0x9e, 0xeb,
+ 0x74, 0x21, 0x1, 0x24, 0x8c, 0xfc, 0x72, 0x0,
+ 0x0, 0x0, 0x2, 0x59, 0xbd, 0xff, 0xfe, 0xdc,
+ 0xa7, 0x41, 0x0, 0x0,
+
+ /* U+44 "D" */
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xed, 0xb8,
+ 0x41, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x1, 0x24, 0x7b, 0xee, 0xa4, 0x10, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x4a, 0xed, 0x82, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xbf, 0xc6, 0x10,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xbf, 0xc6, 0x10,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x5a, 0xed, 0x82, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x1, 0x24, 0x7b, 0xee, 0xa4, 0x10, 0x0,
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xed, 0xa7,
+ 0x41, 0x0, 0x0, 0x0,
+
+ /* U+45 "E" */
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xb5, 0x0, 0x5, 0xbf, 0xc7, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc,
+ 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5, 0xbf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xd7, 0x20, 0x0, 0x5, 0xbf, 0xc7,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5, 0xbf, 0xc7, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x10,
+
+ /* U+46 "F" */
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x94, 0x0, 0x5, 0xbf, 0xc7, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc,
+ 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5, 0xbf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5, 0xbf, 0xc7,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5, 0xbf, 0xc7, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+47 "G" */
+ 0x0, 0x0, 0x2, 0x58, 0xbd, 0xef, 0xff, 0xed,
+ 0xb9, 0x62, 0x0, 0x0, 0x0, 0x4, 0x9e, 0xeb,
+ 0x74, 0x21, 0x0, 0x13, 0x7b, 0xee, 0x94, 0x0,
+ 0x1, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x46, 0x63, 0x10, 0x3, 0x8d, 0xe9, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x9f, 0xd8, 0x20, 0x0, 0x2, 0x7c, 0xff,
+ 0xff, 0xff, 0xfa, 0x40, 0x3, 0x8e, 0xe9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xfa, 0x40,
+ 0x0, 0x5a, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x8d, 0xfa, 0x40, 0x0, 0x3, 0x8d, 0xfd,
+ 0x95, 0x21, 0x0, 0x1, 0x47, 0xcf, 0xe9, 0x30,
+ 0x0, 0x0, 0x1, 0x37, 0xac, 0xef, 0xff, 0xfe,
+ 0xdb, 0x96, 0x30, 0x0,
+
+ /* U+48 "H" */
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0x83, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0xee, 0x83,
+
+ /* U+49 "I" */
+ 0x0, 0x49, 0xee, 0x83, 0x0, 0x4, 0x9e, 0xe8,
+ 0x30, 0x0, 0x49, 0xee, 0x83, 0x0, 0x4, 0x9e,
+ 0xe8, 0x30, 0x0, 0x49, 0xee, 0x83, 0x0, 0x4,
+ 0x9e, 0xe8, 0x30, 0x0, 0x49, 0xee, 0x83, 0x0,
+ 0x4, 0x9e, 0xe8, 0x30, 0x0, 0x49, 0xee, 0x83,
+ 0x0,
+
+ /* U+4A "J" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x7c, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x7c, 0xfb, 0x60, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x7c, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x7c, 0xfb, 0x60, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x7c, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x7c, 0xfb, 0x60, 0x0,
+ 0x0, 0x3, 0x69, 0x74, 0x10, 0x0, 0x0, 0x2,
+ 0x7d, 0xfa, 0x50, 0x0, 0x0, 0x2, 0x7c, 0xfc,
+ 0x83, 0x10, 0x2, 0x49, 0xdf, 0xb6, 0x10, 0x0,
+ 0x0, 0x0, 0x2, 0x69, 0xcd, 0xef, 0xfe, 0xdb,
+ 0x95, 0x20, 0x0, 0x0,
+
+ /* U+4B "K" */
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x3,
+ 0x8c, 0xec, 0x83, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x25, 0xbe, 0xea, 0x51, 0x0, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x38, 0xde, 0xc7,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x74,
+ 0x6b, 0xee, 0xa4, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5b, 0xfe, 0xee, 0xff, 0xfe, 0x94, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xff, 0xc8,
+ 0x32, 0x5a, 0xee, 0xa5, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x49, 0xee,
+ 0xb6, 0x10, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x39, 0xdf, 0xc7, 0x20, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x38, 0xdf, 0xc7, 0x30,
+
+ /* U+4C "L" */
+ 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5, 0xbf, 0xc7, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc,
+ 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5, 0xbf, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xbf, 0xc7,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5, 0xbf, 0xc7, 0x20, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0,
+
+ /* U+4D "M" */
+ 0x0, 0x5b, 0xff, 0xea, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfd, 0x72, 0x0,
+ 0x5b, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x8d, 0xff, 0xfd, 0x72, 0x0, 0x5b,
+ 0xfc, 0xbb, 0xfb, 0x61, 0x0, 0x0, 0x0, 0x0,
+ 0x49, 0xed, 0xbb, 0xed, 0x72, 0x0, 0x5b, 0xfb,
+ 0x65, 0xae, 0xc7, 0x10, 0x0, 0x0, 0x4, 0xae,
+ 0xc7, 0x59, 0xed, 0x72, 0x0, 0x5b, 0xfc, 0x61,
+ 0x49, 0xed, 0x72, 0x0, 0x0, 0x5b, 0xfb, 0x61,
+ 0x49, 0xfd, 0x72, 0x0, 0x5b, 0xfc, 0x61, 0x3,
+ 0x8d, 0xd8, 0x30, 0x16, 0xbe, 0xa5, 0x0, 0x4a,
+ 0xfd, 0x72, 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x27,
+ 0xde, 0x95, 0x7c, 0xe9, 0x40, 0x0, 0x5a, 0xfd,
+ 0x72, 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x1, 0x7c,
+ 0xff, 0xfe, 0x83, 0x0, 0x0, 0x5a, 0xfd, 0x72,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x16, 0xbf,
+ 0xd8, 0x20, 0x0, 0x0, 0x5a, 0xfd, 0x72,
+
+ /* U+4E "N" */
+ 0x0, 0x5b, 0xff, 0xc6, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xff, 0xff,
+ 0xb6, 0x10, 0x0, 0x0, 0x0, 0x49, 0xee, 0x83,
+ 0x0, 0x5b, 0xfd, 0xbb, 0xee, 0xa5, 0x10, 0x0,
+ 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x73,
+ 0x5a, 0xee, 0x94, 0x0, 0x0, 0x49, 0xee, 0x83,
+ 0x0, 0x5b, 0xfc, 0x72, 0x1, 0x5b, 0xed, 0x93,
+ 0x0, 0x49, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x72,
+ 0x0, 0x1, 0x6b, 0xfd, 0x83, 0x49, 0xee, 0x83,
+ 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x2, 0x7c,
+ 0xfc, 0xbb, 0xee, 0x83, 0x0, 0x5b, 0xfc, 0x72,
+ 0x0, 0x0, 0x0, 0x3, 0x8d, 0xff, 0xfe, 0x83,
+ 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x8d, 0xfe, 0x83,
+
+ /* U+4F "O" */
+ 0x0, 0x0, 0x2, 0x58, 0xbd, 0xef, 0xff, 0xed,
+ 0xa8, 0x41, 0x0, 0x0, 0x0, 0x3, 0x8d, 0xec,
+ 0x85, 0x31, 0x12, 0x35, 0x9d, 0xfc, 0x72, 0x0,
+ 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x8d, 0xe9, 0x40, 0x3, 0x8e, 0xe9, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xfc, 0x71,
+ 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x39, 0xed, 0x83, 0x3, 0x8e, 0xe9, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xfc, 0x71,
+ 0x0, 0x5b, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x8d, 0xe9, 0x40, 0x0, 0x3, 0x8d, 0xec,
+ 0x84, 0x21, 0x11, 0x35, 0x9c, 0xfc, 0x72, 0x0,
+ 0x0, 0x0, 0x1, 0x48, 0xbd, 0xef, 0xff, 0xed,
+ 0xa7, 0x31, 0x0, 0x0,
+
+ /* U+50 "P" */
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed,
+ 0xb9, 0x52, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x24, 0x8c, 0xfd, 0x83, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x6, 0xbf, 0xb6, 0x10, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x13, 0x7b, 0xee, 0x83, 0x0,
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed,
+ 0xca, 0x63, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
+
+ /* U+51 "Q" */
+ 0x0, 0x0, 0x2, 0x59, 0xbd, 0xef, 0xff, 0xec,
+ 0xa7, 0x41, 0x0, 0x0, 0x0, 0x4, 0x9e, 0xec,
+ 0x84, 0x21, 0x12, 0x36, 0xad, 0xfc, 0x61, 0x0,
+ 0x1, 0x6b, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x9e, 0xe8, 0x30, 0x4, 0x9e, 0xd8, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b, 0xfb, 0x61,
+ 0x5, 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4a, 0xfd, 0x72, 0x4, 0x9e, 0xd8, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b, 0xfc, 0x71,
+ 0x1, 0x6b, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x9e, 0xe9, 0x30, 0x0, 0x4, 0x9e, 0xeb,
+ 0x74, 0x21, 0x11, 0x36, 0x9d, 0xec, 0x72, 0x0,
+ 0x0, 0x0, 0x2, 0x58, 0xbd, 0xef, 0xff, 0xff,
+ 0xfe, 0xa5, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x5a, 0xdf, 0xd8, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x12, 0x32, 0x0,
+
+ /* U+52 "R" */
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdc,
+ 0x96, 0x30, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x1, 0x37, 0xbe, 0xe8, 0x30, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x6b, 0xfc, 0x61, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x1, 0x37, 0xce, 0xd8, 0x30, 0x0,
+ 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x95, 0x20, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x5a, 0xed, 0x83, 0x0, 0x0, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x2, 0x8d,
+ 0xea, 0x50, 0x0, 0x0, 0x0, 0x5b, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x16, 0xbf, 0xc7, 0x20, 0x0,
+ 0x0, 0x5b, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x49, 0xee, 0x94, 0x0,
+
+ /* U+53 "S" */
+ 0x0, 0x1, 0x37, 0xac, 0xde, 0xff, 0xed, 0xb9,
+ 0x63, 0x0, 0x0, 0x15, 0xbf, 0xd9, 0x52, 0x10,
+ 0x1, 0x36, 0xae, 0xea, 0x41, 0x3, 0x8e, 0xe9,
+ 0x40, 0x0, 0x0, 0x0, 0x2, 0x59, 0x96, 0x20,
+ 0x3, 0x8d, 0xfd, 0x96, 0x32, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x13, 0x68, 0xbd, 0xef,
+ 0xec, 0xa7, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x12, 0x58, 0xbe, 0xea, 0x41, 0x15,
+ 0x8a, 0x73, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d,
+ 0xf9, 0x40, 0x38, 0xdf, 0xc8, 0x42, 0x10, 0x0,
+ 0x24, 0x8c, 0xfc, 0x72, 0x0, 0x2, 0x48, 0xac,
+ 0xef, 0xff, 0xfe, 0xdb, 0x85, 0x20, 0x0,
+
+ /* U+54 "T" */
+ 0x0, 0x6, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe9, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4a, 0xfd, 0x72, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0xfd,
+ 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0xaf, 0xd7, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4a, 0xfd, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xaf,
+ 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4a, 0xfd, 0x72, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+55 "U" */
+ 0x2, 0x8d, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x27, 0xdf, 0xa5, 0x0, 0x2, 0x8d, 0xf9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf, 0xa5, 0x0,
+ 0x2, 0x8d, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x27, 0xdf, 0xa5, 0x0, 0x2, 0x8d, 0xf9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf, 0xa5, 0x0,
+ 0x2, 0x8d, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x27, 0xdf, 0xa5, 0x0, 0x2, 0x8d, 0xf9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf, 0xa5, 0x0,
+ 0x1, 0x6c, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0,
+ 0x38, 0xee, 0x93, 0x0, 0x0, 0x27, 0xcf, 0xc8,
+ 0x42, 0x0, 0x1, 0x37, 0xbe, 0xe9, 0x40, 0x0,
+ 0x0, 0x0, 0x24, 0x8b, 0xce, 0xff, 0xfe, 0xdb,
+ 0x95, 0x20, 0x0, 0x0,
+
+ /* U+56 "V" */
+ 0x0, 0x5, 0xaf, 0xd8, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x39, 0xef, 0xa4, 0x0, 0x0, 0x4,
+ 0xaf, 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x38,
+ 0xee, 0xa4, 0x0, 0x0, 0x0, 0x4, 0xae, 0xd8,
+ 0x20, 0x0, 0x0, 0x0, 0x38, 0xee, 0x94, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0x9e, 0xd8, 0x20, 0x0,
+ 0x0, 0x38, 0xde, 0x94, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0x9e, 0xd7, 0x20, 0x0, 0x38, 0xde,
+ 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x9e, 0xc7, 0x20, 0x28, 0xdd, 0x83, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d, 0xc7,
+ 0x48, 0xdd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0x8d, 0xee, 0xed, 0x82,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x8d, 0xfd, 0x72, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+57 "W" */
+ 0x38, 0xde, 0x94, 0x0, 0x0, 0x0, 0x3, 0x8e,
+ 0xfa, 0x50, 0x0, 0x0, 0x0, 0x28, 0xdf, 0x94,
+ 0x0, 0x4a, 0xfc, 0x72, 0x0, 0x0, 0x2, 0x7c,
+ 0xff, 0xe9, 0x40, 0x0, 0x0, 0x16, 0xbf, 0xb5,
+ 0x0, 0x1, 0x6b, 0xfb, 0x50, 0x0, 0x1, 0x6c,
+ 0xea, 0xac, 0xd8, 0x30, 0x0, 0x4, 0x9f, 0xd7,
+ 0x20, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x5b,
+ 0xea, 0x43, 0x8d, 0xc7, 0x10, 0x2, 0x7d, 0xe9,
+ 0x40, 0x0, 0x0, 0x4, 0x9e, 0xc7, 0x20, 0x49,
+ 0xeb, 0x50, 0x3, 0x9e, 0xb6, 0x0, 0x6b, 0xfa,
+ 0x50, 0x0, 0x0, 0x0, 0x6, 0xbf, 0xa5, 0x48,
+ 0xeb, 0x61, 0x0, 0x5, 0xae, 0xa5, 0x49, 0xec,
+ 0x72, 0x0, 0x0, 0x0, 0x0, 0x27, 0xde, 0xbb,
+ 0xdd, 0x72, 0x0, 0x0, 0x16, 0xbd, 0xaa, 0xce,
+ 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xef,
+ 0xfd, 0x83, 0x0, 0x0, 0x0, 0x16, 0xcf, 0xff,
+ 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b,
+ 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0, 0x28, 0xdf,
+ 0xc7, 0x10, 0x0, 0x0, 0x0,
+
+ /* U+58 "X" */
+ 0x4, 0x9e, 0xea, 0x51, 0x0, 0x0, 0x0, 0x2,
+ 0x7c, 0xfd, 0x82, 0x0, 0x0, 0x15, 0xbe, 0xe9,
+ 0x40, 0x0, 0x1, 0x6b, 0xfd, 0x93, 0x0, 0x0,
+ 0x0, 0x0, 0x26, 0xcf, 0xd7, 0x21, 0x49, 0xee,
+ 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
+ 0xcf, 0xdd, 0xde, 0xb5, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x6b, 0xff, 0xe9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38,
+ 0xdf, 0xdd, 0xef, 0xb6, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x27, 0xcf, 0xd7, 0x21, 0x49, 0xee,
+ 0xa5, 0x10, 0x0, 0x0, 0x0, 0x26, 0xcf, 0xd9,
+ 0x30, 0x0, 0x1, 0x5b, 0xee, 0x94, 0x0, 0x0,
+ 0x15, 0xbf, 0xea, 0x40, 0x0, 0x0, 0x0, 0x2,
+ 0x6c, 0xfd, 0x93, 0x0,
+
+ /* U+59 "Y" */
+ 0x0, 0x5, 0xae, 0xe9, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x16, 0xcf, 0xd8, 0x20, 0x0, 0x0, 0x2,
+ 0x7c, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x39, 0xee,
+ 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xee,
+ 0x93, 0x0, 0x1, 0x6b, 0xfc, 0x72, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x16, 0xce, 0xb6, 0x13,
+ 0x8d, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3, 0x9d, 0xdc, 0xce, 0xb6, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x6b, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xaf,
+ 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4a, 0xfd, 0x72, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+5A "Z" */
+ 0x16, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x7c, 0xfc, 0x72, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xfc,
+ 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x7c, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x7c, 0xfc, 0x72, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c,
+ 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x7c, 0xfc, 0x72, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xfc, 0x72,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x27, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfb, 0x60, 0x0,
+
+ /* U+5B "[" */
+ 0x2, 0x7c, 0xff, 0xff, 0xb6, 0x0, 0x2, 0x7d,
+ 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40,
+ 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0,
+ 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d,
+ 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40,
+ 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0,
+ 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d,
+ 0xfa, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40,
+ 0x0, 0x0, 0x2, 0x7d, 0xfa, 0x40, 0x0, 0x0,
+ 0x2, 0x7c, 0xff, 0xff, 0xb6, 0x0,
+
+ /* U+5C "\\" */
+ 0x0, 0x4, 0x9e, 0xc7, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x8e, 0xc7, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x8d, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3, 0x8d, 0xd8, 0x20, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xd8,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x7c, 0xe8, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x7c, 0xe9, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c,
+ 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x6b, 0xe9, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xea, 0x50,
+ 0x0,
+
+ /* U+5D "]" */
+ 0x0, 0x49, 0xef, 0xff, 0xe9, 0x40, 0x0, 0x0,
+ 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d,
+ 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40,
+ 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0,
+ 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d,
+ 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40,
+ 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0,
+ 0x2, 0x7d, 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d,
+ 0xf9, 0x40, 0x0, 0x0, 0x2, 0x7d, 0xf9, 0x40,
+ 0x0, 0x49, 0xef, 0xff, 0xe9, 0x40,
+
+ /* U+5E "^" */
+ 0x0, 0x0, 0x2, 0x57, 0x52, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0x9e, 0xfe, 0x94, 0x0, 0x0, 0x0,
+ 0x5, 0xae, 0xa9, 0xae, 0xa5, 0x0, 0x0, 0x15,
+ 0xbe, 0x94, 0x4, 0x9e, 0xb5, 0x10, 0x16, 0xce,
+ 0x93, 0x0, 0x3, 0x9e, 0xc6, 0x10,
+
+ /* U+5F "_" */
+ 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xa5, 0x0,
+
+ /* U+60 "`" */
+ 0x14, 0x9e, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x3,
+ 0x8d, 0xc7, 0x20, 0x0,
+
+ /* U+61 "a" */
+ 0x0, 0x1, 0x48, 0xbd, 0xee, 0xee, 0xdb, 0x73,
+ 0x0, 0x0, 0x0, 0x15, 0xbf, 0xc8, 0x30, 0x0,
+ 0x26, 0xbf, 0xd7, 0x20, 0x0, 0x0, 0x12, 0x21,
+ 0x0, 0x0, 0x0, 0x27, 0xcf, 0xa5, 0x0, 0x0,
+ 0x0, 0x25, 0x8a, 0xcc, 0xdd, 0xdd, 0xef, 0xfa,
+ 0x50, 0x0, 0x3, 0x8d, 0xea, 0x51, 0x0, 0x0,
+ 0x17, 0xcf, 0xa5, 0x0, 0x0, 0x49, 0xfe, 0xa4,
+ 0x10, 0x12, 0x48, 0xce, 0xfa, 0x50, 0x0, 0x0,
+ 0x25, 0x9c, 0xef, 0xff, 0xdb, 0x89, 0xad, 0xb6,
+ 0x10, 0x0,
+
+ /* U+62 "b" */
+ 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x28, 0xde, 0xb9, 0x9c, 0xee, 0xee, 0xca, 0x62,
+ 0x0, 0x0, 0x2, 0x8d, 0xfd, 0xa5, 0x20, 0x1,
+ 0x48, 0xcf, 0xc7, 0x10, 0x0, 0x28, 0xde, 0x93,
+ 0x0, 0x0, 0x0, 0x5, 0xbf, 0xb6, 0x10, 0x2,
+ 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x39, 0xed,
+ 0x72, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0, 0x0,
+ 0x5, 0xaf, 0xb6, 0x10, 0x2, 0x8d, 0xfe, 0xa5,
+ 0x20, 0x1, 0x48, 0xcf, 0xc7, 0x10, 0x0, 0x28,
+ 0xdd, 0xa8, 0x9c, 0xee, 0xfe, 0xca, 0x62, 0x0,
+ 0x0,
+
+ /* U+63 "c" */
+ 0x0, 0x1, 0x37, 0xbd, 0xef, 0xfe, 0xdb, 0x83,
+ 0x10, 0x0, 0x0, 0x15, 0xae, 0xd8, 0x41, 0x0,
+ 0x14, 0x9d, 0xe9, 0x40, 0x0, 0x5, 0xaf, 0xb6,
+ 0x10, 0x0, 0x0, 0x1, 0x36, 0x63, 0x10, 0x1,
+ 0x6c, 0xfa, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5, 0xaf, 0xb6, 0x10, 0x0, 0x0,
+ 0x0, 0x23, 0x32, 0x0, 0x0, 0x15, 0xae, 0xd8,
+ 0x41, 0x0, 0x13, 0x8c, 0xea, 0x40, 0x0, 0x0,
+ 0x1, 0x37, 0xbd, 0xef, 0xfe, 0xda, 0x73, 0x10,
+ 0x0, 0x0,
+
+ /* U+64 "d" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
+ 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x28, 0xde, 0x93, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x0,
+ 0x0, 0x14, 0x8b, 0xde, 0xfe, 0xca, 0x9a, 0xee,
+ 0x93, 0x0, 0x1, 0x5b, 0xfd, 0x95, 0x21, 0x1,
+ 0x48, 0xcf, 0xe9, 0x30, 0x0, 0x5a, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x16,
+ 0xbf, 0xa5, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
+ 0x30, 0x0, 0x5a, 0xfb, 0x61, 0x0, 0x0, 0x0,
+ 0x28, 0xde, 0x93, 0x0, 0x1, 0x5a, 0xec, 0x83,
+ 0x0, 0x0, 0x27, 0xcf, 0xe9, 0x30, 0x0, 0x0,
+ 0x14, 0x8b, 0xde, 0xed, 0xcb, 0x9b, 0xde, 0x93,
+ 0x0,
+
+ /* U+65 "e" */
+ 0x0, 0x0, 0x36, 0xac, 0xef, 0xfe, 0xda, 0x62,
+ 0x0, 0x0, 0x0, 0x4, 0x9e, 0xd9, 0x51, 0x0,
+ 0x25, 0xae, 0xd8, 0x30, 0x0, 0x4, 0xaf, 0xc7,
+ 0x10, 0x0, 0x0, 0x3, 0x8e, 0xd7, 0x20, 0x1,
+ 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0x93, 0x0, 0x5, 0xaf, 0xb6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0xae, 0xd9,
+ 0x42, 0x0, 0x2, 0x47, 0x97, 0x30, 0x0, 0x0,
+ 0x1, 0x37, 0xac, 0xee, 0xff, 0xec, 0xa6, 0x30,
+ 0x0, 0x0,
+
+ /* U+66 "f" */
+ 0x0, 0x0, 0x14, 0x8c, 0xef, 0xfc, 0x72, 0x0,
+ 0x0, 0x28, 0xde, 0xa6, 0x10, 0x0, 0x0, 0x0,
+ 0x4, 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x4, 0x9e,
+ 0xef, 0xff, 0xfe, 0xeb, 0x61, 0x0, 0x0, 0x5,
+ 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5a,
+ 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf,
+ 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xfc,
+ 0x71, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf, 0xc7,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xfc, 0x71,
+ 0x0, 0x0, 0x0,
+
+ /* U+67 "g" */
+ 0x0, 0x1, 0x48, 0xbd, 0xef, 0xec, 0xa8, 0x9d,
+ 0xe9, 0x40, 0x0, 0x15, 0xbf, 0xd9, 0x52, 0x10,
+ 0x14, 0x8c, 0xfe, 0x94, 0x0, 0x5, 0xaf, 0xc7,
+ 0x10, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x40, 0x1,
+ 0x6b, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x28, 0xde,
+ 0x94, 0x0, 0x5, 0xaf, 0xc7, 0x10, 0x0, 0x0,
+ 0x2, 0x8d, 0xe9, 0x40, 0x0, 0x15, 0xbf, 0xd9,
+ 0x52, 0x0, 0x14, 0x9d, 0xfe, 0x94, 0x0, 0x0,
+ 0x1, 0x48, 0xbd, 0xef, 0xed, 0xa9, 0xbe, 0xe9,
+ 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x49, 0xed, 0x82, 0x0, 0x0, 0x39, 0xba, 0x52,
+ 0x0, 0x2, 0x6b, 0xee, 0x94, 0x0, 0x0, 0x0,
+ 0x26, 0x9c, 0xef, 0xfe, 0xec, 0xa7, 0x31, 0x0,
+ 0x0,
+
+ /* U+68 "h" */
+ 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x28, 0xde, 0xa8, 0x8b, 0xef, 0xfe, 0xdb, 0x62,
+ 0x0, 0x0, 0x2, 0x8d, 0xfe, 0xb6, 0x21, 0x1,
+ 0x49, 0xdf, 0xa5, 0x0, 0x0, 0x28, 0xde, 0x93,
+ 0x0, 0x0, 0x0, 0x49, 0xfc, 0x71, 0x0, 0x2,
+ 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x4, 0x9f, 0xd7,
+ 0x20, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0, 0x0,
+ 0x49, 0xfd, 0x72, 0x0, 0x2, 0x8d, 0xe9, 0x30,
+ 0x0, 0x0, 0x4, 0x9f, 0xd7, 0x20, 0x0, 0x28,
+ 0xde, 0x93, 0x0, 0x0, 0x0, 0x49, 0xfd, 0x72,
+ 0x0,
+
+ /* U+69 "i" */
+ 0x1, 0x5b, 0xea, 0x40, 0x0, 0x1, 0x23, 0x20,
+ 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16, 0xcf,
+ 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16,
+ 0xcf, 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0,
+ 0x16, 0xcf, 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50,
+ 0x0,
+
+ /* U+6A "j" */
+ 0x0, 0x0, 0x27, 0xcd, 0x83, 0x0, 0x0, 0x0,
+ 0x1, 0x33, 0x20, 0x0, 0x0, 0x0, 0x27, 0xdf,
+ 0x94, 0x0, 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0,
+ 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0,
+ 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0, 0x27, 0xdf,
+ 0x94, 0x0, 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0,
+ 0x0, 0x0, 0x27, 0xdf, 0x94, 0x0, 0x0, 0x0,
+ 0x27, 0xde, 0x94, 0x0, 0x0, 0x1, 0x49, 0xed,
+ 0x83, 0x0, 0x5, 0xaf, 0xfe, 0xb6, 0x20, 0x0,
+
+ /* U+6B "k" */
+ 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x28, 0xde, 0x93, 0x0, 0x1, 0x4a, 0xde, 0xa5,
+ 0x10, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x37, 0xce,
+ 0xc8, 0x30, 0x0, 0x0, 0x0, 0x28, 0xde, 0xa8,
+ 0xae, 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x8d, 0xff, 0xff, 0xfe, 0xb6, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x28, 0xdf, 0xb5, 0x24, 0x9d, 0xeb,
+ 0x61, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x30,
+ 0x0, 0x38, 0xde, 0xb6, 0x10, 0x0, 0x0, 0x28,
+ 0xde, 0x93, 0x0, 0x0, 0x3, 0x8d, 0xeb, 0x61,
+ 0x0,
+
+ /* U+6C "l" */
+ 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16, 0xcf, 0xa5,
+ 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16, 0xcf,
+ 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0, 0x16,
+ 0xcf, 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50, 0x0,
+ 0x16, 0xcf, 0xa5, 0x0, 0x1, 0x6c, 0xfa, 0x50,
+ 0x0, 0x16, 0xcf, 0xa5, 0x0,
+
+ /* U+6D "m" */
+ 0x3, 0x8d, 0xea, 0x89, 0xcd, 0xef, 0xed, 0xa6,
+ 0x33, 0x7b, 0xdf, 0xff, 0xec, 0x94, 0x10, 0x0,
+ 0x0, 0x38, 0xdf, 0xd9, 0x51, 0x0, 0x15, 0x9d,
+ 0xff, 0xd9, 0x41, 0x0, 0x16, 0xae, 0xe8, 0x30,
+ 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x4,
+ 0xaf, 0xd7, 0x20, 0x0, 0x0, 0x16, 0xbf, 0xb5,
+ 0x0, 0x0, 0x38, 0xde, 0x93, 0x0, 0x0, 0x0,
+ 0x49, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x6b, 0xfb,
+ 0x60, 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x0, 0x0,
+ 0x4, 0x9f, 0xc7, 0x20, 0x0, 0x0, 0x6, 0xbf,
+ 0xb6, 0x0, 0x0, 0x38, 0xde, 0x93, 0x0, 0x0,
+ 0x0, 0x49, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x6b,
+ 0xfb, 0x60, 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x0,
+ 0x0, 0x4, 0x9f, 0xc7, 0x20, 0x0, 0x0, 0x6,
+ 0xbf, 0xb6, 0x0, 0x0,
+
+ /* U+6E "n" */
+ 0x2, 0x8d, 0xd9, 0x78, 0xbe, 0xff, 0xed, 0xb6,
+ 0x20, 0x0, 0x0, 0x28, 0xdf, 0xeb, 0x62, 0x10,
+ 0x14, 0x9d, 0xfa, 0x50, 0x0, 0x2, 0x8d, 0xe9,
+ 0x30, 0x0, 0x0, 0x4, 0x9f, 0xc7, 0x10, 0x0,
+ 0x28, 0xde, 0x93, 0x0, 0x0, 0x0, 0x49, 0xfd,
+ 0x72, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0,
+ 0x4, 0x9f, 0xd7, 0x20, 0x0, 0x28, 0xde, 0x93,
+ 0x0, 0x0, 0x0, 0x49, 0xfd, 0x72, 0x0, 0x2,
+ 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x4, 0x9f, 0xd7,
+ 0x20, 0x0,
+
+ /* U+6F "o" */
+ 0x0, 0x0, 0x36, 0xad, 0xef, 0xff, 0xdb, 0x84,
+ 0x10, 0x0, 0x0, 0x4, 0xae, 0xda, 0x52, 0x0,
+ 0x13, 0x7c, 0xec, 0x72, 0x0, 0x5, 0xaf, 0xc7,
+ 0x10, 0x0, 0x0, 0x0, 0x49, 0xed, 0x72, 0x1,
+ 0x7c, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x2, 0x7c,
+ 0xf9, 0x40, 0x5, 0xaf, 0xc6, 0x10, 0x0, 0x0,
+ 0x0, 0x49, 0xed, 0x82, 0x0, 0x4, 0xae, 0xd9,
+ 0x52, 0x0, 0x13, 0x7b, 0xec, 0x72, 0x0, 0x0,
+ 0x1, 0x37, 0xac, 0xee, 0xfe, 0xdb, 0x95, 0x20,
+ 0x0, 0x0,
+
+ /* U+70 "p" */
+ 0x2, 0x8d, 0xeb, 0x9a, 0xcd, 0xee, 0xec, 0x96,
+ 0x20, 0x0, 0x0, 0x28, 0xdf, 0xc8, 0x30, 0x0,
+ 0x3, 0x7c, 0xfc, 0x71, 0x0, 0x2, 0x8d, 0xe9,
+ 0x30, 0x0, 0x0, 0x0, 0x5b, 0xfb, 0x61, 0x0,
+ 0x28, 0xde, 0x93, 0x0, 0x0, 0x0, 0x4, 0x9e,
+ 0xd7, 0x20, 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0,
+ 0x0, 0x6b, 0xfb, 0x60, 0x0, 0x28, 0xdf, 0xd8,
+ 0x41, 0x0, 0x14, 0x8d, 0xfc, 0x61, 0x0, 0x2,
+ 0x8d, 0xeb, 0xaa, 0xce, 0xee, 0xec, 0xa6, 0x20,
+ 0x0, 0x0, 0x28, 0xde, 0x93, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28,
+ 0xde, 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+71 "q" */
+ 0x0, 0x1, 0x48, 0xbd, 0xee, 0xed, 0xa8, 0xad,
+ 0xe9, 0x30, 0x0, 0x15, 0xbf, 0xd9, 0x52, 0x0,
+ 0x13, 0x8c, 0xfe, 0x93, 0x0, 0x5, 0xaf, 0xc7,
+ 0x10, 0x0, 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x1,
+ 0x6b, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x38, 0xde,
+ 0x93, 0x0, 0x5, 0xaf, 0xc6, 0x10, 0x0, 0x0,
+ 0x3, 0x8d, 0xe9, 0x30, 0x0, 0x15, 0xbf, 0xd9,
+ 0x41, 0x0, 0x14, 0x8c, 0xfe, 0x93, 0x0, 0x0,
+ 0x1, 0x48, 0xbd, 0xef, 0xed, 0xba, 0xbe, 0xe9,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x38, 0xde, 0x93, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3, 0x8d, 0xe9, 0x30, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xde, 0x93,
+ 0x0,
+
+ /* U+72 "r" */
+ 0x2, 0x8d, 0xeb, 0xab, 0xde, 0xd8, 0x30, 0x0,
+ 0x28, 0xdf, 0xea, 0x52, 0x0, 0x0, 0x0, 0x2,
+ 0x8d, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x28,
+ 0xde, 0x93, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
+ 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x28, 0xde,
+ 0x93, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xe9,
+ 0x30, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+73 "s" */
+ 0x0, 0x3, 0x6a, 0xce, 0xff, 0xed, 0xc9, 0x52,
+ 0x0, 0x1, 0x6c, 0xfb, 0x62, 0x0, 0x13, 0x8c,
+ 0xfb, 0x61, 0x1, 0x6c, 0xfc, 0x84, 0x21, 0x0,
+ 0x0, 0x11, 0x0, 0x0, 0x1, 0x47, 0x9b, 0xde,
+ 0xed, 0xb8, 0x52, 0x0, 0x1, 0x23, 0x21, 0x0,
+ 0x0, 0x13, 0x7b, 0xfc, 0x72, 0x4, 0x9e, 0xea,
+ 0x41, 0x0, 0x1, 0x6a, 0xec, 0x72, 0x0, 0x13,
+ 0x7a, 0xce, 0xef, 0xee, 0xca, 0x73, 0x0,
+
+ /* U+74 "t" */
+ 0x0, 0x0, 0x1, 0x36, 0x75, 0x20, 0x0, 0x0,
+ 0x0, 0x0, 0x27, 0xcf, 0xa4, 0x0, 0x0, 0x0,
+ 0x49, 0xde, 0xff, 0xff, 0xee, 0xb6, 0x20, 0x0,
+ 0x0, 0x27, 0xcf, 0xa4, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x7c, 0xfa, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x27, 0xcf, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x7c, 0xfa, 0x40, 0x0, 0x0, 0x0, 0x0, 0x16,
+ 0xcf, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x25,
+ 0xad, 0xff, 0xc7, 0x20,
+
+ /* U+75 "u" */
+ 0x3, 0x8e, 0xe8, 0x30, 0x0, 0x0, 0x4, 0xaf,
+ 0xc7, 0x20, 0x0, 0x38, 0xee, 0x83, 0x0, 0x0,
+ 0x0, 0x4a, 0xfc, 0x72, 0x0, 0x3, 0x8e, 0xe8,
+ 0x30, 0x0, 0x0, 0x4, 0xaf, 0xc7, 0x20, 0x0,
+ 0x38, 0xee, 0x83, 0x0, 0x0, 0x0, 0x4a, 0xfc,
+ 0x72, 0x0, 0x2, 0x8d, 0xe9, 0x30, 0x0, 0x0,
+ 0x4, 0xaf, 0xc7, 0x20, 0x0, 0x15, 0xbf, 0xc8,
+ 0x30, 0x1, 0x26, 0xbe, 0xfc, 0x72, 0x0, 0x0,
+ 0x3, 0x7b, 0xde, 0xff, 0xec, 0x99, 0xbf, 0xc7,
+ 0x20, 0x0,
+
+ /* U+76 "v" */
+ 0x0, 0x5, 0xaf, 0xc7, 0x10, 0x0, 0x0, 0x5,
+ 0xaf, 0xc6, 0x10, 0x0, 0x5, 0xaf, 0xc6, 0x10,
+ 0x0, 0x4, 0xaf, 0xc6, 0x10, 0x0, 0x0, 0x5,
+ 0xaf, 0xb6, 0x10, 0x4, 0x9e, 0xc7, 0x10, 0x0,
+ 0x0, 0x0, 0x5, 0xae, 0xb5, 0x3, 0x9e, 0xc7,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x5, 0xae, 0xa8,
+ 0x9d, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5, 0xaf, 0xff, 0xc7, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5, 0xaf, 0xc7, 0x20, 0x0,
+ 0x0, 0x0,
+
+ /* U+77 "w" */
+ 0x0, 0x4, 0x9e, 0xc7, 0x10, 0x0, 0x1, 0x6c,
+ 0xfb, 0x61, 0x0, 0x0, 0x27, 0xce, 0x94, 0x0,
+ 0x0, 0x0, 0x5, 0xaf, 0xa5, 0x0, 0x0, 0x5b,
+ 0xff, 0xfa, 0x50, 0x0, 0x5, 0xbf, 0xa5, 0x0,
+ 0x0, 0x0, 0x0, 0x16, 0xce, 0x94, 0x0, 0x5a,
+ 0xd9, 0x8a, 0xea, 0x50, 0x4, 0x9e, 0xb6, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x28, 0xdd, 0x72, 0x49,
+ 0xda, 0x40, 0x5a, 0xe9, 0x42, 0x7d, 0xc7, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0xeb, 0x99,
+ 0xda, 0x50, 0x0, 0x6b, 0xd9, 0x9b, 0xd8, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0xff,
+ 0xfb, 0x61, 0x0, 0x1, 0x6c, 0xff, 0xe9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b,
+ 0xfc, 0x71, 0x0, 0x0, 0x2, 0x7c, 0xfb, 0x50,
+ 0x0, 0x0, 0x0, 0x0,
+
+ /* U+78 "x" */
+ 0x0, 0x1, 0x6b, 0xfd, 0x82, 0x0, 0x0, 0x49,
+ 0xee, 0xa5, 0x10, 0x0, 0x0, 0x0, 0x2, 0x7c,
+ 0xeb, 0x61, 0x27, 0xce, 0xb6, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0x8d, 0xed, 0xde, 0xc7,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x17, 0xcf, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0x9e, 0xdc, 0xce, 0xd7,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d,
+ 0xea, 0x51, 0x16, 0xbe, 0xc7, 0x20, 0x0, 0x0,
+ 0x0, 0x2, 0x7c, 0xfc, 0x72, 0x0, 0x0, 0x28,
+ 0xdf, 0xb6, 0x10, 0x0,
+
+ /* U+79 "y" */
+ 0x0, 0x16, 0xbf, 0xc7, 0x20, 0x0, 0x0, 0x17,
+ 0xcf, 0xb6, 0x10, 0x0, 0x16, 0xbf, 0xc7, 0x10,
+ 0x0, 0x16, 0xbf, 0xb6, 0x10, 0x0, 0x0, 0x16,
+ 0xbf, 0xb6, 0x10, 0x5, 0xaf, 0xc6, 0x10, 0x0,
+ 0x0, 0x0, 0x16, 0xcf, 0xb6, 0x14, 0xaf, 0xc7,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x16, 0xcf, 0xb9,
+ 0xae, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x17, 0xcf, 0xff, 0xd7, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x17, 0xcf, 0xd8, 0x30, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c, 0xd8,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x24,
+ 0x9d, 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x27, 0xcf, 0xeb, 0x73, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+7A "z" */
+ 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+ 0x50, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5a, 0xed,
+ 0x94, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5b, 0xed,
+ 0x94, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5b, 0xed,
+ 0x93, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xed,
+ 0x83, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xed,
+ 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27, 0xcf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x83,
+
+ /* U+7B "{" */
+ 0x0, 0x0, 0x0, 0x2, 0x47, 0x75, 0x10, 0x0,
+ 0x0, 0x0, 0x49, 0xed, 0x94, 0x10, 0x0, 0x0,
+ 0x0, 0x49, 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0,
+ 0x5, 0xbf, 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x6b, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x1, 0x5a,
+ 0xec, 0x72, 0x0, 0x0, 0x0, 0x49, 0xff, 0xfb,
+ 0x51, 0x0, 0x0, 0x0, 0x0, 0x1, 0x5a, 0xec,
+ 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b, 0xfa,
+ 0x50, 0x0, 0x0, 0x0, 0x0, 0x5, 0xbf, 0xb6,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xfc, 0x71,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xdd, 0x94,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x2, 0x47, 0x75,
+ 0x10, 0x0,
+
+ /* U+7C "|" */
+ 0x0, 0x4a, 0xe9, 0x30, 0x0, 0x4, 0xae, 0x93,
+ 0x0, 0x0, 0x4a, 0xe9, 0x30, 0x0, 0x4, 0xae,
+ 0x93, 0x0, 0x0, 0x4a, 0xe9, 0x30, 0x0, 0x4,
+ 0xae, 0x93, 0x0, 0x0, 0x4a, 0xe9, 0x30, 0x0,
+ 0x4, 0xae, 0x93, 0x0, 0x0, 0x4a, 0xe9, 0x30,
+ 0x0, 0x4, 0xae, 0x93, 0x0, 0x0, 0x4a, 0xe9,
+ 0x30, 0x0,
+
+ /* U+7D "}" */
+ 0x0, 0x14, 0x78, 0x52, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x13, 0x8d, 0xea, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x6b, 0xfa, 0x50, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xaf, 0xb6, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x4a, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x6c, 0xeb, 0x61, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0xef, 0xfa, 0x50, 0x0, 0x0, 0x1,
+ 0x6c, 0xeb, 0x61, 0x0, 0x0, 0x0, 0x0, 0x4a,
+ 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf,
+ 0xb6, 0x10, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xfa,
+ 0x50, 0x0, 0x0, 0x0, 0x14, 0x8d, 0xea, 0x40,
+ 0x0, 0x0, 0x0, 0x14, 0x77, 0x42, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+7E "~" */
+ 0x0, 0x1, 0x59, 0xcd, 0xdc, 0x95, 0x20, 0x0,
+ 0x0, 0x38, 0xca, 0x50, 0x0, 0x4a, 0xeb, 0x73,
+ 0x36, 0xad, 0xd9, 0x41, 0x2, 0x7c, 0xd7, 0x20,
+ 0x2, 0x7c, 0xa6, 0x10, 0x0, 0x2, 0x6b, 0xef,
+ 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F001 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x12, 0x32, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x13, 0x46, 0x79, 0xbc, 0xef, 0xff, 0xff,
+ 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x13, 0x56, 0x89, 0xbc, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x9e, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xed, 0xca, 0x87, 0x54, 0x23, 0x8d, 0xff, 0xa5,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf,
+ 0xff, 0xda, 0x87, 0x53, 0x21, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x8d, 0xff, 0xa5, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5, 0xaf, 0xfd, 0x82, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
+ 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5, 0xaf, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x8d, 0xff, 0xa5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf, 0xfd,
+ 0x82, 0x0, 0x0, 0x0, 0x0, 0x24, 0x79, 0xbb,
+ 0xbc, 0xdf, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0,
+ 0x12, 0x33, 0x37, 0xbf, 0xfd, 0x82, 0x0, 0x0,
+ 0x0, 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xa5, 0x0, 0x0, 0x15, 0xad, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x2, 0x6b,
+ 0xef, 0xff, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0,
+ 0x39, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x61,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x22, 0x32,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x89,
+ 0xab, 0xaa, 0x87, 0x41, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F008 "" */
+ 0x0, 0x39, 0xb9, 0x54, 0x59, 0xdf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x95, 0x45, 0x9b, 0x93, 0x0, 0x0, 0x5a, 0xeb,
+ 0x88, 0x9b, 0xef, 0xb7, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x23, 0x7c, 0xfe, 0xb8, 0x88, 0xbe,
+ 0xa5, 0x0, 0x0, 0x5a, 0xc7, 0x10, 0x17, 0xcf,
+ 0xb5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x6b, 0xfc, 0x61, 0x1, 0x7c, 0xa5, 0x0, 0x0,
+ 0x5a, 0xfd, 0xcc, 0xce, 0xff, 0xb6, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x12, 0x7c, 0xff, 0xdc,
+ 0xcc, 0xef, 0xa5, 0x0, 0x0, 0x5a, 0xc6, 0x10,
+ 0x17, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfb, 0x61, 0x1, 0x6c, 0xa5,
+ 0x0, 0x0, 0x5a, 0xfd, 0xcc, 0xce, 0xff, 0xb6,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x7c,
+ 0xff, 0xdc, 0xcc, 0xef, 0xa5, 0x0, 0x0, 0x5a,
+ 0xc7, 0x10, 0x17, 0xcf, 0xb5, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x6b, 0xfc, 0x61, 0x1,
+ 0x7c, 0xa5, 0x0, 0x0, 0x5a, 0xeb, 0x88, 0x9b,
+ 0xef, 0xb7, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x23, 0x7c, 0xfe, 0xb8, 0x88, 0xbe, 0xa5, 0x0,
+ 0x0, 0x49, 0xb9, 0x54, 0x59, 0xdf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x95, 0x45, 0x9b, 0x93, 0x0,
+
+ /* U+F00B "" */
+ 0x0, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0xb6, 0x25,
+ 0x9e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x83, 0x0, 0x0, 0x5a, 0xff,
+ 0xff, 0xff, 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xa5, 0x0, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff,
+ 0xc6, 0x25, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0x94, 0x0, 0x0,
+ 0x0, 0x12, 0x33, 0x33, 0x22, 0x10, 0x0, 0x1,
+ 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
+ 0x33, 0x21, 0x0, 0x0, 0x0, 0x4a, 0xff, 0xff,
+ 0xff, 0xff, 0xc7, 0x26, 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4,
+ 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xd8,
+ 0x46, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x4a,
+ 0xff, 0xff, 0xff, 0xff, 0xc7, 0x26, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xa4, 0x0, 0x0, 0x0, 0x12, 0x33, 0x33,
+ 0x22, 0x10, 0x0, 0x1, 0x23, 0x33, 0x33, 0x33,
+ 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x0, 0x0,
+ 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xc6, 0x25,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0x94, 0x0, 0x0, 0x5a, 0xff,
+ 0xff, 0xff, 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xa5, 0x0, 0x0, 0x38, 0xdf, 0xff, 0xff, 0xfe,
+ 0xb6, 0x25, 0xae, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x83, 0x0,
+
+ /* U+F00C "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x7c, 0xdc, 0x94, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x38, 0xcf, 0xff, 0xff, 0xfe,
+ 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c,
+ 0xff, 0xff, 0xff, 0xfd, 0x84, 0x10, 0x0, 0x0,
+ 0x1, 0x49, 0xcd, 0xc7, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x38, 0xcf, 0xff, 0xff, 0xff, 0xd8,
+ 0x41, 0x0, 0x0, 0x0, 0x0, 0x39, 0xef, 0xff,
+ 0xff, 0xfc, 0x83, 0x0, 0x0, 0x3, 0x8c, 0xff,
+ 0xff, 0xff, 0xfd, 0x84, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x48, 0xdf, 0xff, 0xff, 0xff,
+ 0xc8, 0x68, 0xcf, 0xff, 0xff, 0xff, 0xd8, 0x41,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x14, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfc, 0x84, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x48, 0xcf, 0xff, 0xff, 0xff, 0xc8, 0x41, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x8c,
+ 0xdc, 0x83, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F00D "" */
+ 0x0, 0x0, 0x13, 0x44, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x24, 0x42, 0x10, 0x0, 0x0,
+ 0x27, 0xdf, 0xff, 0xfc, 0x73, 0x0, 0x0, 0x0,
+ 0x14, 0x8d, 0xff, 0xff, 0xb6, 0x10, 0x0, 0x14,
+ 0x9d, 0xff, 0xff, 0xff, 0xc7, 0x32, 0x48, 0xdf,
+ 0xff, 0xff, 0xfd, 0x83, 0x0, 0x0, 0x0, 0x1,
+ 0x5a, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x16, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xa5, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x8d,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x73, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x48, 0xdf, 0xff, 0xff,
+ 0xfd, 0x98, 0xad, 0xff, 0xff, 0xff, 0xc7, 0x30,
+ 0x0, 0x0, 0x39, 0xef, 0xff, 0xff, 0xd9, 0x41,
+ 0x0, 0x1, 0x5a, 0xdf, 0xff, 0xff, 0xd7, 0x20,
+ 0x0, 0x2, 0x59, 0xbb, 0x84, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x15, 0x9b, 0xb9, 0x51, 0x0,
+
+ /* U+F011 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x47, 0x99, 0x74, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x36, 0x52, 0x0, 0x4, 0x9f, 0xff,
+ 0xf9, 0x40, 0x0, 0x25, 0x64, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0x9d, 0xff,
+ 0xfc, 0x71, 0x4, 0x9f, 0xff, 0xf9, 0x40, 0x17,
+ 0xcf, 0xff, 0xea, 0x51, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x15, 0xaf, 0xff, 0xfd, 0x94, 0x10, 0x4,
+ 0x9f, 0xff, 0xf9, 0x40, 0x1, 0x59, 0xdf, 0xff,
+ 0xfb, 0x51, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xff,
+ 0xfd, 0x83, 0x0, 0x0, 0x4, 0x9f, 0xff, 0xf9,
+ 0x40, 0x0, 0x0, 0x38, 0xdf, 0xff, 0xc7, 0x20,
+ 0x0, 0x0, 0x16, 0xbf, 0xff, 0xd8, 0x20, 0x0,
+ 0x0, 0x4, 0x9f, 0xff, 0xf9, 0x40, 0x0, 0x0,
+ 0x2, 0x8d, 0xff, 0xfb, 0x60, 0x0, 0x0, 0x17,
+ 0xcf, 0xff, 0xc6, 0x10, 0x0, 0x0, 0x3, 0x9e,
+ 0xff, 0xe9, 0x30, 0x0, 0x0, 0x1, 0x6c, 0xff,
+ 0xfc, 0x71, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xe9,
+ 0x40, 0x0, 0x0, 0x0, 0x1, 0x11, 0x10, 0x0,
+ 0x0, 0x0, 0x4, 0x9e, 0xff, 0xfa, 0x50, 0x0,
+ 0x0, 0x1, 0x5a, 0xff, 0xff, 0xb6, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b,
+ 0xff, 0xff, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x3,
+ 0x8d, 0xff, 0xff, 0xda, 0x63, 0x10, 0x0, 0x0,
+ 0x0, 0x1, 0x36, 0xad, 0xff, 0xff, 0xd8, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x5a, 0xdf,
+ 0xff, 0xff, 0xfe, 0xdc, 0xcc, 0xcd, 0xef, 0xff,
+ 0xff, 0xfd, 0xa5, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x68, 0xad, 0xef,
+ 0xff, 0xff, 0xff, 0xfe, 0xdb, 0x96, 0x31, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, 0x11,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F013 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x23,
+ 0x44, 0x44, 0x32, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x27, 0xdf, 0xff, 0xff, 0xfd, 0x72, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x64,
+ 0x11, 0x36, 0xad, 0xff, 0xff, 0xff, 0xff, 0xda,
+ 0x63, 0x11, 0x46, 0x53, 0x0, 0x0, 0x0, 0x49,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x94, 0x0,
+ 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0xba, 0xab, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x61, 0x1, 0x37, 0xbe, 0xff, 0xff, 0xff,
+ 0xc7, 0x20, 0x0, 0x0, 0x2, 0x7c, 0xff, 0xff,
+ 0xff, 0xeb, 0x73, 0x10, 0x0, 0x2, 0x7c, 0xff,
+ 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0, 0x28,
+ 0xdf, 0xff, 0xff, 0xd7, 0x20, 0x0, 0x1, 0x37,
+ 0xbe, 0xff, 0xff, 0xff, 0xc7, 0x20, 0x0, 0x0,
+ 0x2, 0x7c, 0xff, 0xff, 0xff, 0xeb, 0x73, 0x10,
+ 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0xba, 0xab, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x61, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x35, 0x64,
+ 0x11, 0x25, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xc9,
+ 0x52, 0x11, 0x36, 0x53, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf, 0xff, 0xff,
+ 0xfd, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23,
+ 0x44, 0x44, 0x32, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+F015 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x25, 0x77, 0x63, 0x10, 0x0, 0x3,
+ 0x68, 0x88, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x59,
+ 0xdf, 0xff, 0xff, 0xfe, 0xb6, 0x32, 0x7c, 0xff,
+ 0xfc, 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x13, 0x7c, 0xef, 0xfe, 0xc8,
+ 0x54, 0x6a, 0xdf, 0xff, 0xee, 0xef, 0xff, 0xc7,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x26, 0xad, 0xff, 0xfd, 0xa5, 0x34, 0x8b, 0xc9,
+ 0x53, 0x47, 0xbe, 0xff, 0xff, 0xfc, 0x71, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x59, 0xcf, 0xff,
+ 0xeb, 0x74, 0x36, 0xad, 0xff, 0xff, 0xff, 0xec,
+ 0x84, 0x35, 0x9d, 0xff, 0xfe, 0xb6, 0x30, 0x0,
+ 0x0, 0x2, 0x6b, 0xef, 0xff, 0xc9, 0x53, 0x59,
+ 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xb7, 0x33, 0x6b, 0xef, 0xff, 0xd8, 0x40, 0x0,
+ 0x3, 0x7a, 0x96, 0x33, 0x6b, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd9, 0x42, 0x48, 0xa9, 0x51, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9,
+ 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x16, 0xcf, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0,
+ 0x2, 0x7d, 0xff, 0xff, 0xff, 0xfe, 0x94, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c,
+ 0xff, 0xff, 0xff, 0xff, 0xa4, 0x0, 0x0, 0x27,
+ 0xcf, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xae, 0xff,
+ 0xff, 0xff, 0xd8, 0x30, 0x0, 0x1, 0x6b, 0xff,
+ 0xff, 0xff, 0xfd, 0x83, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F019 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x24, 0x67, 0x77, 0x76, 0x42, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xff, 0xff,
+ 0xff, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x8d, 0xff, 0xff, 0xff, 0xd8, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
+ 0xff, 0xff, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x8d, 0xff, 0xff, 0xff,
+ 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xdf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x49, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x94, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x14, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x23, 0x33, 0x33, 0x33, 0x33, 0x22,
+ 0x59, 0xdf, 0xff, 0xfd, 0x95, 0x22, 0x33, 0x33,
+ 0x33, 0x33, 0x32, 0x10, 0x0, 0x0, 0x4a, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa5, 0x34, 0x77,
+ 0x43, 0x5a, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xa4, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xec, 0xaa, 0xce, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
+ 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe9, 0x56, 0xbc, 0x75,
+ 0x8d, 0xff, 0xa5, 0x0, 0x0, 0x25, 0x9a, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0x52,
+ 0x0,
+
+ /* U+F01C "" */
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x49, 0xdf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0xb7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x15, 0xae, 0xff, 0xda, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x9b, 0xef,
+ 0xfc, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x5a, 0xef, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0xae, 0xff,
+ 0xd7, 0x30, 0x0, 0x0, 0x0, 0x15, 0xae, 0xff,
+ 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x4a, 0xef, 0xfc,
+ 0x82, 0x0, 0x0, 0x38, 0xef, 0xff, 0xda, 0x88,
+ 0x88, 0x88, 0x63, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x25, 0x78, 0x88, 0x88, 0x9b, 0xef, 0xff, 0xb6,
+ 0x10, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xd8, 0x30, 0x0, 0x0, 0x1, 0x5b, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0,
+ 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xd8, 0x20, 0x5, 0xaf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x72, 0x0, 0x26, 0xbe, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x84, 0x0,
+
+ /* U+F021 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x58, 0x99, 0x62, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x13, 0x69, 0xbd, 0xef, 0xff, 0xff,
+ 0xff, 0xfd, 0xb9, 0x74, 0x20, 0x4, 0x9f, 0xff,
+ 0xa5, 0x0, 0x0, 0x0, 0x0, 0x3, 0x7b, 0xef,
+ 0xff, 0xff, 0xdc, 0xaa, 0x99, 0x9a, 0xcd, 0xff,
+ 0xff, 0xfd, 0xaa, 0xbf, 0xff, 0xa5, 0x0, 0x0,
+ 0x0, 0x4, 0x9e, 0xff, 0xfe, 0xa6, 0x31, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x59, 0xcf, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x2, 0x7c, 0xff,
+ 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38,
+ 0xef, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xa5,
+ 0x0, 0x0, 0x3, 0x6a, 0xa9, 0x73, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x25, 0x9a, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xa9, 0x63, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x36, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xa9, 0x52, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x37, 0xaa, 0xa6, 0x30, 0x0,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xfe, 0xee, 0xff,
+ 0xfe, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
+ 0xcf, 0xff, 0xc7, 0x20, 0x0, 0x0, 0x5a, 0xff,
+ 0xff, 0xff, 0xfc, 0x95, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x13, 0x7b, 0xef, 0xff, 0xe9, 0x40,
+ 0x0, 0x0, 0x0, 0x5a, 0xff, 0xfb, 0xaa, 0xdf,
+ 0xff, 0xff, 0xdb, 0xa9, 0x99, 0xaa, 0xcd, 0xff,
+ 0xff, 0xfe, 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x5a, 0xff, 0xfa, 0x40, 0x2, 0x47, 0x9c, 0xdf,
+ 0xff, 0xff, 0xff, 0xff, 0xdb, 0x96, 0x31, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0x99, 0x85,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, 0x11,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F026 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x26, 0xaa, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x6b, 0xef, 0xff, 0xa5, 0x0,
+ 0x0, 0x14, 0x78, 0x88, 0x88, 0x89, 0xce, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0,
+ 0x0, 0x38, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x37, 0xcf, 0xff, 0xff, 0xa5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x7c, 0xff, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x10, 0x0,
+
+ /* U+F027 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x26, 0xaa, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26,
+ 0xbe, 0xff, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x14, 0x78, 0x88, 0x88, 0x89, 0xce,
+ 0xff, 0xff, 0xff, 0xa5, 0x0, 0x13, 0x31, 0x0,
+ 0x0, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfa, 0x50, 0x16, 0xbe, 0xea,
+ 0x51, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x3, 0x8d,
+ 0xfa, 0x40, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x15, 0xae,
+ 0xea, 0x51, 0x0, 0x0, 0x38, 0xdf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x24,
+ 0x42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x8c, 0xff, 0xff, 0xfa, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0x8c, 0xff, 0xa4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F028 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xfd,
+ 0xa5, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xaa, 0x72,
+ 0x0, 0x0, 0x0, 0x12, 0x11, 0x14, 0x8c, 0xfe,
+ 0x94, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x26, 0xbe, 0xff, 0xfa, 0x50, 0x0,
+ 0x0, 0x27, 0xcf, 0xda, 0x52, 0x16, 0xbe, 0xe9,
+ 0x40, 0x0, 0x0, 0x14, 0x78, 0x88, 0x88, 0x89,
+ 0xce, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x23, 0x32,
+ 0x1, 0x4a, 0xdf, 0xb6, 0x13, 0x8d, 0xfa, 0x50,
+ 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfa, 0x50, 0x15, 0xbe, 0xea, 0x51,
+ 0x16, 0xbf, 0xc6, 0x13, 0x9e, 0xe9, 0x30, 0x0,
+ 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xa5, 0x0, 0x3, 0x8d, 0xfa, 0x40, 0x39,
+ 0xee, 0x83, 0x17, 0xcf, 0xa5, 0x0, 0x5, 0xaf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
+ 0x50, 0x15, 0xbe, 0xea, 0x51, 0x16, 0xcf, 0xc6,
+ 0x13, 0x8e, 0xe9, 0x30, 0x0, 0x38, 0xdf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0,
+ 0x23, 0x31, 0x1, 0x5a, 0xef, 0xb6, 0x13, 0x8d,
+ 0xfa, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x7c, 0xff, 0xff, 0xfa, 0x50, 0x0, 0x0,
+ 0x27, 0xcf, 0xda, 0x52, 0x16, 0xbf, 0xe9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x7c, 0xff, 0xa4, 0x0, 0x0, 0x0, 0x12,
+ 0x11, 0x15, 0x9d, 0xfe, 0x94, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x11, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b,
+ 0xfd, 0xa5, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F03E "" */
+ 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xeb, 0x62, 0x0, 0x0, 0x5a, 0xff,
+ 0xfd, 0xa7, 0x56, 0x7b, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xb5, 0x0, 0x0,
+ 0x1, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
+ 0x5a, 0xff, 0xeb, 0x63, 0x12, 0x38, 0xcf, 0xff,
+ 0xff, 0xff, 0xfe, 0xa6, 0x20, 0x13, 0x8c, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xfe, 0xcc, 0xdf, 0xff, 0xff, 0xea, 0x62,
+ 0x0, 0x0, 0x0, 0x1, 0x38, 0xdf, 0xff, 0xa5,
+ 0x0, 0x0, 0x5a, 0xff, 0xff, 0xea, 0x62, 0x0,
+ 0x15, 0x9b, 0xa6, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x8d, 0xff, 0xa5, 0x0, 0x0, 0x5a,
+ 0xff, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d,
+ 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xec, 0x98,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x89, 0xce, 0xff, 0xa5, 0x0,
+ 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xeb, 0x62, 0x0,
+
+ /* U+F048 "" */
+ 0x25, 0x78, 0x86, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x13, 0x67, 0x52, 0x0, 0x4, 0x9f, 0xff,
+ 0xc6, 0x10, 0x0, 0x0, 0x0, 0x15, 0x9d, 0xff,
+ 0xfe, 0x83, 0x0, 0x49, 0xff, 0xfc, 0x61, 0x0,
+ 0x0, 0x26, 0xae, 0xff, 0xff, 0xff, 0xe9, 0x30,
+ 0x4, 0x9f, 0xff, 0xc6, 0x10, 0x37, 0xbe, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x93, 0x0, 0x49, 0xff,
+ 0xfd, 0xa9, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xe9, 0x30, 0x4, 0x9f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x93,
+ 0x0, 0x49, 0xff, 0xfe, 0xee, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe9, 0x30, 0x4, 0x9f,
+ 0xff, 0xc6, 0x24, 0x9d, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x93, 0x0, 0x49, 0xff, 0xfc, 0x61,
+ 0x0, 0x3, 0x7c, 0xef, 0xff, 0xff, 0xff, 0xe9,
+ 0x30, 0x4, 0x9f, 0xff, 0xc6, 0x10, 0x0, 0x0,
+ 0x2, 0x6b, 0xef, 0xff, 0xfe, 0x93, 0x0, 0x38,
+ 0xdf, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x59, 0xde, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+F04B "" */
+ 0x0, 0x1, 0x46, 0x76, 0x31, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x49, 0xff, 0xff, 0xff, 0xda,
+ 0x74, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfd, 0xa7, 0x41, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xdb, 0x74, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0xb8, 0x52, 0x0,
+ 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xeb, 0x84, 0x10, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x61, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x73, 0x10,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0xb8, 0x42, 0x0,
+ 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xdb, 0x74, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfd, 0xa7, 0x41, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
+ 0xff, 0xff, 0xff, 0xda, 0x74, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x36, 0x76, 0x31, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+F04C "" */
+ 0x0, 0x15, 0xad, 0xef, 0xff, 0xff, 0xfe, 0xc8,
+ 0x30, 0x0, 0x15, 0xad, 0xef, 0xff, 0xff, 0xfe,
+ 0xc8, 0x30, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0x72, 0x0, 0x5a, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x72, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0,
+ 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0,
+ 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x82, 0x0, 0x4a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfc, 0x72, 0x0, 0x4a, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x72, 0x0, 0x2, 0x47, 0x88,
+ 0x99, 0x99, 0x88, 0x63, 0x10, 0x0, 0x2, 0x47,
+ 0x88, 0x99, 0x99, 0x88, 0x63, 0x10,
+
+ /* U+F04D "" */
+ 0x0, 0x2, 0x47, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x63, 0x10, 0x0, 0x4a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x72, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x72, 0x0, 0x15, 0xad, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0xc8, 0x30,
+
+ /* U+F051 "" */
+ 0x2, 0x57, 0x64, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x25, 0x88, 0x85, 0x20, 0x2, 0x7d, 0xff,
+ 0xfd, 0xa5, 0x20, 0x0, 0x0, 0x0, 0x5, 0xbf,
+ 0xff, 0xa5, 0x0, 0x28, 0xdf, 0xff, 0xff, 0xfe,
+ 0xb7, 0x30, 0x0, 0x0, 0x5b, 0xff, 0xfa, 0x50,
+ 0x2, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc8,
+ 0x31, 0x5, 0xbf, 0xff, 0xa5, 0x0, 0x28, 0xdf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xac,
+ 0xff, 0xfa, 0x50, 0x2, 0x8d, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5,
+ 0x0, 0x28, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0xee, 0xff, 0xfa, 0x50, 0x2, 0x8d,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x94, 0x25,
+ 0xbf, 0xff, 0xa5, 0x0, 0x28, 0xdf, 0xff, 0xff,
+ 0xff, 0xfc, 0x84, 0x10, 0x0, 0x5b, 0xff, 0xfa,
+ 0x50, 0x2, 0x8d, 0xff, 0xff, 0xeb, 0x73, 0x0,
+ 0x0, 0x0, 0x5, 0xbf, 0xff, 0xa5, 0x0, 0x15,
+ 0xae, 0xda, 0x62, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5a, 0xef, 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+F052 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x36, 0x77, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x38, 0xcf, 0xff, 0xff, 0xea, 0x51,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0xae,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xc8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x14, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xb7, 0x20, 0x0,
+ 0x0, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x27, 0xdf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0,
+ 0x0, 0x0, 0x1, 0x23, 0x34, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43,
+ 0x31, 0x0, 0x0, 0x0, 0x0, 0x38, 0xdf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfb, 0x51, 0x0, 0x0,
+ 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd8, 0x20, 0x0, 0x0, 0x27, 0xce, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xea, 0x51, 0x0, 0x0,
+
+ /* U+F053 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x34, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x25, 0xae, 0xff, 0xfb, 0x61, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x5a, 0xef, 0xff,
+ 0xfd, 0x94, 0x10, 0x0, 0x0, 0x0, 0x0, 0x25,
+ 0xae, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x5a, 0xef, 0xff, 0xfd, 0x94, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d, 0xff, 0xff,
+ 0xeb, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x27, 0xbe, 0xff, 0xff, 0xc8, 0x30, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x7b,
+ 0xef, 0xff, 0xfc, 0x83, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x37, 0xce, 0xff, 0xff,
+ 0xc8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x7c, 0xef, 0xff, 0xfa, 0x51, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37,
+ 0xab, 0x95, 0x10, 0x0,
+
+ /* U+F054 "" */
+ 0x0, 0x2, 0x34, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xfc,
+ 0x83, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x27, 0xbe, 0xff, 0xff, 0xc8, 0x31, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7b,
+ 0xef, 0xff, 0xfc, 0x83, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x27, 0xbe, 0xff, 0xff,
+ 0xc8, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x8d, 0xff, 0xff, 0xfb, 0x61, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x5a, 0xef, 0xff,
+ 0xfd, 0x95, 0x10, 0x0, 0x0, 0x0, 0x0, 0x25,
+ 0xae, 0xff, 0xff, 0xd9, 0x51, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x5a, 0xef, 0xff, 0xfd, 0x95, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d, 0xff, 0xff,
+ 0xd9, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x37, 0xab, 0x85, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F067 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x69, 0xa9, 0x84, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x38, 0xdf, 0xff, 0xfb, 0x50, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x38, 0xef, 0xff, 0xfb, 0x60,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xef, 0xff,
+ 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x57, 0x88, 0x88, 0x88, 0x88, 0x9c,
+ 0xff, 0xff, 0xfd, 0xb8, 0x88, 0x88, 0x88, 0x88,
+ 0x74, 0x10, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x72, 0x0, 0x15, 0x9b, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xce, 0xff, 0xff, 0xfe, 0xdb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xa7, 0x30, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xef, 0xff,
+ 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38,
+ 0xef, 0xff, 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x38, 0xef, 0xff, 0xfb, 0x60, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x15, 0x9c, 0xdd, 0xb7, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F068 "" */
+ 0x0, 0x2, 0x45, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x53, 0x10, 0x0, 0x4a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x72, 0x0, 0x26, 0xac, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xc8, 0x40,
+
+ /* U+F06E "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x58,
+ 0xab, 0xcd, 0xef, 0xff, 0xff, 0xed, 0xca, 0x97,
+ 0x42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x49, 0xcf, 0xff, 0xfe, 0xc9,
+ 0x64, 0x32, 0x23, 0x45, 0x7a, 0xdf, 0xff, 0xfe,
+ 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x6b, 0xef, 0xff, 0xff, 0xc6, 0x20, 0x0, 0x3,
+ 0x79, 0x87, 0x52, 0x0, 0x49, 0xdf, 0xff, 0xff,
+ 0xd9, 0x41, 0x0, 0x0, 0x0, 0x27, 0xcf, 0xff,
+ 0xff, 0xfe, 0x93, 0x0, 0x0, 0x2, 0x7c, 0xff,
+ 0xff, 0xea, 0x51, 0x16, 0xbf, 0xff, 0xff, 0xfe,
+ 0xa5, 0x10, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff,
+ 0xc6, 0x12, 0x7c, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xf9, 0x40, 0x49, 0xef, 0xff, 0xff, 0xff, 0xc7,
+ 0x10, 0x0, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x93,
+ 0x3, 0x9e, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x61,
+ 0x16, 0xbf, 0xff, 0xff, 0xfe, 0xa4, 0x10, 0x0,
+ 0x0, 0x2, 0x6b, 0xef, 0xff, 0xff, 0xc6, 0x20,
+ 0x26, 0x9b, 0xcc, 0xca, 0x84, 0x11, 0x49, 0xdf,
+ 0xff, 0xff, 0xd8, 0x41, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x59, 0xcf, 0xff, 0xfe, 0xc9, 0x64,
+ 0x32, 0x23, 0x45, 0x7a, 0xdf, 0xff, 0xfe, 0xb7,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x13, 0x57, 0x9b, 0xcd, 0xef, 0xff,
+ 0xff, 0xed, 0xca, 0x97, 0x42, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0,
+
+ /* U+F070 "" */
+ 0x0, 0x1, 0x35, 0x42, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x8d, 0xff, 0xfd, 0x95, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x8c, 0xef,
+ 0xff, 0xc8, 0x53, 0x46, 0x8a, 0xbd, 0xee, 0xff,
+ 0xff, 0xed, 0xcb, 0x97, 0x53, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x59, 0xcf, 0xff, 0xff, 0xff, 0xda, 0x75,
+ 0x43, 0x23, 0x45, 0x79, 0xdf, 0xff, 0xfe, 0xc8,
+ 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x25, 0x9d, 0xff, 0xfe,
+ 0xb7, 0x44, 0x7a, 0xa9, 0x74, 0x10, 0x28, 0xcf,
+ 0xff, 0xff, 0xea, 0x51, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x16, 0xbd, 0xc8, 0x41, 0x0, 0x2,
+ 0x6a, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x72,
+ 0x4, 0xaf, 0xff, 0xff, 0xff, 0xb6, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x27, 0xdf, 0xff, 0xff, 0xeb,
+ 0x73, 0x0, 0x0, 0x26, 0xad, 0xff, 0xff, 0xff,
+ 0xfb, 0x60, 0x27, 0xdf, 0xff, 0xff, 0xff, 0xe8,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x15, 0xbe, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x3, 0x7b,
+ 0xef, 0xff, 0xeb, 0x67, 0xaf, 0xff, 0xff, 0xff,
+ 0xb6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x49, 0xdf, 0xff, 0xff, 0xc8, 0x30, 0x0, 0x0,
+ 0x0, 0x1, 0x37, 0xbe, 0xff, 0xff, 0xff, 0xff,
+ 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x37, 0xbe, 0xff, 0xff, 0xc9,
+ 0x64, 0x32, 0x22, 0x10, 0x0, 0x14, 0x8b, 0xef,
+ 0xff, 0xea, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x57,
+ 0x9b, 0xcd, 0xef, 0xff, 0xfe, 0xb7, 0x30, 0x0,
+ 0x1, 0x48, 0xce, 0xff, 0xfc, 0x94, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x14, 0x8c, 0xff, 0xfe,
+ 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x45, 0x41, 0x0, 0x0,
+
+ /* U+F071 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x33, 0x21, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x5a, 0xef, 0xff, 0xd8, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xae, 0xff,
+ 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x38, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xb5, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x7c, 0xff, 0xff, 0xee, 0xdd, 0xde, 0xff,
+ 0xff, 0xea, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0xbf,
+ 0xff, 0xff, 0xd7, 0x20, 0x0, 0x5a, 0xff, 0xff,
+ 0xfd, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x4a, 0xef, 0xff, 0xff,
+ 0xfd, 0x72, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
+ 0xc7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xd7,
+ 0x20, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xfb,
+ 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
+ 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0x87,
+ 0x8b, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa4,
+ 0x10, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xc7, 0x20, 0x0, 0x4a,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0x30,
+ 0x0, 0x0, 0x15, 0xae, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x95, 0x21, 0x37, 0xcf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x72, 0x0,
+ 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x61, 0x0, 0x1,
+ 0x46, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x87, 0x75, 0x20, 0x0,
+
+ /* U+F074 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x46,
+ 0x63, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xc8, 0x31,
+ 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xc8, 0x30, 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0,
+ 0x48, 0xcd, 0xdd, 0xde, 0xff, 0xff, 0xeb, 0x62,
+ 0x2, 0x6b, 0xef, 0xff, 0xfe, 0xde, 0xff, 0xff,
+ 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x26, 0xac, 0xa6, 0x46, 0xbe, 0xff, 0xff,
+ 0xd9, 0x41, 0x5, 0xaf, 0xfd, 0x95, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0, 0x1,
+ 0x47, 0x62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff, 0xd8,
+ 0x55, 0x8b, 0xc8, 0x41, 0x5, 0xaf, 0xfd, 0xa5,
+ 0x10, 0x0, 0x0, 0x0, 0x48, 0xcd, 0xdd, 0xde,
+ 0xff, 0xff, 0xfc, 0x84, 0x10, 0x49, 0xdf, 0xff,
+ 0xfe, 0xde, 0xff, 0xff, 0xff, 0xd9, 0x41, 0x0,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xc8, 0x41,
+ 0x0, 0x0, 0x0, 0x15, 0xae, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x62, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xc8, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x46, 0x63, 0x10, 0x0, 0x0, 0x0,
+
+ /* U+F077 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x25, 0x77, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd9, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x12,
+ 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff, 0xd9, 0x41,
+ 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff, 0xd9,
+ 0x41, 0x0, 0x0, 0x16, 0xbf, 0xff, 0xfd, 0x94,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x6b,
+ 0xef, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x25, 0x77,
+ 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x25, 0x77, 0x41, 0x0,
+
+ /* U+F078 "" */
+ 0x0, 0x0, 0x25, 0x77, 0x41, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x77,
+ 0x41, 0x0, 0x0, 0x16, 0xbf, 0xff, 0xfd, 0x94,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x6b,
+ 0xef, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x26, 0xbe,
+ 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0, 0x26,
+ 0xbe, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x12,
+ 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xd9, 0x41, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x6b, 0xef, 0xff, 0xfd, 0x94, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x25, 0x76, 0x41, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F079 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x38, 0xcf, 0xff,
+ 0xc8, 0x30, 0x0, 0x3, 0x57, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x76, 0x52, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x38, 0xcf, 0xff,
+ 0xff, 0xff, 0xff, 0xc8, 0x32, 0x5a, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x93,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xaf, 0xff,
+ 0xcc, 0xcf, 0xfe, 0xcc, 0xdf, 0xff, 0xa4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xef,
+ 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x45, 0x31, 0x49, 0xef, 0xe9, 0x41, 0x35, 0x42,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0x9e, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0x9e, 0xfe, 0x94, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0xef, 0xe9, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xef, 0xe9,
+ 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x7b, 0xb9, 0x55, 0x9e, 0xfe, 0x95, 0x59, 0xbb,
+ 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9e,
+ 0xff, 0xc9, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76,
+ 0x53, 0x36, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0xb6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x38, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xd7, 0x20, 0x37, 0xbe, 0xff, 0xff,
+ 0xfe, 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26,
+ 0xac, 0xa6, 0x30, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F07B "" */
+ 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0xa6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb,
+ 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x77, 0x64,
+ 0x10, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0x0, 0x0,
+ 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5,
+ 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0,
+ 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xeb, 0x62, 0x0,
+
+ /* U+F093 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x44, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0xce, 0xff,
+ 0xec, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x7c, 0xef, 0xff, 0xff, 0xff, 0xfe, 0xc7,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x37, 0xce, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x73, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x39, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x93, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x8d, 0xff, 0xff, 0xff, 0xd8, 0x30, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8d, 0xff,
+ 0xff, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x8d, 0xff, 0xff, 0xff, 0xd8,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x23, 0x33, 0x33, 0x33, 0x32, 0x13,
+ 0x8d, 0xff, 0xff, 0xff, 0xd8, 0x31, 0x23, 0x33,
+ 0x33, 0x33, 0x32, 0x10, 0x0, 0x0, 0x4a, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x94, 0x36, 0x99, 0x99,
+ 0x99, 0x63, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xa4, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0xca, 0x99, 0x99, 0x99, 0xac, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
+ 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe9, 0x56, 0xbc, 0x75,
+ 0x8d, 0xff, 0xa5, 0x0, 0x0, 0x25, 0x9a, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0x52,
+ 0x0,
+
+ /* U+F095 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x76,
+ 0x53, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x27, 0xcf, 0xff, 0xff, 0xff, 0xfe,
+ 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x9e,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0x93, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x5a, 0xdf, 0xff, 0xff, 0xff, 0xe9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
+ 0xef, 0xff, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x27, 0xcf, 0xff, 0xff, 0xd7,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x11, 0x0, 0x0, 0x0, 0x0, 0x1, 0x49,
+ 0xdf, 0xff, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x13, 0x58, 0xac, 0xef, 0xfe, 0xb5,
+ 0x10, 0x1, 0x36, 0xad, 0xff, 0xff, 0xff, 0xc7,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0xce, 0xff,
+ 0xff, 0xff, 0xfc, 0x94, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x17, 0xcf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xa6, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed,
+ 0xb9, 0x63, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x77,
+ 0x76, 0x65, 0x43, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F0C4 "" */
+ 0x0, 0x0, 0x2, 0x57, 0x89, 0x98, 0x63, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x23, 0x32,
+ 0x10, 0x0, 0x0, 0x15, 0xae, 0xff, 0xff, 0xff,
+ 0xff, 0xd7, 0x20, 0x0, 0x0, 0x1, 0x48, 0xcf,
+ 0xff, 0xff, 0xea, 0x50, 0x0, 0x49, 0xff, 0xe9,
+ 0x40, 0x17, 0xcf, 0xfc, 0x71, 0x0, 0x14, 0x8c,
+ 0xff, 0xff, 0xff, 0xd9, 0x51, 0x0, 0x0, 0x17,
+ 0xcf, 0xff, 0xdb, 0xce, 0xff, 0xfd, 0x84, 0x48,
+ 0xcf, 0xff, 0xff, 0xfd, 0x95, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x14, 0x8a, 0xcd, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xd9, 0x51, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0x9e, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x57,
+ 0x89, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xb6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15,
+ 0xae, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa7, 0x8b,
+ 0xef, 0xff, 0xff, 0xeb, 0x62, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0xff, 0xe9, 0x40, 0x17, 0xcf, 0xfc,
+ 0x71, 0x0, 0x27, 0xbe, 0xff, 0xff, 0xfe, 0xb6,
+ 0x20, 0x0, 0x0, 0x17, 0xcf, 0xff, 0xdb, 0xce,
+ 0xff, 0xe9, 0x40, 0x0, 0x0, 0x2, 0x6b, 0xef,
+ 0xff, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x14, 0x8a,
+ 0xcc, 0xcb, 0x96, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x13, 0x56, 0x66, 0x41, 0x0,
+
+ /* U+F0C5 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x31, 0x12, 0x21, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x49,
+ 0xed, 0x94, 0x10, 0x0, 0x0, 0x1, 0x23, 0x44,
+ 0x32, 0x15, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xa5, 0x49, 0xef, 0xfe, 0xc7, 0x20, 0x0, 0x4a,
+ 0xff, 0xff, 0xe9, 0x45, 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xec, 0x98, 0x88, 0x88, 0x85, 0x20,
+ 0x0, 0x5a, 0xff, 0xff, 0xe9, 0x45, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfa, 0x50, 0x0, 0x5a, 0xff, 0xff, 0xe9, 0x45,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5a, 0xff, 0xff,
+ 0xe9, 0x45, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5a,
+ 0xff, 0xff, 0xe9, 0x45, 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50,
+ 0x0, 0x5a, 0xff, 0xff, 0xe9, 0x45, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfa, 0x50, 0x0, 0x5a, 0xff, 0xff, 0xe9, 0x45,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfa, 0x40, 0x0, 0x5a, 0xff, 0xff,
+ 0xfd, 0x95, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x43, 0x21, 0x0, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x14, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x76, 0x31, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+F0C7 "" */
+ 0x0, 0x2, 0x47, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x87, 0x52, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xb6, 0x20, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x6b, 0xff, 0xff, 0xeb, 0x62, 0x0, 0x0, 0x5a,
+ 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6b, 0xff, 0xff, 0xff, 0xe9, 0x30,
+ 0x0, 0x5a, 0xff, 0xeb, 0x97, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0xad, 0xff, 0xff, 0xff,
+ 0xf9, 0x40, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf9, 0x40, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xd9, 0x42, 0x12, 0x5a, 0xdf,
+ 0xff, 0xff, 0xff, 0xff, 0xf9, 0x40, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0,
+ 0x3, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x40,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x94,
+ 0x0, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff,
+ 0xf9, 0x40, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0xca, 0x9a, 0xce, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf9, 0x40, 0x0, 0x16, 0xad, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xed, 0x95, 0x10,
+
+ /* U+F0E7 "" */
+ 0x0, 0x0, 0x15, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xa8, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xb6, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xc6, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0xb6, 0x10, 0x3, 0x8e, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6,
+ 0x10, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x27, 0xcf, 0xff, 0xff,
+ 0xe9, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xaf, 0xff, 0xfe, 0xa5, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8e,
+ 0xff, 0xfc, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x7c, 0xff, 0xd8, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5a, 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F0EA "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x8a, 0xa8,
+ 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x38, 0xef, 0xff, 0xff, 0xff,
+ 0xb8, 0x8c, 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xb8, 0x8c, 0xff, 0xff, 0xff, 0xff,
+ 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdc, 0xbb, 0xbb,
+ 0xbb, 0xba, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xfc, 0x74, 0x58,
+ 0x99, 0x99, 0x99, 0x99, 0x52, 0x25, 0x64, 0x10,
+ 0x0, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xfa,
+ 0x55, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x94, 0x4a,
+ 0xff, 0xda, 0x52, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xfa, 0x55, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xa5, 0x23, 0x56, 0x66, 0x53, 0x10, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xfa, 0x55, 0xbf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40,
+ 0x0, 0x5a, 0xff, 0xff, 0xff, 0xfa, 0x55, 0xbf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf9, 0x40, 0x0, 0x49, 0xef, 0xff, 0xff, 0xfa,
+ 0x55, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf9, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x31, 0x0,
+
+ /* U+F0F3 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x14, 0x65, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0x9d, 0xff, 0xb6, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x26, 0xad, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xc9, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0xdf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0,
+ 0x0, 0x2, 0x6b, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x93, 0x0, 0x0, 0x39, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfb, 0x61, 0x0, 0x1, 0x23, 0x34,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x43, 0x21, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x7c, 0xff, 0xff,
+ 0xfe, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x46, 0x76, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+F11C "" */
+ 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x84, 0x0, 0x5,
+ 0xaf, 0xfe, 0xc9, 0x88, 0xad, 0xeb, 0x88, 0x8b,
+ 0xed, 0xa8, 0x8b, 0xee, 0xb8, 0x88, 0x8b, 0xee,
+ 0xb8, 0x8a, 0xdf, 0xfd, 0x72, 0x0, 0x5a, 0xff,
+ 0xd8, 0x30, 0x5, 0xbc, 0x71, 0x1, 0x7c, 0xb5,
+ 0x1, 0x6b, 0xb6, 0x0, 0x0, 0x6b, 0xb6, 0x10,
+ 0x5b, 0xff, 0xd8, 0x20, 0x5, 0xaf, 0xff, 0xff,
+ 0xfe, 0xdc, 0xcd, 0xef, 0xed, 0xcc, 0xde, 0xed,
+ 0xcc, 0xce, 0xff, 0xec, 0xcc, 0xef, 0xff, 0xff,
+ 0xfd, 0x82, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xa4,
+ 0x0, 0x38, 0xc8, 0x30, 0x5, 0xaa, 0x40, 0x2,
+ 0x7d, 0xd7, 0x20, 0x27, 0xcf, 0xff, 0xff, 0xd8,
+ 0x20, 0x5, 0xaf, 0xff, 0xff, 0xfe, 0xdc, 0xcd,
+ 0xef, 0xed, 0xcc, 0xde, 0xed, 0xcc, 0xce, 0xff,
+ 0xec, 0xcc, 0xef, 0xff, 0xff, 0xfd, 0x82, 0x0,
+ 0x5a, 0xff, 0xd8, 0x30, 0x5, 0xbc, 0x71, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b,
+ 0xb6, 0x10, 0x5b, 0xff, 0xd8, 0x20, 0x5, 0xaf,
+ 0xfe, 0xc9, 0x88, 0xad, 0xeb, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x8b, 0xde, 0xb8,
+ 0x8a, 0xdf, 0xfd, 0x72, 0x0, 0x26, 0xbe, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x84, 0x0,
+
+ /* U+F124 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x24, 0x66, 0x53, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x35, 0x8a, 0xde, 0xff, 0xff, 0xfe,
+ 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x47, 0x9c, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfb, 0x61, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x68, 0xad,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0x93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24,
+ 0x79, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x20, 0x0,
+ 0x0, 0x0, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x0, 0x38,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x83, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x33, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x9d, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xea, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6c, 0xff,
+ 0xff, 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x6c, 0xff, 0xff, 0xff, 0xb5,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x6b, 0xff, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x46, 0x64,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F15B "" */
+ 0x0, 0x26, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xba, 0x62, 0x36, 0x74, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xe9, 0x45, 0xaf, 0xfd, 0x94, 0x10, 0x0,
+ 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x94, 0x5a, 0xff, 0xff, 0xfd, 0x94,
+ 0x10, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfa, 0x52, 0x34, 0x44, 0x44, 0x44,
+ 0x31, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x2,
+ 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x31, 0x0, 0x0,
+
+ /* U+F1EB "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x35, 0x67, 0x99, 0xab, 0xbb, 0xcb, 0xbb,
+ 0xa9, 0x97, 0x65, 0x31, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25,
+ 0x8b, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x85,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x7b,
+ 0xef, 0xff, 0xff, 0xfe, 0xca, 0x87, 0x54, 0x33,
+ 0x22, 0x22, 0x23, 0x34, 0x57, 0x8a, 0xce, 0xff,
+ 0xff, 0xff, 0xeb, 0x73, 0x10, 0x0, 0x0, 0x28,
+ 0xdf, 0xff, 0xfd, 0xa7, 0x31, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x37, 0xad, 0xff, 0xff, 0xd8, 0x30, 0x0,
+ 0x0, 0x2, 0x57, 0x63, 0x0, 0x0, 0x1, 0x25,
+ 0x79, 0xbc, 0xde, 0xff, 0xff, 0xfe, 0xdc, 0xb9,
+ 0x75, 0x21, 0x0, 0x0, 0x3, 0x57, 0x52, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x8c,
+ 0xef, 0xff, 0xff, 0xff, 0xfe, 0xee, 0xee, 0xff,
+ 0xff, 0xff, 0xff, 0xec, 0x84, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x6b, 0xef, 0xfc, 0x96, 0x42, 0x10, 0x0, 0x0,
+ 0x0, 0x12, 0x46, 0x9c, 0xef, 0xeb, 0x62, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x21, 0x0, 0x0, 0x0, 0x0,
+ 0x11, 0x10, 0x0, 0x0, 0x0, 0x1, 0x21, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x5a, 0xef, 0xff, 0xea, 0x51, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0xff, 0xff, 0xff, 0xf9, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x26, 0xac, 0xdc, 0xa6, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+F240 "" */
+ 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
+ 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x32,
+ 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x21, 0x49,
+ 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
+ 0x84, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
+ 0x52, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
+ 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xa5, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
+ 0x5, 0xaf, 0xfd, 0x83, 0x59, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xc8, 0x43, 0x8e, 0xff, 0xff, 0xa5,
+ 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
+ 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F241 "" */
+ 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
+ 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x32,
+ 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x43, 0x21, 0x0, 0x0, 0x0, 0x49,
+ 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
+ 0x84, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xc6, 0x10, 0x0, 0x0,
+ 0x2, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
+ 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x61, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
+ 0x5, 0xaf, 0xfd, 0x83, 0x59, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x95,
+ 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xa5,
+ 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
+ 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F242 "" */
+ 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
+ 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x32,
+ 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x32,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
+ 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
+ 0x84, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
+ 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
+ 0x5, 0xaf, 0xfd, 0x83, 0x59, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xca, 0x62, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xa5,
+ 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
+ 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F243 "" */
+ 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
+ 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x32,
+ 0x34, 0x44, 0x44, 0x43, 0x21, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
+ 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
+ 0x84, 0x6c, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
+ 0xff, 0xd8, 0x46, 0xcf, 0xff, 0xff, 0xfe, 0x94,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
+ 0x5, 0xaf, 0xfd, 0x83, 0x59, 0xcc, 0xcc, 0xcc,
+ 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xa5,
+ 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
+ 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F244 "" */
+ 0x0, 0x1, 0x35, 0x67, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x20, 0x0,
+ 0x0, 0x0, 0x4, 0x9f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x83, 0x0, 0x0, 0x0, 0x5a, 0xff, 0xd8, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49,
+ 0xef, 0xff, 0xd8, 0x30, 0x0, 0x5, 0xaf, 0xfd,
+ 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x59, 0xce, 0xff, 0xa5, 0x0, 0x0, 0x5a,
+ 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xdf, 0xfa, 0x50, 0x0,
+ 0x5, 0xaf, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xa5,
+ 0x0, 0x0, 0x5a, 0xff, 0xeb, 0x87, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x9c, 0xff, 0xfc,
+ 0x94, 0x10, 0x0, 0x2, 0x6c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xea, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F287 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x12, 0x33, 0x59, 0xdf,
+ 0xfe, 0xb6, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x15, 0xad, 0xca, 0x9b,
+ 0xdf, 0xff, 0xfe, 0x93, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x11, 0x10, 0x0, 0x0, 0x0, 0x38, 0xdb, 0x51,
+ 0x0, 0x1, 0x24, 0x54, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0x9d, 0xff, 0xff, 0xd9, 0x41, 0x1, 0x6b, 0xd8,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x6a, 0xb8, 0x52, 0x0, 0x0, 0x0,
+ 0x4, 0xaf, 0xff, 0xff, 0xff, 0xfe, 0xed, 0xee,
+ 0xee, 0xee, 0xee, 0xed, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xde, 0xff, 0xff, 0xfc, 0x72,
+ 0x0, 0x0, 0x4, 0x9d, 0xff, 0xff, 0xd9, 0x41,
+ 0x0, 0x0, 0x0, 0x16, 0xbd, 0x83, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x6a, 0xb8, 0x52,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c, 0xb6,
+ 0x10, 0x3, 0x57, 0x77, 0x77, 0x42, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x49, 0xcc, 0xba, 0xce, 0xff, 0xff, 0xfb, 0x60,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x12, 0x49, 0xdf, 0xff, 0xff,
+ 0xb5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F293 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x23, 0x34,
+ 0x43, 0x32, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0x6a, 0xde, 0xff, 0xfe,
+ 0xee, 0xff, 0xff, 0xed, 0xa5, 0x20, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x4a, 0xef, 0xff, 0xff, 0xff,
+ 0xa5, 0x37, 0xcf, 0xff, 0xff, 0xfd, 0x93, 0x0,
+ 0x0, 0x0, 0x1, 0x7c, 0xff, 0xff, 0xff, 0xff,
+ 0xfa, 0x40, 0x1, 0x48, 0xdf, 0xff, 0xff, 0xa5,
+ 0x0, 0x0, 0x0, 0x5b, 0xff, 0xfd, 0x84, 0x59,
+ 0xdf, 0xa4, 0x27, 0xa8, 0x42, 0x5b, 0xff, 0xfe,
+ 0x83, 0x0, 0x0, 0x28, 0xdf, 0xff, 0xff, 0xc7,
+ 0x32, 0x44, 0x21, 0x34, 0x33, 0x7c, 0xff, 0xff,
+ 0xfa, 0x50, 0x0, 0x3, 0x8e, 0xff, 0xff, 0xff,
+ 0xff, 0xc6, 0x20, 0x1, 0x5a, 0xef, 0xff, 0xff,
+ 0xff, 0xb6, 0x0, 0x0, 0x38, 0xef, 0xff, 0xff,
+ 0xfe, 0xb6, 0x20, 0x0, 0x1, 0x49, 0xdf, 0xff,
+ 0xff, 0xfb, 0x60, 0x0, 0x2, 0x7c, 0xff, 0xfe,
+ 0xb6, 0x22, 0x59, 0x84, 0x26, 0x97, 0x32, 0x5a,
+ 0xef, 0xff, 0xa5, 0x0, 0x0, 0x4, 0x9f, 0xff,
+ 0xec, 0xab, 0xdf, 0xfa, 0x41, 0x46, 0x42, 0x59,
+ 0xdf, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x4, 0x9e,
+ 0xff, 0xff, 0xff, 0xff, 0xa4, 0x1, 0x5a, 0xdf,
+ 0xff, 0xff, 0xd8, 0x20, 0x0, 0x0, 0x0, 0x1,
+ 0x49, 0xdf, 0xff, 0xff, 0xfb, 0xaa, 0xdf, 0xff,
+ 0xff, 0xfd, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x24, 0x68, 0x9a, 0xab, 0xbb, 0xa9,
+ 0x87, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F2ED "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x67,
+ 0x88, 0x88, 0x87, 0x75, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x37, 0xbb, 0xcc, 0xcc, 0xcc,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xcc,
+ 0xcc, 0xcc, 0xb9, 0x51, 0x0, 0x37, 0xbb, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xb9, 0x51, 0x0, 0x0,
+ 0x24, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x30, 0x0,
+ 0x0, 0x0, 0x49, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
+ 0x61, 0x0, 0x0, 0x0, 0x49, 0xef, 0xff, 0xa5,
+ 0x5a, 0xff, 0xe9, 0x56, 0xbf, 0xfd, 0x85, 0x8d,
+ 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x49, 0xef,
+ 0xff, 0xa4, 0x4a, 0xff, 0xe8, 0x46, 0xbf, 0xfc,
+ 0x74, 0x7c, 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0,
+ 0x49, 0xef, 0xff, 0xa4, 0x4a, 0xff, 0xe8, 0x46,
+ 0xbf, 0xfc, 0x74, 0x7c, 0xff, 0xfc, 0x61, 0x0,
+ 0x0, 0x0, 0x49, 0xef, 0xff, 0xa4, 0x4a, 0xff,
+ 0xe8, 0x46, 0xbf, 0xfc, 0x74, 0x7c, 0xff, 0xfc,
+ 0x61, 0x0, 0x0, 0x0, 0x49, 0xef, 0xff, 0xa4,
+ 0x4a, 0xff, 0xe8, 0x46, 0xbf, 0xfc, 0x74, 0x7c,
+ 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x49, 0xef,
+ 0xff, 0xa5, 0x5a, 0xff, 0xe9, 0x56, 0xbf, 0xfd,
+ 0x85, 0x8d, 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0,
+ 0x38, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x60, 0x0,
+ 0x0, 0x0, 0x1, 0x36, 0x77, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x76, 0x42,
+ 0x0, 0x0,
+
+ /* U+F304 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x67,
+ 0x63, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x5a, 0xef, 0xff, 0xff, 0xd9, 0x41,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x25, 0x9d,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x5a, 0xef, 0xda, 0x53, 0x5a, 0xdf, 0xff,
+ 0xff, 0xfd, 0x82, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x25, 0xae, 0xff, 0xff,
+ 0xff, 0xfd, 0xa5, 0x35, 0xad, 0xda, 0x52, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x5a, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x25, 0xae, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xea, 0x52, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x5a,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xa5, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x25, 0xae, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xea, 0x52, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xbf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa5,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xea, 0x52, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4a, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa5, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x67, 0x76,
+ 0x55, 0x44, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F55A "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0x9c,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x84,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0xad,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x15, 0xad,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x94, 0x1,
+ 0x49, 0xdf, 0xfd, 0x94, 0x10, 0x39, 0xdf, 0xff,
+ 0xff, 0xff, 0xfa, 0x50, 0x0, 0x0, 0x15, 0xad,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x94, 0x10, 0x1, 0x22, 0x10, 0x1, 0x49, 0xdf,
+ 0xff, 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x39,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfb, 0x61, 0x0, 0x0, 0x15, 0xbf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0,
+ 0x0, 0x15, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x94, 0x10, 0x1, 0x33, 0x10,
+ 0x1, 0x49, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xa5,
+ 0x0, 0x0, 0x0, 0x0, 0x15, 0xad, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfd, 0x94, 0x11, 0x49, 0xdf,
+ 0xfd, 0x94, 0x10, 0x49, 0xdf, 0xff, 0xff, 0xff,
+ 0xfa, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15,
+ 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x14, 0x9c, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xec, 0x84, 0x0, 0x0,
+
+ /* U+F7C2 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x67, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x77, 0x64, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x25, 0xad, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x83,
+ 0x0, 0x0, 0x0, 0x26, 0xbe, 0xff, 0xa4, 0x0,
+ 0x5b, 0xb6, 0x3, 0x9b, 0x72, 0x28, 0xdf, 0xfa,
+ 0x50, 0x0, 0x4, 0x9e, 0xff, 0xff, 0xfa, 0x40,
+ 0x5, 0xbb, 0x60, 0x39, 0xb7, 0x22, 0x8d, 0xff,
+ 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfa, 0x50, 0x0, 0x5, 0xaf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xa5, 0x0, 0x0, 0x5a, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0, 0x2, 0x6c,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0x62, 0x0, 0x0, 0x0,
+ 0x1, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x31, 0x0, 0x0, 0x0,
+
+ /* U+F8A2 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x12, 0x21, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x48, 0xdf,
+ 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x6a,
+ 0xc9, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x27, 0xdf, 0xff, 0xb6, 0x0, 0x0,
+ 0x0, 0x0, 0x37, 0xce, 0xff, 0xfc, 0x72, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28,
+ 0xdf, 0xff, 0xb6, 0x0, 0x0, 0x3, 0x8c, 0xff,
+ 0xff, 0xff, 0xff, 0xed, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xff, 0xff, 0xb6,
+ 0x0, 0x0, 0x16, 0xbe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xa4, 0x0, 0x0, 0x0,
+ 0x2, 0x6b, 0xef, 0xff, 0xfc, 0x72, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15,
+ 0xad, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0
+};
+
+
+/*---------------------
+ * GLYPH DESCRIPTION
+ *--------------------*/
+
+static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
+ {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 48, .box_w = 6, .box_h = 0, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 0, .adv_w = 49, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 41, .adv_w = 61, .box_w = 12, .box_h = 4, .ofs_x = 0, .ofs_y = 6},
+ {.bitmap_index = 65, .adv_w = 120, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 173, .adv_w = 108, .box_w = 21, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 299, .adv_w = 141, .box_w = 27, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 421, .adv_w = 119, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 529, .adv_w = 33, .box_w = 6, .box_h = 4, .ofs_x = 0, .ofs_y = 6},
+ {.bitmap_index = 541, .adv_w = 66, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 646, .adv_w = 67, .box_w = 15, .box_h = 14, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 751, .adv_w = 83, .box_w = 21, .box_h = 6, .ofs_x = -1, .ofs_y = 3},
+ {.bitmap_index = 814, .adv_w = 109, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 888, .adv_w = 38, .box_w = 12, .box_h = 4, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 912, .adv_w = 53, .box_w = 15, .box_h = 1, .ofs_x = -1, .ofs_y = 3},
+ {.bitmap_index = 920, .adv_w = 51, .box_w = 9, .box_h = 2, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 929, .adv_w = 79, .box_w = 18, .box_h = 10, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 1019, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1114, .adv_w = 108, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1182, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1277, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1372, .adv_w = 108, .box_w = 24, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 1480, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1575, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1670, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1765, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1860, .adv_w = 108, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1955, .adv_w = 47, .box_w = 9, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1987, .adv_w = 41, .box_w = 12, .box_h = 9, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 2041, .adv_w = 98, .box_w = 18, .box_h = 6, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 2095, .adv_w = 105, .box_w = 21, .box_h = 5, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 2148, .adv_w = 100, .box_w = 21, .box_h = 6, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 2211, .adv_w = 91, .box_w = 18, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2292, .adv_w = 172, .box_w = 33, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 2490, .adv_w = 125, .box_w = 27, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 2612, .adv_w = 120, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2720, .adv_w = 125, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2828, .adv_w = 126, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2936, .adv_w = 109, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3031, .adv_w = 106, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3126, .adv_w = 131, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3234, .adv_w = 137, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3342, .adv_w = 52, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3383, .adv_w = 106, .box_w = 24, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 3491, .adv_w = 120, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3599, .adv_w = 103, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3694, .adv_w = 168, .box_w = 30, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3829, .adv_w = 137, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3937, .adv_w = 132, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4045, .adv_w = 121, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4153, .adv_w = 132, .box_w = 24, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 4285, .adv_w = 118, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4393, .adv_w = 114, .box_w = 21, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4488, .adv_w = 115, .box_w = 27, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 4610, .adv_w = 125, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4718, .adv_w = 122, .box_w = 27, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 4840, .adv_w = 170, .box_w = 33, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4989, .adv_w = 120, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5097, .adv_w = 115, .box_w = 27, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 5219, .adv_w = 115, .box_w = 24, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5327, .adv_w = 51, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5405, .adv_w = 79, .box_w = 21, .box_h = 10, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 5510, .adv_w = 51, .box_w = 12, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 5588, .adv_w = 80, .box_w = 15, .box_h = 5, .ofs_x = 0, .ofs_y = 5},
+ {.bitmap_index = 5626, .adv_w = 87, .box_w = 21, .box_h = 1, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 5637, .adv_w = 59, .box_w = 12, .box_h = 2, .ofs_x = 0, .ofs_y = 8},
+ {.bitmap_index = 5649, .adv_w = 104, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5723, .adv_w = 108, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5828, .adv_w = 101, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5902, .adv_w = 108, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6007, .adv_w = 102, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6081, .adv_w = 67, .box_w = 15, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6156, .adv_w = 108, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 6261, .adv_w = 106, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6366, .adv_w = 47, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6407, .adv_w = 46, .box_w = 12, .box_h = 12, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 6479, .adv_w = 97, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6584, .adv_w = 47, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6629, .adv_w = 168, .box_w = 33, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6745, .adv_w = 106, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6819, .adv_w = 110, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6893, .adv_w = 108, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 6998, .adv_w = 109, .box_w = 21, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 7103, .adv_w = 65, .box_w = 15, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7156, .adv_w = 99, .box_w = 18, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7219, .adv_w = 63, .box_w = 15, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 7287, .adv_w = 106, .box_w = 21, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7361, .adv_w = 93, .box_w = 21, .box_h = 7, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 7435, .adv_w = 144, .box_w = 33, .box_h = 7, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 7551, .adv_w = 95, .box_w = 24, .box_h = 7, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 7635, .adv_w = 91, .box_w = 21, .box_h = 10, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 7740, .adv_w = 95, .box_w = 18, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7803, .adv_w = 65, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 7901, .adv_w = 47, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 7951, .adv_w = 65, .box_w = 15, .box_h = 13, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 8049, .adv_w = 131, .box_w = 24, .box_h = 4, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 8097, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 8370, .adv_w = 192, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 8559, .adv_w = 192, .box_w = 42, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 8790, .adv_w = 192, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 8979, .adv_w = 132, .box_w = 30, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 9114, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 9387, .adv_w = 192, .box_w = 36, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 9621, .adv_w = 216, .box_w = 45, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 9869, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 10142, .adv_w = 216, .box_w = 45, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 10345, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 10618, .adv_w = 96, .box_w = 24, .box_h = 10, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 10738, .adv_w = 144, .box_w = 33, .box_h = 10, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 10903, .adv_w = 216, .box_w = 45, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 11196, .adv_w = 192, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 11385, .adv_w = 168, .box_w = 27, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11547, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 11781, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 11979, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 12177, .adv_w = 168, .box_w = 27, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12339, .adv_w = 168, .box_w = 39, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 12554, .adv_w = 120, .box_w = 24, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 12686, .adv_w = 120, .box_w = 24, .box_h = 11, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 12818, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 13016, .adv_w = 168, .box_w = 36, .box_h = 3, .ofs_x = -1, .ofs_y = 3},
+ {.bitmap_index = 13070, .adv_w = 216, .box_w = 45, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 13273, .adv_w = 240, .box_w = 51, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 13605, .adv_w = 216, .box_w = 45, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 13898, .adv_w = 192, .box_w = 42, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 14129, .adv_w = 168, .box_w = 36, .box_h = 7, .ofs_x = -1, .ofs_y = 1},
+ {.bitmap_index = 14255, .adv_w = 168, .box_w = 36, .box_h = 7, .ofs_x = -1, .ofs_y = 1},
+ {.bitmap_index = 14381, .adv_w = 240, .box_w = 51, .box_h = 10, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 14636, .adv_w = 192, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 14825, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 15098, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 15371, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 15569, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 15803, .adv_w = 168, .box_w = 36, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 16001, .adv_w = 120, .box_w = 27, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 16177, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 16411, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 16645, .adv_w = 216, .box_w = 45, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 16848, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 17121, .adv_w = 144, .box_w = 33, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 17336, .adv_w = 240, .box_w = 51, .box_h = 12, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 17642, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 17872, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 18102, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 18332, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 18562, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 18792, .adv_w = 240, .box_w = 51, .box_h = 11, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 19073, .adv_w = 168, .box_w = 33, .box_h = 13, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 19288, .adv_w = 168, .box_w = 36, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 19522, .adv_w = 192, .box_w = 42, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 19795, .adv_w = 240, .box_w = 51, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
+ {.bitmap_index = 20025, .adv_w = 144, .box_w = 33, .box_h = 13, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 20240, .adv_w = 193, .box_w = 42, .box_h = 9, .ofs_x = -1, .ofs_y = 0}
+};
+
+/*---------------------
+ * CHARACTER MAPPING
+ *--------------------*/
+
+static const uint16_t unicode_list_1[] = {
+ 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
+ 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
+ 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
+ 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
+ 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
+ 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
+ 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
+ 0x8a1
+};
+
+/*Collect the unicode lists and glyph_id offsets*/
+static const lv_font_fmt_txt_cmap_t cmaps[] =
+{
+ {
+ .range_start = 32, .range_length = 95, .glyph_id_start = 1,
+ .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
+ },
+ {
+ .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
+ .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
+ }
+};
+
+/*-----------------
+ * KERNING
+ *----------------*/
+
+
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] =
+{
+ 0, 1, 0, 2, 0, 0, 0, 0,
+ 2, 3, 0, 0, 0, 4, 0, 4,
+ 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 7, 8, 9, 10, 11,
+ 0, 12, 12, 13, 14, 15, 12, 12,
+ 9, 16, 17, 18, 0, 19, 13, 20,
+ 21, 22, 23, 24, 25, 0, 0, 0,
+ 0, 0, 26, 27, 28, 0, 29, 30,
+ 0, 31, 0, 0, 32, 0, 31, 31,
+ 33, 27, 0, 34, 0, 35, 0, 36,
+ 37, 38, 36, 39, 40, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
+};
+
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] =
+{
+ 0, 1, 0, 2, 0, 0, 0, 3,
+ 2, 0, 4, 5, 0, 6, 7, 6,
+ 8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 10, 0, 11, 0, 0, 0,
+ 11, 0, 0, 12, 0, 0, 0, 0,
+ 11, 0, 11, 0, 13, 14, 15, 16,
+ 17, 18, 19, 20, 0, 0, 21, 0,
+ 0, 0, 22, 0, 23, 23, 23, 24,
+ 23, 0, 0, 0, 0, 0, 25, 25,
+ 26, 25, 23, 27, 28, 29, 30, 31,
+ 32, 33, 31, 34, 0, 0, 35, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
+};
+
+/*Kern values between classes*/
+static const int8_t kern_class_values[] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -10, 0, 0, 0,
+ 0, 0, 0, 0, -11, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -5, -6, 0, -2, -6, 0, -7, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -16, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -21, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -11, 0, 0, 0, 0, 0, 0, -6,
+ 0, -1, 0, 0, -12, -2, -8, -6,
+ 0, -9, 0, 0, 0, 0, 0, 0,
+ -1, 0, 0, -2, -1, -5, -3, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3,
+ 0, -2, 0, 0, -5, 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, 0,
+ 0, 0, -3, 0, 0, 0, 0, 0,
+ 0, -1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -2,
+ 0, 0, 0, 0, 0, -10, 0, 0,
+ 0, -2, 0, 0, 0, -3, 0, -2,
+ 0, -2, -4, -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,
+ 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, -2, -2, 0, -2, 0, 0, 0,
+ -2, -2, -2, 0, 0, 0, 0, 0,
+ 0, 0, 0, -22, 0, 0, 0, -16,
+ 0, -25, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, -3, -2, 0, 0, -2,
+ -2, 0, 0, -2, -2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, -3, 0,
+ 0, 0, 2, -3, 0, 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, 0, 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, 0,
+ 0, -3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -2, 0, -2,
+ -3, 0, 0, 0, -2, -4, -6, 0,
+ 0, 0, 0, -31, 0, 0, 0, 0,
+ 0, 0, 0, 2, -6, 0, 0, -26,
+ -5, -16, -13, 0, -22, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -4,
+ -12, -9, 0, 0, 0, 0, 0, 0,
+ 0, 0, -30, 0, 0, 0, -13, 0,
+ -19, 0, 0, 0, 0, 0, -3, 0,
+ -2, 0, -1, -1, 0, 0, -1, 0,
+ 0, 1, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -4, 0, -3,
+ -2, 0, -3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -7, 0, -2, 0, 0, -4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -4, 0,
+ 0, 0, 0, -20, -22, 0, 0, -7,
+ -3, -22, -1, 2, 0, 2, 1, 0,
+ 2, 0, 0, -11, -9, 0, -10, -9,
+ -7, -11, 0, -9, -7, -5, -7, -6,
+ 0, 0, 0, 0, 2, 0, -21, -3,
+ 0, 0, -7, -1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, -4, -4,
+ 0, 0, -4, -3, 0, 0, -3, -1,
+ 0, 0, 0, 2, 0, 0, 0, 1,
+ 0, -12, -6, 0, 0, -4, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0,
+ 1, -3, -3, 0, 0, -3, -2, 0,
+ 0, -2, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, -4, 0, 0,
+ 0, -2, 0, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, -2, 0, 0,
+ -2, 0, 0, 0, -2, -3, 0, 0,
+ 0, 0, 0, 0, -3, 2, -5, -20,
+ -5, 0, 0, -9, -3, -9, -1, 2,
+ -9, 2, 2, 1, 2, 0, 2, -7,
+ -6, -2, -4, -6, -4, -5, -2, -4,
+ -2, 0, -2, -3, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, -2,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -2, 0, 0, -2, 0,
+ 0, 0, -2, -3, -3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -2, 0, 0, -2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -6, 0, 0, 0,
+ 0, 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, 0, -3,
+ 0, 0, 0, 0, 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, -1, -1,
+ 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, 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, -1, 0, 0, 0, 0, 0,
+ 2, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, -2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, -10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 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, 0, 0, 0, 0, 0, 0,
+ 0, -13, 0, 0, 0, 0, 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,
+ -2, -1, 0, 0, 2, 0, 0, 0,
+ -12, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -4, -2, 1, 0, -2, 0, 0, 5,
+ 0, 2, 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, -2,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, -10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -1, -1,
+ 1, 0, -1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -12, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 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,
+ -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,
+ -1, 0, 0, -1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -2, 0, 0, -2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes =
+{
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 40,
+ .right_class_cnt = 35,
+};
+
+/*--------------------
+ * ALL CUSTOM DATA
+ *--------------------*/
+
+/*Store all the custom data of the font*/
+static lv_font_fmt_txt_dsc_t font_dsc = {
+ .glyph_bitmap = gylph_bitmap,
+ .glyph_dsc = glyph_dsc,
+ .cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
+ .cmap_num = 2,
+ .bpp = 4,
+ .kern_classes = 1,
+ .bitmap_format = 0
+};
+
+
+/*-----------------
+ * PUBLIC FONT
+ *----------------*/
+
+/*Initialize a public general font descriptor*/
+lv_font_t lv_font_roboto_12_subpx = {
+ .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
+ .line_height = 14, /*The maximum line height required by the font*/
+ .base_line = 3, /*Baseline measured from the bottom of the line*/
+ .subpx = LV_FONT_SUBPX_HOR,
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
+};
+
+#endif /*#if LV_FONT_ROBOTO_12_SUBPX*/
+
diff --git a/src/lv_font/lv_font_roboto_16.c b/src/lv_font/lv_font_roboto_16.c
index a0906bf49..a52b2c0dc 100644
--- a/src/lv_font/lv_font_roboto_16.c
+++ b/src/lv_font/lv_font_roboto_16.c
@@ -3,7 +3,7 @@
/*******************************************************************************
* Size: 16 px
* Bpp: 4
- * Opts:
+ * Opts: --no-compress --no-prefilter --bpp 4 --size 16 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_16.c --force-fast-kern-format
******************************************************************************/
#ifndef LV_FONT_ROBOTO_16
@@ -21,411 +21,417 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+20 " " */
/* U+21 "!" */
- 0x33, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
- 0x34, 0x0, 0x67, 0xcf,
+ 0xad, 0xac, 0xac, 0xac, 0xac, 0xac, 0x9b, 0x9b,
+ 0x56, 0x0, 0x57, 0x8c,
/* U+22 "\"" */
- 0x42, 0x23, 0xf8, 0x8f, 0xf8, 0x8f, 0xf3, 0x8a,
- 0xa0, 0x64,
+ 0xe2, 0xd4, 0xe2, 0xd3, 0xe0, 0xd2, 0xe0, 0xd1,
+ 0x0, 0x0,
/* U+23 "#" */
- 0x0, 0x0, 0x41, 0x4, 0x10, 0x0, 0x3, 0xf0,
- 0xf, 0x30, 0x0, 0x6, 0xd0, 0x4f, 0x0, 0x0,
- 0x9, 0xa0, 0x6c, 0x0, 0xc, 0xff, 0xff, 0xff,
- 0xf4, 0x0, 0xf, 0x40, 0xc6, 0x0, 0x0, 0x3f,
- 0x0, 0xf4, 0x0, 0x23, 0x7d, 0x35, 0xf3, 0x30,
- 0x6c, 0xee, 0xce, 0xfc, 0x90, 0x0, 0xc7, 0x9,
- 0xa0, 0x0, 0x0, 0xf4, 0xc, 0x70, 0x0, 0x2,
- 0xf0, 0xf, 0x40, 0x0,
+ 0x0, 0x1, 0xf0, 0xe, 0x30, 0x0, 0x4, 0xc0,
+ 0x2f, 0x0, 0x0, 0x8, 0x90, 0x5c, 0x0, 0xd,
+ 0xff, 0xff, 0xff, 0xf4, 0x1, 0x2e, 0x42, 0xc7,
+ 0x20, 0x0, 0x1f, 0x0, 0xe3, 0x0, 0x0, 0x4d,
+ 0x1, 0xf0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xa0,
+ 0x12, 0xb8, 0x28, 0xb2, 0x10, 0x0, 0xc4, 0xa,
+ 0x70, 0x0, 0x0, 0xf2, 0xc, 0x50, 0x0, 0x1,
+ 0xf0, 0xf, 0x20, 0x0,
/* U+24 "$" */
- 0x0, 0x3, 0x20, 0x0, 0x0, 0xc, 0x80, 0x0,
- 0x0, 0x5d, 0xa3, 0x0, 0xc, 0xfc, 0xef, 0x60,
- 0x6f, 0x40, 0x1c, 0xe0, 0x8f, 0x0, 0x7, 0xf2,
- 0x7f, 0x40, 0x0, 0x0, 0x1d, 0xf9, 0x30, 0x0,
- 0x1, 0x8e, 0xfb, 0x20, 0x0, 0x0, 0x6f, 0xd0,
- 0x42, 0x0, 0x6, 0xf4, 0xeb, 0x0, 0x5, 0xf4,
- 0x8f, 0x63, 0x4c, 0xe0, 0x19, 0xff, 0xfc, 0x30,
- 0x0, 0xf, 0x40, 0x0, 0x0, 0xc, 0x30, 0x0,
+ 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0xe, 0x40,
+ 0x0, 0x0, 0x2, 0xe6, 0x0, 0x0, 0xa, 0xff,
+ 0xfc, 0x10, 0x6, 0xf5, 0x4, 0xfa, 0x0, 0xac,
+ 0x0, 0x8, 0xe0, 0x9, 0xe0, 0x0, 0x26, 0x0,
+ 0x3f, 0xb3, 0x0, 0x0, 0x0, 0x3c, 0xfd, 0x50,
+ 0x0, 0x0, 0x3, 0xaf, 0x70, 0x1, 0x0, 0x0,
+ 0x9f, 0x0, 0xf6, 0x0, 0x5, 0xf1, 0xc, 0xd1,
+ 0x1, 0xce, 0x0, 0x3e, 0xfe, 0xfe, 0x40, 0x0,
+ 0x5, 0xf6, 0x10, 0x0, 0x0, 0xf, 0x20, 0x0,
/* U+25 "%" */
- 0x1, 0x67, 0x30, 0x0, 0x0, 0x0, 0xcb, 0x9f,
- 0x20, 0x1, 0x0, 0x2f, 0x0, 0xb8, 0x4, 0xf0,
- 0x3, 0xf0, 0xa, 0x80, 0xd5, 0x0, 0xe, 0x74,
- 0xe4, 0x8c, 0x0, 0x0, 0x2a, 0xc5, 0x2e, 0x20,
- 0x0, 0x0, 0x0, 0xb, 0x80, 0x10, 0x0, 0x0,
- 0x5, 0xd1, 0xcd, 0xf5, 0x0, 0x1, 0xd4, 0x8b,
- 0x5, 0xe0, 0x0, 0x99, 0xc, 0x80, 0xf, 0x0,
- 0x1e, 0x10, 0x8a, 0x5, 0xf0, 0x0, 0x0, 0x1,
- 0xdc, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0,
+ 0x5, 0xde, 0x80, 0x0, 0x0, 0x0, 0xf, 0x31,
+ 0xd4, 0x0, 0x70, 0x0, 0x2e, 0x0, 0x97, 0x8,
+ 0x90, 0x0, 0xf, 0x31, 0xd5, 0x2e, 0x10, 0x0,
+ 0x5, 0xde, 0x80, 0xb5, 0x0, 0x0, 0x0, 0x0,
+ 0x5, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x29,
+ 0xec, 0x20, 0x0, 0x0, 0x98, 0x6c, 0x17, 0xc0,
+ 0x0, 0x3, 0xe0, 0x97, 0x1, 0xf0, 0x0, 0xd,
+ 0x50, 0x97, 0x1, 0xf0, 0x0, 0x19, 0x0, 0x6c,
+ 0x7, 0xc0, 0x0, 0x0, 0x0, 0x9, 0xfc, 0x20,
/* U+26 "&" */
- 0x0, 0x16, 0x75, 0x0, 0x0, 0x1, 0xef, 0xcf,
- 0x90, 0x0, 0x6, 0xf2, 0x6, 0xf1, 0x0, 0x8,
- 0xf1, 0x6, 0xf0, 0x0, 0x2, 0xf8, 0x7e, 0x60,
- 0x0, 0x0, 0x9f, 0xf6, 0x0, 0x0, 0x3, 0xef,
- 0xe3, 0x0, 0x41, 0x2e, 0xb2, 0xdc, 0x11, 0xf4,
- 0x8f, 0x20, 0x3f, 0xb6, 0xf2, 0x6f, 0x20, 0x4,
- 0xff, 0xa0, 0x2f, 0xb3, 0x5, 0xef, 0x70, 0x3,
- 0xdf, 0xff, 0xaa, 0xf4, 0x0, 0x0, 0x20, 0x0,
- 0x0,
+ 0x0, 0x3c, 0xfc, 0x30, 0x0, 0x0, 0xeb, 0x4a,
+ 0xe0, 0x0, 0x3, 0xf3, 0x1, 0xf3, 0x0, 0x2,
+ 0xf5, 0x6, 0xf1, 0x0, 0x0, 0xbd, 0x8f, 0x50,
+ 0x0, 0x0, 0x3f, 0xf4, 0x0, 0x0, 0x3, 0xec,
+ 0xf8, 0x0, 0x71, 0xd, 0xc0, 0x7f, 0x42, 0xf1,
+ 0x2f, 0x40, 0xa, 0xf9, 0xe0, 0x1f, 0x60, 0x0,
+ 0xcf, 0x70, 0xa, 0xe4, 0x15, 0xef, 0xb0, 0x0,
+ 0x8d, 0xfe, 0x95, 0xf8,
/* U+27 "'" */
- 0x42, 0xf8, 0xf7, 0xf2, 0x70,
+ 0x3f, 0x3f, 0x3e, 0x2c,
/* U+28 "(" */
- 0x0, 0x7, 0x10, 0x9, 0xd1, 0x5, 0xf2, 0x0,
- 0xe8, 0x0, 0x4f, 0x30, 0xa, 0xe0, 0x0, 0xcc,
- 0x0, 0xe, 0xb0, 0x0, 0xf8, 0x0, 0xd, 0xc0,
- 0x0, 0xcc, 0x0, 0xa, 0xe0, 0x0, 0x3f, 0x30,
- 0x0, 0xca, 0x0, 0x3, 0xf3, 0x0, 0x6, 0xf1,
- 0x0, 0x5, 0x0,
+ 0x0, 0x2, 0x0, 0x3, 0xe1, 0x1, 0xe5, 0x0,
+ 0x9b, 0x0, 0x1f, 0x40, 0x6, 0xe0, 0x0, 0xab,
+ 0x0, 0xd, 0x90, 0x0, 0xe8, 0x0, 0xe, 0x70,
+ 0x0, 0xd8, 0x0, 0xc, 0xa0, 0x0, 0x8d, 0x0,
+ 0x3, 0xf1, 0x0, 0xd, 0x70, 0x0, 0x4e, 0x10,
+ 0x0, 0x9b, 0x0, 0x0, 0x80,
/* U+29 ")" */
- 0x81, 0x0, 0xa, 0xc1, 0x0, 0xd, 0x90, 0x0,
- 0x4f, 0x20, 0x0, 0xf9, 0x0, 0xa, 0xe0, 0x0,
- 0x8f, 0x0, 0x6, 0xf3, 0x0, 0x4f, 0x40, 0x6,
- 0xf2, 0x0, 0x8f, 0x0, 0xa, 0xe0, 0x0, 0xf7,
- 0x0, 0x5f, 0x20, 0x1d, 0x70, 0xa, 0xa0, 0x0,
- 0x50, 0x0, 0x0,
+ 0x20, 0x0, 0x8, 0xa0, 0x0, 0xd, 0x70, 0x0,
+ 0x4f, 0x10, 0x0, 0xd8, 0x0, 0x8, 0xe0, 0x0,
+ 0x4f, 0x20, 0x1, 0xf4, 0x0, 0xf, 0x60, 0x0,
+ 0xf6, 0x0, 0x1f, 0x50, 0x3, 0xf3, 0x0, 0x5f,
+ 0x0, 0xa, 0xb0, 0x0, 0xf4, 0x0, 0x8b, 0x0,
+ 0x4e, 0x20, 0x6, 0x20, 0x0,
/* U+2A "*" */
- 0x0, 0x27, 0x0, 0x0, 0x12, 0xf0, 0x0, 0x2e,
- 0x9f, 0x9e, 0x10, 0x4d, 0xfc, 0x51, 0x3, 0xfa,
- 0xe1, 0x0, 0x58, 0xb, 0x30,
+ 0x0, 0x1f, 0x0, 0x0, 0x1, 0xf0, 0x0, 0x9b,
+ 0x6f, 0x5b, 0x73, 0x8d, 0xfd, 0x83, 0x0, 0xde,
+ 0xa0, 0x0, 0x9c, 0x1f, 0x50, 0x7, 0x30, 0x66,
+ 0x0,
/* U+2B "+" */
- 0x0, 0x2, 0x72, 0x0, 0x0, 0x0, 0x4f, 0x40,
- 0x0, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x0, 0x4f,
- 0x40, 0x0, 0x8f, 0xff, 0xff, 0xff, 0x82, 0x44,
- 0x7f, 0x74, 0x42, 0x0, 0x4, 0xf4, 0x0, 0x0,
- 0x0, 0x4f, 0x40, 0x0, 0x0, 0x3, 0xc3, 0x0,
+ 0x0, 0x2, 0xa2, 0x0, 0x0, 0x0, 0x3f, 0x30,
+ 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x11, 0x4f,
+ 0x51, 0x10, 0x6f, 0xff, 0xff, 0xff, 0x61, 0x44,
+ 0x7f, 0x74, 0x41, 0x0, 0x3, 0xf3, 0x0, 0x0,
+ 0x0, 0x3f, 0x30, 0x0, 0x0, 0x3, 0xf3, 0x0,
0x0,
/* U+2C "," */
- 0xc6, 0xf8, 0xf5, 0xe0,
+ 0xf, 0x60, 0xf5, 0x4f, 0x28, 0x90, 0x0, 0x0,
/* U+2D "-" */
- 0x46, 0x66, 0x58, 0xcc, 0xcb,
+ 0x0, 0x0, 0xb, 0xff, 0xf1, 0x23, 0x33, 0x0,
/* U+2E "." */
- 0x56, 0xbc,
+ 0x88, 0xab,
/* U+2F "/" */
- 0x0, 0x0, 0x13, 0x0, 0x0, 0x7e, 0x0, 0x0,
- 0xe7, 0x0, 0x4, 0xf2, 0x0, 0xa, 0xb0, 0x0,
- 0x1e, 0x50, 0x0, 0x6f, 0x0, 0x0, 0xd9, 0x0,
- 0x2, 0xf2, 0x0, 0x9, 0xd0, 0x0, 0xf, 0x60,
- 0x0, 0x5f, 0x10, 0x0, 0xba, 0x0, 0x0,
+ 0x0, 0x0, 0x4e, 0x0, 0x0, 0xa, 0x90, 0x0,
+ 0x0, 0xf3, 0x0, 0x0, 0x6d, 0x0, 0x0, 0xc,
+ 0x70, 0x0, 0x2, 0xf1, 0x0, 0x0, 0x7c, 0x0,
+ 0x0, 0xd, 0x60, 0x0, 0x3, 0xf0, 0x0, 0x0,
+ 0x9a, 0x0, 0x0, 0xe, 0x40, 0x0, 0x5, 0xe0,
+ 0x0, 0x0, 0xa9, 0x0, 0x0, 0x0,
/* U+30 "0" */
- 0x1, 0x57, 0x51, 0x0, 0x2c, 0xec, 0xec, 0x20,
- 0xae, 0x10, 0x1e, 0xa0, 0xf8, 0x0, 0x8, 0xf0,
- 0xf8, 0x0, 0x8, 0xf1, 0xf8, 0x0, 0x8, 0xf4,
- 0xf8, 0x0, 0x8, 0xf4, 0xf8, 0x0, 0x8, 0xf4,
- 0xf8, 0x0, 0x8, 0xf0, 0xfa, 0x0, 0xa, 0xf0,
- 0x7f, 0x61, 0x6f, 0x70, 0x8, 0xff, 0xf8, 0x0,
- 0x0, 0x2, 0x0, 0x0,
+ 0x0, 0x7d, 0xfd, 0x60, 0x0, 0x5f, 0x84, 0x9f,
+ 0x50, 0xc, 0xb0, 0x0, 0xbc, 0x0, 0xf7, 0x0,
+ 0x7, 0xf0, 0x1f, 0x50, 0x0, 0x5f, 0x1, 0xf5,
+ 0x0, 0x5, 0xf1, 0x1f, 0x50, 0x0, 0x5f, 0x11,
+ 0xf5, 0x0, 0x6, 0xf0, 0xf, 0x70, 0x0, 0x7f,
+ 0x0, 0xcc, 0x0, 0xc, 0xb0, 0x5, 0xf9, 0x49,
+ 0xf5, 0x0, 0x6, 0xdf, 0xd6, 0x0,
/* U+31 "1" */
- 0x23, 0x37, 0x48, 0xff, 0xf8, 0x0, 0xf, 0x80,
- 0x0, 0xf8, 0x0, 0xf, 0x80, 0x0, 0xf8, 0x0,
- 0xf, 0x80, 0x0, 0xf8, 0x0, 0xf, 0x80, 0x0,
- 0xf8, 0x0, 0xf, 0x80, 0x0, 0xf8,
+ 0x0, 0x39, 0xa5, 0xdf, 0xfb, 0x99, 0x2c, 0xb0,
+ 0x0, 0xcb, 0x0, 0xc, 0xb0, 0x0, 0xcb, 0x0,
+ 0xc, 0xb0, 0x0, 0xcb, 0x0, 0xc, 0xb0, 0x0,
+ 0xcb, 0x0, 0xc, 0xb0, 0x0, 0xcb,
/* U+32 "2" */
- 0x1, 0x57, 0x61, 0x0, 0x1d, 0xfc, 0xee, 0x30,
- 0xaf, 0x10, 0x1e, 0xb0, 0xa8, 0x0, 0xc, 0xe0,
- 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0x7f, 0x40,
- 0x0, 0x3, 0xe9, 0x0, 0x0, 0x1c, 0xd0, 0x0,
- 0x0, 0xde, 0x10, 0x0, 0xa, 0xf3, 0x0, 0x0,
- 0x7f, 0x73, 0x33, 0x31, 0xcf, 0xff, 0xff, 0xf4,
+ 0x0, 0x7e, 0xfd, 0x60, 0x0, 0x9f, 0x74, 0x9f,
+ 0x60, 0x1f, 0x60, 0x0, 0xcc, 0x2, 0xa2, 0x0,
+ 0x9, 0xd0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0,
+ 0x0, 0x7f, 0x10, 0x0, 0x0, 0x4f, 0x60, 0x0,
+ 0x0, 0x2f, 0x90, 0x0, 0x0, 0x1e, 0xa0, 0x0,
+ 0x0, 0xc, 0xc0, 0x0, 0x0, 0xa, 0xf4, 0x33,
+ 0x33, 0x10, 0xff, 0xff, 0xff, 0xf6,
/* U+33 "3" */
- 0x1, 0x57, 0x62, 0x3, 0xdf, 0xce, 0xe4, 0xbe,
- 0x10, 0x1e, 0xc8, 0x40, 0x0, 0xbe, 0x0, 0x0,
- 0xd, 0xc0, 0x6, 0x7a, 0xf3, 0x0, 0x9c, 0xec,
- 0x30, 0x0, 0x0, 0xcd, 0x0, 0x0, 0x8, 0xff,
- 0x90, 0x0, 0x9f, 0x9e, 0x50, 0x5e, 0xb1, 0x9f,
- 0xff, 0xa1, 0x0, 0x2, 0x0, 0x0,
+ 0x0, 0x8d, 0xfd, 0x50, 0xa, 0xe6, 0x48, 0xf5,
+ 0xf, 0x60, 0x0, 0xca, 0x1, 0x0, 0x0, 0xbb,
+ 0x0, 0x0, 0x16, 0xf4, 0x0, 0xf, 0xff, 0x60,
+ 0x0, 0x3, 0x49, 0xf4, 0x0, 0x0, 0x0, 0xbc,
+ 0x16, 0x10, 0x0, 0x8e, 0x2f, 0x60, 0x0, 0xbc,
+ 0xa, 0xe6, 0x48, 0xf4, 0x0, 0x8d, 0xfc, 0x50,
/* U+34 "4" */
- 0x0, 0x0, 0x3, 0x30, 0x0, 0x0, 0x3, 0xff,
- 0x0, 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x6f,
- 0xaf, 0x0, 0x0, 0x1e, 0x88, 0xf0, 0x0, 0xa,
- 0xd0, 0x8f, 0x0, 0x4, 0xf4, 0x8, 0xf0, 0x0,
- 0xda, 0x0, 0x8f, 0x0, 0x6f, 0xcb, 0xbd, 0xfb,
- 0x64, 0x88, 0x88, 0xcf, 0x84, 0x0, 0x0, 0x8,
- 0xf0, 0x0, 0x0, 0x0, 0x8f, 0x0,
+ 0x0, 0x0, 0xc, 0xf0, 0x0, 0x0, 0x6, 0xff,
+ 0x0, 0x0, 0x1, 0xec, 0xf0, 0x0, 0x0, 0xac,
+ 0x6f, 0x0, 0x0, 0x3f, 0x26, 0xf0, 0x0, 0xd,
+ 0x80, 0x6f, 0x0, 0x7, 0xe0, 0x6, 0xf0, 0x1,
+ 0xf5, 0x0, 0x6f, 0x0, 0x8f, 0xff, 0xff, 0xff,
+ 0xa1, 0x33, 0x33, 0x8f, 0x32, 0x0, 0x0, 0x6,
+ 0xf0, 0x0, 0x0, 0x0, 0x6f, 0x0,
/* U+35 "5" */
- 0x4, 0x33, 0x33, 0x30, 0xf, 0xff, 0xff, 0xc0,
- 0x4f, 0x40, 0x0, 0x0, 0x4f, 0x30, 0x0, 0x0,
- 0x6f, 0x13, 0x31, 0x0, 0x8f, 0xef, 0xfd, 0x30,
- 0x8e, 0x20, 0x3f, 0xb0, 0x0, 0x0, 0x9, 0xf0,
- 0x0, 0x0, 0x8, 0xf1, 0xcc, 0x0, 0x9, 0xf0,
- 0x7f, 0x50, 0x6e, 0x90, 0x9, 0xff, 0xfa, 0x10,
- 0x0, 0x2, 0x0, 0x0,
+ 0xd, 0xff, 0xff, 0xf0, 0xf, 0xa6, 0x66, 0x60,
+ 0x1f, 0x40, 0x0, 0x0, 0x2f, 0x20, 0x0, 0x0,
+ 0x4f, 0xcf, 0xfa, 0x10, 0x4f, 0x84, 0x8f, 0xb0,
+ 0x0, 0x0, 0x7, 0xf2, 0x0, 0x0, 0x2, 0xf4,
+ 0x43, 0x0, 0x2, 0xf4, 0x9d, 0x0, 0x6, 0xf1,
+ 0x2f, 0xa4, 0x6f, 0xa0, 0x4, 0xcf, 0xe8, 0x0,
/* U+36 "6" */
- 0x0, 0x36, 0x75, 0x10, 0x6, 0xfd, 0xce, 0x40,
- 0x4f, 0x70, 0x0, 0x0, 0xbe, 0x0, 0x0, 0x0,
- 0xdb, 0x3, 0x30, 0x0, 0xfa, 0xdf, 0xfe, 0x30,
- 0xff, 0x30, 0x2d, 0xd0, 0xf8, 0x0, 0x5, 0xf4,
- 0xcc, 0x0, 0x4, 0xf4, 0xae, 0x0, 0x6, 0xf2,
- 0x2f, 0x92, 0x4e, 0xc0, 0x4, 0xef, 0xfc, 0x10,
- 0x0, 0x1, 0x0, 0x0,
+ 0x0, 0x2a, 0xe9, 0x0, 0x5, 0xfc, 0x63, 0x0,
+ 0x1f, 0x80, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0,
+ 0xbb, 0xbf, 0xf9, 0x0, 0xef, 0xa4, 0x7f, 0x80,
+ 0xfb, 0x0, 0x8, 0xf0, 0xf8, 0x0, 0x4, 0xf2,
+ 0xd9, 0x0, 0x4, 0xf2, 0x9e, 0x0, 0x8, 0xe0,
+ 0x1e, 0xc5, 0x7f, 0x70, 0x2, 0xcf, 0xe7, 0x0,
/* U+37 "7" */
- 0x13, 0x33, 0x33, 0x33, 0x13, 0xcc, 0xcc, 0xcd,
- 0xf4, 0x0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x0,
- 0x7f, 0x20, 0x0, 0x0, 0x2e, 0x60, 0x0, 0x0,
- 0xa, 0xe0, 0x0, 0x0, 0x1, 0xf6, 0x0, 0x0,
- 0x0, 0x6f, 0x10, 0x0, 0x0, 0xb, 0xd0, 0x0,
- 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0, 0xe, 0xc0,
- 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0,
+ 0x6f, 0xff, 0xff, 0xff, 0x41, 0x33, 0x33, 0x38,
+ 0xf1, 0x0, 0x0, 0x0, 0xc9, 0x0, 0x0, 0x0,
+ 0x3f, 0x20, 0x0, 0x0, 0xa, 0xb0, 0x0, 0x0,
+ 0x1, 0xf5, 0x0, 0x0, 0x0, 0x8e, 0x0, 0x0,
+ 0x0, 0xe, 0x70, 0x0, 0x0, 0x6, 0xf1, 0x0,
+ 0x0, 0x0, 0xda, 0x0, 0x0, 0x0, 0x4f, 0x30,
+ 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0,
/* U+38 "8" */
- 0x0, 0x16, 0x76, 0x10, 0x0, 0x3e, 0xfc, 0xfe,
- 0x30, 0xb, 0xf1, 0x1, 0xfb, 0x0, 0xcc, 0x0,
- 0xc, 0xd0, 0xa, 0xd1, 0x0, 0xeb, 0x0, 0x1d,
- 0xd7, 0xcd, 0x10, 0x1, 0x9f, 0xce, 0x91, 0x0,
- 0xcd, 0x10, 0x1d, 0xb0, 0x2f, 0x70, 0x0, 0x6f,
- 0x21, 0xf8, 0x0, 0x8, 0xf1, 0xc, 0xe5, 0x5,
- 0xec, 0x0, 0x1a, 0xff, 0xfb, 0x10, 0x0, 0x0,
- 0x20, 0x0, 0x0,
+ 0x0, 0x6d, 0xfd, 0x60, 0x0, 0x6f, 0x84, 0x8f,
+ 0x60, 0xc, 0xb0, 0x0, 0xbb, 0x0, 0xca, 0x0,
+ 0xa, 0xc0, 0x6, 0xf4, 0x4, 0xf6, 0x0, 0x9,
+ 0xff, 0xf9, 0x0, 0x5, 0xf7, 0x48, 0xf5, 0x0,
+ 0xe8, 0x0, 0x9, 0xe0, 0x1f, 0x50, 0x0, 0x5f,
+ 0x10, 0xf8, 0x0, 0x8, 0xf0, 0x8, 0xf7, 0x47,
+ 0xf7, 0x0, 0x7, 0xdf, 0xd7, 0x0,
/* U+39 "9" */
- 0x0, 0x16, 0x74, 0x0, 0x3, 0xee, 0xcf, 0xb0,
- 0xd, 0xc1, 0x3, 0xf8, 0x2f, 0x60, 0x0, 0xcc,
- 0x4f, 0x40, 0x0, 0x9e, 0x1f, 0x70, 0x0, 0x9f,
- 0xc, 0xe4, 0x7, 0xff, 0x1, 0xcf, 0xfd, 0x9f,
- 0x0, 0x0, 0x30, 0xbd, 0x0, 0x0, 0x0, 0xeb,
- 0x2, 0x30, 0x3a, 0xf3, 0x6, 0xff, 0xfe, 0x40,
- 0x0, 0x3, 0x0, 0x0,
+ 0x0, 0x6e, 0xfc, 0x30, 0x7, 0xf8, 0x5c, 0xf1,
+ 0xe, 0x90, 0x1, 0xf8, 0x2f, 0x40, 0x0, 0xac,
+ 0x2f, 0x30, 0x0, 0x8e, 0xf, 0x70, 0x0, 0xae,
+ 0xa, 0xe4, 0x17, 0xfe, 0x1, 0xcf, 0xfc, 0xab,
+ 0x0, 0x2, 0x20, 0xc8, 0x0, 0x0, 0x5, 0xf2,
+ 0x0, 0x25, 0xaf, 0x60, 0x0, 0x9e, 0xb4, 0x0,
/* U+3A ":" */
- 0x66, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x66,
- 0xcc,
+ 0xba, 0x87, 0x0, 0x0, 0x0, 0x0, 0x0, 0x97,
+ 0xba,
/* U+3B ";" */
- 0x66, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc6,
- 0xf8, 0xf5, 0xe0,
+ 0xe, 0x70, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xa5, 0xe, 0x71, 0xf5, 0x7d,
+ 0x1, 0x20,
/* U+3C "<" */
- 0x0, 0x0, 0x4, 0xb0, 0x0, 0x6b, 0xfe, 0x6,
- 0xdf, 0xa4, 0x8, 0xfa, 0x20, 0x0, 0x2a, 0xfc,
- 0x51, 0x0, 0x2, 0x9f, 0xe9, 0x0, 0x0, 0x18,
- 0xf0, 0x0, 0x0, 0x1,
+ 0x0, 0x0, 0x4, 0xb0, 0x0, 0x4c, 0xfc, 0x5,
+ 0xcf, 0xb4, 0x6, 0xfa, 0x20, 0x0, 0x2c, 0xfa,
+ 0x30, 0x0, 0x4, 0xbf, 0xc5, 0x0, 0x0, 0x3b,
+ 0xf0, 0x0, 0x0, 0x2,
/* U+3D "=" */
- 0x9b, 0xbb, 0xbb, 0x96, 0x88, 0x88, 0x86, 0x0,
- 0x0, 0x0, 0x6, 0x77, 0x77, 0x76, 0x9c, 0xcc,
- 0xcc, 0x90,
+ 0x1, 0x11, 0x11, 0xd, 0xff, 0xff, 0xfb, 0x34,
+ 0x44, 0x44, 0x20, 0x11, 0x11, 0x10, 0xdf, 0xff,
+ 0xff, 0xb3, 0x33, 0x33, 0x32,
/* U+3E ">" */
- 0xa2, 0x0, 0x0, 0xf, 0xfa, 0x40, 0x0, 0x6,
- 0xbf, 0xc5, 0x0, 0x0, 0x28, 0xfb, 0x0, 0x39,
- 0xee, 0x76, 0xcf, 0xd6, 0x0, 0xfa, 0x40, 0x0,
+ 0xb4, 0x0, 0x0, 0xb, 0xfd, 0x50, 0x0, 0x2,
+ 0x9f, 0xe7, 0x0, 0x0, 0x7, 0xfb, 0x0, 0x39,
+ 0xfd, 0x55, 0xcf, 0xc5, 0x0, 0xfb, 0x40, 0x0,
0x2, 0x0, 0x0, 0x0,
/* U+3F "?" */
- 0x0, 0x67, 0x72, 0x1, 0xcf, 0xce, 0xe4, 0x6f,
- 0x30, 0x1e, 0xc2, 0x40, 0x0, 0xce, 0x0, 0x0,
- 0xe, 0xb0, 0x0, 0xa, 0xf3, 0x0, 0x6, 0xf6,
- 0x0, 0x2, 0xf9, 0x0, 0x0, 0x3c, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x27, 0x40, 0x0, 0x4,
- 0xf8, 0x0,
+ 0x3, 0xbf, 0xe8, 0x1, 0xec, 0x57, 0xf8, 0x4e,
+ 0x10, 0xa, 0xd0, 0x0, 0x0, 0x9d, 0x0, 0x0,
+ 0x1e, 0x80, 0x0, 0xc, 0xd0, 0x0, 0xa, 0xe2,
+ 0x0, 0x1, 0xf6, 0x0, 0x0, 0x19, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x19, 0x20, 0x0, 0x2,
+ 0xe4, 0x0,
/* U+40 "@" */
- 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x6b, 0xfc, 0xfc, 0x60, 0x0, 0x1, 0x9d, 0x30,
- 0x0, 0x2b, 0xa1, 0x0, 0x8b, 0x10, 0x0, 0x0,
- 0xb, 0x80, 0x2f, 0x20, 0x7, 0xa9, 0x20, 0x2f,
- 0x19, 0xa0, 0x9, 0xd6, 0x9f, 0x0, 0xc4, 0xc6,
- 0x4, 0xf2, 0x7, 0xc0, 0xa, 0x6f, 0x40, 0x8d,
- 0x0, 0x8c, 0x0, 0x88, 0xf0, 0xc, 0xc0, 0x8,
- 0xa0, 0x8, 0x8f, 0x40, 0xcc, 0x0, 0xc8, 0x0,
- 0xd4, 0xf4, 0xa, 0xd1, 0x4e, 0x90, 0x6e, 0xb,
- 0xa0, 0x3f, 0xfd, 0x5f, 0xcd, 0x20, 0x3f, 0x10,
- 0x2, 0x0, 0x11, 0x0, 0x0, 0x9c, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7f, 0xa7, 0x79, 0xa0,
- 0x0, 0x0, 0x0, 0x14, 0x78, 0x61, 0x0, 0x0,
+ 0x0, 0x0, 0x3a, 0xef, 0xeb, 0x40, 0x0, 0x0,
+ 0x7, 0xe7, 0x31, 0x26, 0xe8, 0x0, 0x0, 0x6e,
+ 0x20, 0x0, 0x0, 0xc, 0x50, 0x1, 0xf3, 0x0,
+ 0x8e, 0xc5, 0x2, 0xe0, 0x7, 0xb0, 0x8, 0xc3,
+ 0x7e, 0x0, 0xc3, 0xc, 0x50, 0x1f, 0x30, 0x5c,
+ 0x0, 0x96, 0xf, 0x20, 0x6d, 0x0, 0x6b, 0x0,
+ 0x78, 0x1f, 0x0, 0x9a, 0x0, 0x8a, 0x0, 0x78,
+ 0x1f, 0x0, 0xb8, 0x0, 0x99, 0x0, 0x87, 0xf,
+ 0x20, 0xa9, 0x0, 0xc8, 0x0, 0xc3, 0xd, 0x50,
+ 0x6d, 0x15, 0xec, 0x6, 0xc0, 0x7, 0xc0, 0xb,
+ 0xf9, 0x1c, 0xfb, 0x10, 0x0, 0xe7, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3e, 0xa3, 0x10, 0x34,
+ 0x0, 0x0, 0x0, 0x1, 0x8d, 0xff, 0xc6, 0x0,
+ 0x0,
/* U+41 "A" */
- 0x0, 0x0, 0x33, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0x10, 0x0, 0x0, 0x4, 0xff, 0x70, 0x0, 0x0,
- 0xa, 0xeb, 0xc0, 0x0, 0x0, 0xf, 0x96, 0xf2,
- 0x0, 0x0, 0x5f, 0x21, 0xf7, 0x0, 0x0, 0xbd,
- 0x0, 0xbd, 0x0, 0x1, 0xf9, 0x33, 0x7f, 0x30,
- 0x6, 0xff, 0xff, 0xff, 0x90, 0xd, 0xd0, 0x0,
- 0xa, 0xd0, 0x2f, 0x70, 0x0, 0x5, 0xf4, 0x7f,
- 0x10, 0x0, 0x0, 0xfa,
+ 0x0, 0x0, 0x9f, 0x10, 0x0, 0x0, 0x0, 0xf,
+ 0xf6, 0x0, 0x0, 0x0, 0x5, 0xfb, 0xc0, 0x0,
+ 0x0, 0x0, 0xbb, 0x4f, 0x20, 0x0, 0x0, 0x1f,
+ 0x60, 0xf8, 0x0, 0x0, 0x6, 0xf1, 0xa, 0xd0,
+ 0x0, 0x0, 0xcc, 0x0, 0x5f, 0x30, 0x0, 0x2f,
+ 0x70, 0x1, 0xf9, 0x0, 0x8, 0xff, 0xff, 0xff,
+ 0xe0, 0x0, 0xdc, 0x33, 0x33, 0x6f, 0x50, 0x3f,
+ 0x50, 0x0, 0x0, 0xeb, 0x9, 0xe0, 0x0, 0x0,
+ 0x8, 0xf1,
/* U+42 "B" */
- 0x33, 0x33, 0x33, 0x0, 0xc, 0xfc, 0xce, 0xfb,
- 0x10, 0xcc, 0x0, 0x4, 0xf8, 0xc, 0xc0, 0x0,
- 0xc, 0xc0, 0xcc, 0x0, 0x1, 0xea, 0xc, 0xd7,
- 0x78, 0xdc, 0x10, 0xcf, 0xcc, 0xcd, 0xe6, 0xc,
- 0xc0, 0x0, 0x7, 0xf4, 0xcc, 0x0, 0x0, 0xf,
- 0x8c, 0xc0, 0x0, 0x2, 0xf7, 0xcc, 0x33, 0x34,
- 0xcf, 0x2c, 0xff, 0xff, 0xfb, 0x30,
+ 0xaf, 0xff, 0xfc, 0x50, 0xa, 0xe4, 0x45, 0xaf,
+ 0x50, 0xad, 0x0, 0x0, 0xdb, 0xa, 0xd0, 0x0,
+ 0xd, 0xb0, 0xad, 0x0, 0x17, 0xf4, 0xa, 0xff,
+ 0xff, 0xf8, 0x0, 0xad, 0x33, 0x48, 0xf6, 0xa,
+ 0xd0, 0x0, 0xa, 0xe0, 0xad, 0x0, 0x0, 0x7f,
+ 0xa, 0xd0, 0x0, 0xa, 0xe0, 0xae, 0x44, 0x59,
+ 0xf7, 0xa, 0xff, 0xff, 0xd6, 0x0,
/* U+43 "C" */
- 0x0, 0x25, 0x75, 0x10, 0x0, 0x7f, 0xdc, 0xee,
- 0x60, 0x4f, 0x80, 0x1, 0xbe, 0x2c, 0xe0, 0x0,
- 0x3, 0xf5, 0xf8, 0x0, 0x0, 0x4, 0x2f, 0x80,
- 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0xf,
- 0x80, 0x0, 0x0, 0x0, 0xea, 0x0, 0x0, 0xc,
- 0x6a, 0xe1, 0x0, 0x5, 0xf4, 0x1f, 0xc3, 0x14,
- 0xec, 0x0, 0x2c, 0xff, 0xf9, 0x10, 0x0, 0x0,
- 0x20, 0x0, 0x0,
+ 0x0, 0x8, 0xdf, 0xe8, 0x0, 0x0, 0xcf, 0x75,
+ 0x7f, 0xb0, 0x7, 0xf3, 0x0, 0x4, 0xf4, 0xd,
+ 0xb0, 0x0, 0x0, 0xd8, 0xf, 0x80, 0x0, 0x0,
+ 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xf, 0x70,
+ 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0,
+ 0xd, 0xb0, 0x0, 0x0, 0xc7, 0x7, 0xf3, 0x0,
+ 0x4, 0xf5, 0x0, 0xcf, 0x75, 0x7e, 0xb0, 0x0,
+ 0x9, 0xef, 0xe8, 0x0,
/* U+44 "D" */
- 0x33, 0x33, 0x32, 0x0, 0xc, 0xfc, 0xcf, 0xfa,
- 0x10, 0xcc, 0x0, 0x4, 0xec, 0xc, 0xc0, 0x0,
- 0x4, 0xf7, 0xcc, 0x0, 0x0, 0xe, 0xbc, 0xc0,
- 0x0, 0x0, 0xcc, 0xcc, 0x0, 0x0, 0xc, 0xcc,
- 0xc0, 0x0, 0x0, 0xcc, 0xcc, 0x0, 0x0, 0xf,
- 0x9c, 0xc0, 0x0, 0x8, 0xf4, 0xcc, 0x33, 0x49,
- 0xf8, 0xc, 0xff, 0xff, 0xc4, 0x0,
+ 0xaf, 0xff, 0xe9, 0x10, 0xa, 0xe4, 0x46, 0xde,
+ 0x20, 0xad, 0x0, 0x0, 0xdc, 0xa, 0xd0, 0x0,
+ 0x5, 0xf3, 0xad, 0x0, 0x0, 0x1f, 0x7a, 0xd0,
+ 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0xf, 0x8a,
+ 0xd0, 0x0, 0x1, 0xf7, 0xad, 0x0, 0x0, 0x5f,
+ 0x3a, 0xd0, 0x0, 0x1d, 0xd0, 0xae, 0x44, 0x6e,
+ 0xe2, 0xa, 0xff, 0xfe, 0x91, 0x0,
/* U+45 "E" */
- 0x33, 0x33, 0x33, 0x31, 0xcf, 0xcc, 0xcc, 0xc3,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcd, 0x77, 0x77, 0x40,
- 0xcf, 0xcc, 0xcc, 0x60, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x33, 0x33, 0x31, 0xcf, 0xff, 0xff, 0xf4,
+ 0xaf, 0xff, 0xff, 0xf7, 0xae, 0x44, 0x44, 0x42,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xad, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xc0,
+ 0xad, 0x33, 0x33, 0x20, 0xad, 0x0, 0x0, 0x0,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xae, 0x44, 0x44, 0x42, 0xaf, 0xff, 0xff, 0xf8,
/* U+46 "F" */
- 0x33, 0x33, 0x33, 0x32, 0xcf, 0xcc, 0xcc, 0xc6,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x33, 0x33, 0x20,
- 0xcf, 0xff, 0xff, 0x80, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
+ 0xaf, 0xff, 0xff, 0xf6, 0xae, 0x44, 0x44, 0x41,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xaf, 0xff, 0xff, 0x90, 0xad, 0x33, 0x33, 0x20,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
/* U+47 "G" */
- 0x0, 0x25, 0x75, 0x20, 0x0, 0x7f, 0xec, 0xee,
- 0x60, 0x4f, 0x90, 0x0, 0xae, 0x2c, 0xe0, 0x0,
- 0x2, 0xf6, 0xf9, 0x0, 0x0, 0x0, 0xf, 0x80,
- 0x0, 0x0, 0x0, 0xf8, 0x0, 0x6b, 0xbb, 0x6f,
- 0x80, 0x4, 0x88, 0xf8, 0xeb, 0x0, 0x0, 0xf,
- 0x8a, 0xe2, 0x0, 0x0, 0xf8, 0x1f, 0xc4, 0x2,
- 0x7f, 0x60, 0x1a, 0xff, 0xfe, 0x50, 0x0, 0x0,
- 0x20, 0x0, 0x0,
+ 0x0, 0x8, 0xef, 0xe9, 0x0, 0x0, 0xce, 0x75,
+ 0x7e, 0xc0, 0x7, 0xf3, 0x0, 0x3, 0xf6, 0xc,
+ 0xc0, 0x0, 0x0, 0x75, 0xf, 0x90, 0x0, 0x0,
+ 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xf, 0x70,
+ 0x6, 0xff, 0xfb, 0xf, 0x90, 0x1, 0x33, 0xdb,
+ 0xc, 0xd0, 0x0, 0x0, 0xcb, 0x6, 0xf5, 0x0,
+ 0x0, 0xcb, 0x0, 0xbf, 0x84, 0x5a, 0xf7, 0x0,
+ 0x7, 0xdf, 0xfc, 0x50,
/* U+48 "H" */
- 0x33, 0x0, 0x0, 0x2, 0x3c, 0xc0, 0x0, 0x0,
- 0x8f, 0xcc, 0x0, 0x0, 0x8, 0xfc, 0xc0, 0x0,
- 0x0, 0x8f, 0xcc, 0x0, 0x0, 0x8, 0xfc, 0xc3,
- 0x33, 0x33, 0x9f, 0xcf, 0xff, 0xff, 0xff, 0xfc,
- 0xc0, 0x0, 0x0, 0x8f, 0xcc, 0x0, 0x0, 0x8,
- 0xfc, 0xc0, 0x0, 0x0, 0x8f, 0xcc, 0x0, 0x0,
- 0x8, 0xfc, 0xc0, 0x0, 0x0, 0x8f,
+ 0xad, 0x0, 0x0, 0x7, 0xf1, 0xad, 0x0, 0x0,
+ 0x7, 0xf1, 0xad, 0x0, 0x0, 0x7, 0xf1, 0xad,
+ 0x0, 0x0, 0x7, 0xf1, 0xad, 0x0, 0x0, 0x7,
+ 0xf1, 0xaf, 0xff, 0xff, 0xff, 0xf1, 0xad, 0x33,
+ 0x33, 0x39, 0xf1, 0xad, 0x0, 0x0, 0x7, 0xf1,
+ 0xad, 0x0, 0x0, 0x7, 0xf1, 0xad, 0x0, 0x0,
+ 0x7, 0xf1, 0xad, 0x0, 0x0, 0x7, 0xf1, 0xad,
+ 0x0, 0x0, 0x7, 0xf1,
/* U+49 "I" */
- 0x35, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
- 0x8f, 0x8f, 0x8f, 0x8f,
+ 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
+ 0x9f, 0x9f, 0x9f, 0x9f,
/* U+4A "J" */
- 0x0, 0x0, 0x0, 0x42, 0x0, 0x0, 0x0, 0xf8,
- 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0xf8,
- 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0xf8,
- 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0xf8,
- 0x13, 0x0, 0x0, 0xf8, 0x4f, 0x40, 0x4, 0xf5,
- 0x2f, 0xb2, 0x2c, 0xf1, 0x5, 0xef, 0xfd, 0x30,
- 0x0, 0x1, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0xe9,
+ 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0xe9,
+ 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0xe9,
+ 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0xe9,
+ 0x36, 0x0, 0x0, 0xe9, 0x7f, 0x10, 0x2, 0xf7,
+ 0x1e, 0xc5, 0x5d, 0xe1, 0x3, 0xbe, 0xea, 0x20,
/* U+4B "K" */
- 0x33, 0x0, 0x0, 0x13, 0x2c, 0xc0, 0x0, 0x1c,
- 0xd1, 0xcc, 0x0, 0xa, 0xf3, 0xc, 0xc0, 0x7,
- 0xf4, 0x0, 0xcc, 0x4, 0xf6, 0x0, 0xc, 0xc4,
- 0xea, 0x0, 0x0, 0xcf, 0xcf, 0x90, 0x0, 0xc,
- 0xc0, 0x8f, 0x60, 0x0, 0xcc, 0x0, 0xbe, 0x30,
- 0xc, 0xc0, 0x1, 0xdd, 0x10, 0xcc, 0x0, 0x3,
- 0xfc, 0xc, 0xc0, 0x0, 0x5, 0xf9,
+ 0xad, 0x0, 0x0, 0x8f, 0x40, 0xad, 0x0, 0x6,
+ 0xf6, 0x0, 0xad, 0x0, 0x4f, 0x90, 0x0, 0xad,
+ 0x2, 0xfb, 0x0, 0x0, 0xad, 0x1d, 0xd0, 0x0,
+ 0x0, 0xad, 0xcf, 0x60, 0x0, 0x0, 0xaf, 0xfc,
+ 0xf2, 0x0, 0x0, 0xaf, 0x41, 0xec, 0x0, 0x0,
+ 0xad, 0x0, 0x4f, 0x80, 0x0, 0xad, 0x0, 0x8,
+ 0xf4, 0x0, 0xad, 0x0, 0x0, 0xce, 0x10, 0xad,
+ 0x0, 0x0, 0x2f, 0xa0,
/* U+4C "L" */
- 0x33, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x33, 0x33, 0x32, 0xcf, 0xff, 0xff, 0xf8,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xad, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xae, 0x44, 0x44, 0x40, 0xaf, 0xff, 0xff, 0xf3,
/* U+4D "M" */
- 0x33, 0x20, 0x0, 0x0, 0x2, 0x32, 0xcf, 0xa0,
- 0x0, 0x0, 0xc, 0xf8, 0xcf, 0xf1, 0x0, 0x0,
- 0x2f, 0xf8, 0xcd, 0xf7, 0x0, 0x0, 0x9e, 0xf8,
- 0xcc, 0xac, 0x0, 0x0, 0xf8, 0xf8, 0xcc, 0x3f,
- 0x30, 0x5, 0xf2, 0xf8, 0xcc, 0xd, 0xa0, 0xb,
- 0xb0, 0xf8, 0xcc, 0x6, 0xe1, 0x2f, 0x50, 0xf8,
- 0xcc, 0x1, 0xf6, 0x8e, 0x0, 0xf8, 0xcc, 0x0,
- 0xac, 0xd8, 0x0, 0xf8, 0xcc, 0x0, 0x3f, 0xf2,
- 0x0, 0xf8, 0xcc, 0x0, 0xd, 0xb0, 0x0, 0xf8,
+ 0xaf, 0x70, 0x0, 0x0, 0x7, 0xfa, 0xaf, 0xd0,
+ 0x0, 0x0, 0xd, 0xfa, 0xae, 0xf3, 0x0, 0x0,
+ 0x3f, 0xea, 0xab, 0xd9, 0x0, 0x0, 0xac, 0xca,
+ 0xab, 0x7e, 0x0, 0x0, 0xf6, 0xca, 0xac, 0x1f,
+ 0x50, 0x6, 0xf1, 0xca, 0xac, 0xb, 0xb0, 0xc,
+ 0xa0, 0xda, 0xad, 0x5, 0xf1, 0x2f, 0x40, 0xda,
+ 0xad, 0x0, 0xe7, 0x8e, 0x0, 0xda, 0xad, 0x0,
+ 0x8d, 0xe8, 0x0, 0xda, 0xad, 0x0, 0x2f, 0xf2,
+ 0x0, 0xda, 0xad, 0x0, 0xc, 0xb0, 0x0, 0xda,
/* U+4E "N" */
- 0x33, 0x0, 0x0, 0x2, 0x3c, 0xf7, 0x0, 0x0,
- 0x8f, 0xcf, 0xe1, 0x0, 0x8, 0xfc, 0xdf, 0xa0,
- 0x0, 0x8f, 0xcc, 0x5f, 0x50, 0x8, 0xfc, 0xc0,
- 0xcd, 0x10, 0x8f, 0xcc, 0x2, 0xf9, 0x8, 0xfc,
- 0xc0, 0x7, 0xf4, 0x8f, 0xcc, 0x0, 0xd, 0xc8,
- 0xfc, 0xc0, 0x0, 0x3f, 0xef, 0xcc, 0x0, 0x0,
- 0x9f, 0xfc, 0xc0, 0x0, 0x1, 0xef,
+ 0xaf, 0x20, 0x0, 0x6, 0xf1, 0xaf, 0xc0, 0x0,
+ 0x6, 0xf1, 0xaf, 0xf6, 0x0, 0x6, 0xf1, 0xad,
+ 0xbe, 0x10, 0x6, 0xf1, 0xad, 0x2f, 0x90, 0x6,
+ 0xf1, 0xad, 0x7, 0xf3, 0x6, 0xf1, 0xad, 0x0,
+ 0xdd, 0x6, 0xf1, 0xad, 0x0, 0x3f, 0x76, 0xf1,
+ 0xad, 0x0, 0x9, 0xf8, 0xf1, 0xad, 0x0, 0x1,
+ 0xef, 0xf1, 0xad, 0x0, 0x0, 0x5f, 0xf1, 0xad,
+ 0x0, 0x0, 0xb, 0xf1,
/* U+4F "O" */
- 0x0, 0x25, 0x74, 0x10, 0x0, 0x7f, 0xec, 0xfe,
- 0x50, 0x4f, 0x90, 0x1, 0xaf, 0x2d, 0xd0, 0x0,
- 0x1, 0xeb, 0xf8, 0x0, 0x0, 0xa, 0xdf, 0x80,
- 0x0, 0x0, 0x8f, 0xf8, 0x0, 0x0, 0x8, 0xff,
- 0x80, 0x0, 0x0, 0x8f, 0xf9, 0x0, 0x0, 0xc,
- 0xda, 0xe1, 0x0, 0x2, 0xf8, 0x1f, 0xc4, 0x34,
- 0xed, 0x10, 0x2b, 0xff, 0xf9, 0x10, 0x0, 0x0,
- 0x10, 0x0, 0x0,
+ 0x0, 0x8, 0xdf, 0xd8, 0x0, 0x0, 0xc, 0xf8,
+ 0x58, 0xfc, 0x0, 0x6, 0xf4, 0x0, 0x4, 0xf6,
+ 0x0, 0xcc, 0x0, 0x0, 0xc, 0xc0, 0xf, 0x80,
+ 0x0, 0x0, 0x8f, 0x1, 0xf7, 0x0, 0x0, 0x7,
+ 0xf1, 0x1f, 0x60, 0x0, 0x0, 0x6f, 0x10, 0xf8,
+ 0x0, 0x0, 0x8, 0xf0, 0xc, 0xc0, 0x0, 0x0,
+ 0xcc, 0x0, 0x6f, 0x40, 0x0, 0x3f, 0x60, 0x0,
+ 0xbf, 0x85, 0x8f, 0xc0, 0x0, 0x0, 0x8d, 0xfe,
+ 0x80, 0x0,
/* U+50 "P" */
- 0x33, 0x33, 0x33, 0x10, 0xc, 0xfc, 0xcc, 0xfe,
- 0x60, 0xcc, 0x0, 0x1, 0xbe, 0x2c, 0xc0, 0x0,
- 0x3, 0xf6, 0xcc, 0x0, 0x0, 0x3f, 0x6c, 0xc0,
- 0x0, 0xa, 0xf2, 0xce, 0xbb, 0xbe, 0xf6, 0xc,
- 0xe8, 0x88, 0x42, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xc, 0xc0, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0,
- 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0,
+ 0xaf, 0xff, 0xfe, 0x80, 0xa, 0xe4, 0x45, 0x8f,
+ 0xd0, 0xad, 0x0, 0x0, 0x4f, 0x5a, 0xd0, 0x0,
+ 0x0, 0xf7, 0xad, 0x0, 0x0, 0x2f, 0x6a, 0xd0,
+ 0x1, 0x3c, 0xf1, 0xaf, 0xff, 0xff, 0xd3, 0xa,
+ 0xd3, 0x33, 0x10, 0x0, 0xad, 0x0, 0x0, 0x0,
+ 0xa, 0xd0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0,
+ 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0,
/* U+51 "Q" */
- 0x0, 0x25, 0x74, 0x10, 0x0, 0x7, 0xfe, 0xcf,
- 0xe5, 0x0, 0x4f, 0x90, 0x1, 0xaf, 0x20, 0xdd,
- 0x0, 0x0, 0x1e, 0xb0, 0xf8, 0x0, 0x0, 0xa,
- 0xd0, 0xf8, 0x0, 0x0, 0x8, 0xf0, 0xf8, 0x0,
- 0x0, 0x8, 0xf0, 0xf8, 0x0, 0x0, 0x8, 0xf0,
- 0xf9, 0x0, 0x0, 0xc, 0xe0, 0xae, 0x10, 0x0,
- 0x2f, 0x90, 0x1f, 0xc4, 0x34, 0xef, 0x40, 0x2,
- 0xbf, 0xff, 0xaf, 0xe3, 0x0, 0x0, 0x20, 0x1,
- 0xd6,
+ 0x0, 0x8, 0xef, 0xd7, 0x0, 0x0, 0xc, 0xf8,
+ 0x58, 0xfb, 0x0, 0x7, 0xf3, 0x0, 0x5, 0xf5,
+ 0x0, 0xdb, 0x0, 0x0, 0xd, 0xb0, 0xf, 0x70,
+ 0x0, 0x0, 0x9e, 0x2, 0xf6, 0x0, 0x0, 0x8,
+ 0xf0, 0x2f, 0x50, 0x0, 0x0, 0x7f, 0x0, 0xf7,
+ 0x0, 0x0, 0x9, 0xe0, 0xd, 0xb0, 0x0, 0x0,
+ 0xdb, 0x0, 0x7f, 0x30, 0x0, 0x4f, 0x50, 0x0,
+ 0xce, 0x75, 0x8f, 0xb0, 0x0, 0x0, 0x8e, 0xfe,
+ 0xf6, 0x0, 0x0, 0x0, 0x0, 0x9, 0xf9, 0x0,
+ 0x0, 0x0, 0x0, 0x6, 0x60,
/* U+52 "R" */
- 0x33, 0x33, 0x33, 0x0, 0xc, 0xfc, 0xcd, 0xfd,
- 0x30, 0xcc, 0x0, 0x1, 0xdd, 0xc, 0xc0, 0x0,
- 0x7, 0xf2, 0xcc, 0x0, 0x0, 0x8f, 0x1c, 0xc3,
- 0x33, 0x5e, 0x90, 0xcf, 0xff, 0xff, 0xc1, 0xc,
- 0xc0, 0x0, 0x5f, 0xb0, 0xcc, 0x0, 0x0, 0x8f,
- 0xc, 0xc0, 0x0, 0x8, 0xf4, 0xcc, 0x0, 0x0,
- 0x6f, 0x4c, 0xc0, 0x0, 0x3, 0xf7,
+ 0xbf, 0xff, 0xfc, 0x50, 0xb, 0xe4, 0x45, 0xaf,
+ 0x70, 0xbd, 0x0, 0x0, 0xbe, 0xb, 0xd0, 0x0,
+ 0x7, 0xf0, 0xbd, 0x0, 0x0, 0xaf, 0xb, 0xd0,
+ 0x1, 0x6f, 0x80, 0xbf, 0xff, 0xff, 0x80, 0xb,
+ 0xd3, 0x37, 0xf3, 0x0, 0xbd, 0x0, 0xd, 0xb0,
+ 0xb, 0xd0, 0x0, 0x5f, 0x40, 0xbd, 0x0, 0x0,
+ 0xcc, 0xb, 0xd0, 0x0, 0x4, 0xf5,
/* U+53 "S" */
- 0x0, 0x47, 0x73, 0x0, 0xc, 0xfc, 0xcf, 0xb1,
- 0x7f, 0x30, 0x3, 0xf9, 0xbd, 0x0, 0x0, 0xbc,
- 0x7f, 0x30, 0x0, 0x0, 0x1d, 0xf9, 0x40, 0x0,
- 0x0, 0x7d, 0xfe, 0x70, 0x0, 0x0, 0x28, 0xf9,
- 0x42, 0x0, 0x0, 0xae, 0xea, 0x0, 0x0, 0xaf,
- 0x6f, 0x72, 0x16, 0xf9, 0x6, 0xef, 0xff, 0x80,
- 0x0, 0x0, 0x10, 0x0,
+ 0x0, 0x5c, 0xff, 0xa2, 0x0, 0x6f, 0x95, 0x6c,
+ 0xf2, 0xe, 0xa0, 0x0, 0xe, 0xa0, 0xf9, 0x0,
+ 0x0, 0x67, 0xa, 0xf5, 0x0, 0x0, 0x0, 0xa,
+ 0xfe, 0x93, 0x0, 0x0, 0x3, 0x8e, 0xf9, 0x0,
+ 0x0, 0x0, 0x6, 0xf8, 0x29, 0x10, 0x0, 0xa,
+ 0xd2, 0xf7, 0x0, 0x0, 0xcc, 0x9, 0xf9, 0x55,
+ 0xaf, 0x50, 0x6, 0xcf, 0xec, 0x50,
/* U+54 "T" */
- 0x33, 0x33, 0x33, 0x33, 0x31, 0x9c, 0xcc, 0xfe,
- 0xcc, 0xc3, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0,
+ 0x9f, 0xff, 0xff, 0xff, 0xf3, 0x24, 0x44, 0xfa,
+ 0x44, 0x40, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0,
0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0,
0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0,
0xf8, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0,
@@ -434,1050 +440,1209 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
0x0, 0xf8, 0x0, 0x0,
/* U+55 "U" */
- 0x33, 0x0, 0x0, 0x3, 0x3c, 0xc0, 0x0, 0x0,
- 0xcc, 0xcc, 0x0, 0x0, 0xc, 0xcc, 0xc0, 0x0,
- 0x0, 0xcc, 0xcc, 0x0, 0x0, 0xc, 0xcc, 0xc0,
- 0x0, 0x0, 0xcc, 0xcc, 0x0, 0x0, 0xc, 0xcc,
- 0xc0, 0x0, 0x0, 0xcc, 0xcc, 0x0, 0x0, 0xe,
- 0xba, 0xe1, 0x0, 0x2, 0xf8, 0x2f, 0xb3, 0x14,
- 0xce, 0x10, 0x3c, 0xff, 0xfb, 0x20, 0x0, 0x0,
- 0x10, 0x0, 0x0,
+ 0xe9, 0x0, 0x0, 0x2f, 0x5e, 0x90, 0x0, 0x2,
+ 0xf5, 0xe9, 0x0, 0x0, 0x2f, 0x5e, 0x90, 0x0,
+ 0x2, 0xf5, 0xe9, 0x0, 0x0, 0x2f, 0x5e, 0x90,
+ 0x0, 0x2, 0xf5, 0xe9, 0x0, 0x0, 0x2f, 0x5e,
+ 0x90, 0x0, 0x2, 0xf5, 0xda, 0x0, 0x0, 0x3f,
+ 0x4a, 0xe0, 0x0, 0x8, 0xf1, 0x2f, 0xc6, 0x59,
+ 0xf7, 0x0, 0x2a, 0xef, 0xc5, 0x0,
/* U+56 "V" */
- 0x33, 0x0, 0x0, 0x0, 0x33, 0x8f, 0x20, 0x0,
- 0x1, 0xfa, 0x2f, 0x80, 0x0, 0x6, 0xf4, 0xc,
- 0xd0, 0x0, 0xb, 0xe0, 0x6, 0xf3, 0x0, 0x1f,
- 0x80, 0x1, 0xf9, 0x0, 0x7f, 0x20, 0x0, 0xad,
- 0x0, 0xdd, 0x0, 0x0, 0x5f, 0x42, 0xf6, 0x0,
- 0x0, 0xe, 0xa7, 0xf1, 0x0, 0x0, 0x9, 0xed,
- 0xa0, 0x0, 0x0, 0x2, 0xff, 0x50, 0x0, 0x0,
- 0x0, 0xde, 0x0, 0x0,
+ 0x9f, 0x0, 0x0, 0x0, 0xdc, 0x4f, 0x50, 0x0,
+ 0x2, 0xf7, 0xe, 0xa0, 0x0, 0x7, 0xf1, 0x8,
+ 0xf0, 0x0, 0xd, 0xc0, 0x3, 0xf5, 0x0, 0x2f,
+ 0x60, 0x0, 0xda, 0x0, 0x7f, 0x10, 0x0, 0x7f,
+ 0x0, 0xcb, 0x0, 0x0, 0x2f, 0x52, 0xf5, 0x0,
+ 0x0, 0xc, 0xa7, 0xf0, 0x0, 0x0, 0x7, 0xfd,
+ 0xa0, 0x0, 0x0, 0x1, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0xbe, 0x0, 0x0,
/* U+57 "W" */
- 0x33, 0x0, 0x0, 0x43, 0x0, 0x1, 0x32, 0x8f,
- 0x20, 0x2, 0xfd, 0x0, 0x6, 0xf5, 0x4f, 0x60,
- 0x6, 0xff, 0x20, 0x9, 0xf1, 0xf, 0x90, 0xa,
- 0xcf, 0x70, 0xd, 0xd0, 0xc, 0xc0, 0xf, 0xad,
- 0xb0, 0xf, 0x90, 0x8, 0xf0, 0x3f, 0x58, 0xe0,
- 0x4f, 0x50, 0x5, 0xf4, 0x7f, 0x3, 0xf4, 0x8f,
- 0x10, 0x1, 0xf8, 0xcb, 0x0, 0xf8, 0xbd, 0x0,
- 0x0, 0xdb, 0xf7, 0x0, 0xac, 0xe9, 0x0, 0x0,
- 0x9d, 0xf2, 0x0, 0x6e, 0xf6, 0x0, 0x0, 0x5f,
- 0xe0, 0x0, 0x1f, 0xf2, 0x0, 0x0, 0x1f, 0x90,
- 0x0, 0xd, 0xe0, 0x0,
+ 0x6f, 0x10, 0x0, 0x9f, 0x0, 0x0, 0xcb, 0x2f,
+ 0x40, 0x0, 0xdf, 0x30, 0x0, 0xf8, 0xe, 0x80,
+ 0x1, 0xfe, 0x70, 0x3, 0xf4, 0xb, 0xb0, 0x6,
+ 0xf8, 0xb0, 0x6, 0xf0, 0x7, 0xf0, 0xa, 0xa4,
+ 0xf0, 0x9, 0xd0, 0x4, 0xf2, 0xe, 0x60, 0xf4,
+ 0xd, 0x90, 0x0, 0xf6, 0x2f, 0x10, 0xb8, 0xf,
+ 0x50, 0x0, 0xc9, 0x7d, 0x0, 0x7c, 0x4f, 0x20,
+ 0x0, 0x9d, 0xb9, 0x0, 0x3f, 0x8e, 0x0, 0x0,
+ 0x5f, 0xe4, 0x0, 0xe, 0xea, 0x0, 0x0, 0x1f,
+ 0xf0, 0x0, 0xa, 0xf7, 0x0, 0x0, 0xe, 0xb0,
+ 0x0, 0x6, 0xf3, 0x0,
/* U+58 "X" */
- 0x13, 0x20, 0x0, 0x2, 0x32, 0xd, 0xe1, 0x0,
- 0xc, 0xf1, 0x4, 0xf9, 0x0, 0x6f, 0x70, 0x0,
- 0x9f, 0x21, 0xec, 0x0, 0x0, 0x1e, 0xb9, 0xf2,
- 0x0, 0x0, 0x4, 0xff, 0x80, 0x0, 0x0, 0x1,
- 0xef, 0x30, 0x0, 0x0, 0x9, 0xfe, 0xb0, 0x0,
- 0x0, 0x4f, 0x84, 0xf7, 0x0, 0x0, 0xee, 0x0,
- 0xbe, 0x20, 0x8, 0xf4, 0x0, 0x2f, 0xb0, 0x3f,
- 0xb0, 0x0, 0x8, 0xf5,
+ 0x2f, 0x90, 0x0, 0x8, 0xf3, 0x8, 0xf3, 0x0,
+ 0x2f, 0x90, 0x0, 0xec, 0x0, 0xbe, 0x10, 0x0,
+ 0x5f, 0x65, 0xf6, 0x0, 0x0, 0xb, 0xee, 0xc0,
+ 0x0, 0x0, 0x2, 0xff, 0x30, 0x0, 0x0, 0x3,
+ 0xff, 0x40, 0x0, 0x0, 0xc, 0xed, 0xd0, 0x0,
+ 0x0, 0x6f, 0x54, 0xf7, 0x0, 0x1, 0xeb, 0x0,
+ 0xaf, 0x20, 0xa, 0xf2, 0x0, 0x1f, 0xb0, 0x3f,
+ 0x80, 0x0, 0x7, 0xf4,
/* U+59 "Y" */
- 0x23, 0x10, 0x0, 0x0, 0x43, 0x4f, 0x80, 0x0,
- 0x7, 0xf4, 0xb, 0xe1, 0x0, 0x1e, 0xc0, 0x2,
- 0xf8, 0x0, 0x8f, 0x40, 0x0, 0xae, 0x21, 0xea,
- 0x0, 0x0, 0x1f, 0xa8, 0xf2, 0x0, 0x0, 0x8,
- 0xfe, 0xa0, 0x0, 0x0, 0x1, 0xff, 0x10, 0x0,
- 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0, 0x0, 0xcc,
- 0x0, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0x0, 0xcc, 0x0, 0x0,
+ 0x9f, 0x10, 0x0, 0x7, 0xf3, 0x1f, 0x90, 0x0,
+ 0xe, 0xa0, 0x9, 0xf1, 0x0, 0x7f, 0x20, 0x1,
+ 0xf9, 0x0, 0xea, 0x0, 0x0, 0x8f, 0x17, 0xf2,
+ 0x0, 0x0, 0x1f, 0x9e, 0x90, 0x0, 0x0, 0x7,
+ 0xff, 0x10, 0x0, 0x0, 0x0, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0xf8, 0x0, 0x0,
/* U+5A "Z" */
- 0x13, 0x33, 0x33, 0x33, 0x23, 0xcc, 0xcc, 0xcd,
- 0xf8, 0x0, 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0,
- 0x4f, 0x70, 0x0, 0x0, 0x1d, 0xc0, 0x0, 0x0,
- 0xb, 0xf2, 0x0, 0x0, 0x5, 0xf7, 0x0, 0x0,
- 0x1, 0xec, 0x0, 0x0, 0x0, 0xbf, 0x20, 0x0,
- 0x0, 0x5f, 0x50, 0x0, 0x0, 0x1e, 0xc3, 0x33,
- 0x33, 0x34, 0xff, 0xff, 0xff, 0xfc,
+ 0x3f, 0xff, 0xff, 0xff, 0xb1, 0x44, 0x44, 0x48,
+ 0xf7, 0x0, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x0,
+ 0x8f, 0x30, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0,
+ 0xd, 0xd0, 0x0, 0x0, 0x7, 0xf3, 0x0, 0x0,
+ 0x2, 0xf8, 0x0, 0x0, 0x0, 0xcd, 0x0, 0x0,
+ 0x0, 0x7f, 0x40, 0x0, 0x0, 0x2f, 0xc4, 0x44,
+ 0x44, 0x45, 0xff, 0xff, 0xff, 0xff,
/* U+5B "[" */
- 0xcf, 0xf4, 0xcd, 0x41, 0xcc, 0x0, 0xcc, 0x0,
- 0xcc, 0x0, 0xcc, 0x0, 0xcc, 0x0, 0xcc, 0x0,
- 0xcc, 0x0, 0xcc, 0x0, 0xcc, 0x0, 0xcc, 0x0,
- 0xcc, 0x0, 0xcc, 0x0, 0xce, 0xb3, 0x68, 0x82,
+ 0x0, 0x0, 0xdf, 0xf1, 0xda, 0x30, 0xd9, 0x0,
+ 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0,
+ 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0,
+ 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0,
+ 0xdf, 0xf1, 0x23, 0x30,
/* U+5C "\\" */
- 0x23, 0x0, 0x0, 0x6, 0xf2, 0x0, 0x0, 0xf,
- 0x80, 0x0, 0x0, 0xad, 0x0, 0x0, 0x3, 0xf4,
- 0x0, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x7f, 0x10,
- 0x0, 0x1, 0xf6, 0x0, 0x0, 0xa, 0xc0, 0x0,
- 0x0, 0x5f, 0x30, 0x0, 0x0, 0xe9, 0x0, 0x0,
- 0x8, 0xe0, 0x0, 0x0, 0x2f, 0x60,
+ 0x8d, 0x0, 0x0, 0x2, 0xf3, 0x0, 0x0, 0xc,
+ 0x90, 0x0, 0x0, 0x6e, 0x0, 0x0, 0x1, 0xf5,
+ 0x0, 0x0, 0xa, 0xb0, 0x0, 0x0, 0x5f, 0x10,
+ 0x0, 0x0, 0xe6, 0x0, 0x0, 0x9, 0xc0, 0x0,
+ 0x0, 0x3f, 0x20, 0x0, 0x0, 0xd8, 0x0, 0x0,
+ 0x7, 0xe0, 0x0, 0x0, 0x2f, 0x40,
/* U+5D "]" */
- 0xff, 0xf4, 0xaf, 0x8, 0xf0, 0x8f, 0x8, 0xf0,
- 0x8f, 0x8, 0xf0, 0x8f, 0x8, 0xf0, 0x8f, 0x8,
- 0xf0, 0x8f, 0x8, 0xf0, 0x8f, 0xcd, 0xf8, 0x88,
+ 0x0, 0x0, 0xef, 0xf0, 0x38, 0xf0, 0x6, 0xf0,
+ 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0,
+ 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0,
+ 0x6, 0xf0, 0x6, 0xf0, 0x6, 0xf0, 0x7, 0xf0,
+ 0xef, 0xf0, 0x23, 0x30,
/* U+5E "^" */
- 0x0, 0x13, 0x0, 0x0, 0x9f, 0x30, 0x0, 0xfe,
- 0xa0, 0x6, 0xf7, 0xf1, 0xd, 0xa0, 0xf7, 0x3f,
- 0x30, 0x9d, 0x24, 0x0, 0x14,
+ 0x0, 0x5f, 0x0, 0x0, 0xb, 0xf6, 0x0, 0x2,
+ 0xfa, 0xc0, 0x0, 0x8c, 0x2f, 0x20, 0xe, 0x60,
+ 0xb9, 0x4, 0xf1, 0x5, 0xe0,
/* U+5F "_" */
- 0xff, 0xff, 0xff, 0xf3, 0x33, 0x33, 0x33, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf3,
+ 0x33, 0x33, 0x33, 0x30,
/* U+60 "`" */
- 0x1b, 0x80, 0x3, 0xf5, 0x0, 0x23,
+ 0x28, 0x20, 0xb, 0xc0, 0x1, 0xd6,
/* U+61 "a" */
- 0x0, 0x17, 0x77, 0x10, 0x3, 0xed, 0xbe, 0xe2,
- 0xb, 0xd0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0xdc,
- 0x1, 0x9c, 0xff, 0xfc, 0xd, 0xe5, 0x0, 0xcc,
- 0x2f, 0x80, 0x0, 0xec, 0xf, 0xa4, 0x4b, 0xfc,
- 0x6, 0xff, 0xf6, 0xcc, 0x0, 0x2, 0x0, 0x0,
+ 0x0, 0x8d, 0xfc, 0x40, 0xa, 0xe5, 0x48, 0xf2,
+ 0x4, 0x20, 0x0, 0xe7, 0x0, 0x7c, 0xef, 0xf8,
+ 0x9, 0xe5, 0x22, 0xe8, 0xf, 0x60, 0x0, 0xe8,
+ 0x1f, 0x60, 0x2, 0xf8, 0xc, 0xe6, 0x6e, 0xf9,
+ 0x2, 0xbf, 0xe6, 0xa9,
/* U+62 "b" */
- 0x33, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x47, 0x72, 0x0, 0xce, 0xfc, 0xef, 0x50,
- 0xce, 0x10, 0x1d, 0xd0, 0xcc, 0x0, 0x6, 0xf4,
- 0xcc, 0x0, 0x4, 0xf4, 0xcc, 0x0, 0x4, 0xf4,
- 0xcc, 0x0, 0x7, 0xf3, 0xcf, 0x63, 0x4e, 0xc0,
- 0xc8, 0xcf, 0xfd, 0x10, 0x0, 0x1, 0x10, 0x0,
+ 0xe8, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0,
+ 0xe8, 0x0, 0x0, 0x0, 0xe9, 0x9f, 0xe8, 0x0,
+ 0xef, 0x95, 0x8f, 0x80, 0xea, 0x0, 0x9, 0xe0,
+ 0xe8, 0x0, 0x4, 0xf2, 0xe8, 0x0, 0x3, 0xf3,
+ 0xe8, 0x0, 0x4, 0xf2, 0xea, 0x0, 0x9, 0xe0,
+ 0xef, 0x95, 0x8f, 0x80, 0xe7, 0x9f, 0xe9, 0x0,
/* U+63 "c" */
- 0x0, 0x16, 0x76, 0x10, 0x3, 0xee, 0xae, 0xc1,
- 0xc, 0xe1, 0x1, 0xf8, 0x1f, 0x80, 0x0, 0x65,
- 0x4f, 0x40, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x0,
- 0xf, 0xa0, 0x0, 0x97, 0x8, 0xe5, 0x17, 0xf5,
- 0x0, 0x9f, 0xff, 0x80, 0x0, 0x0, 0x20, 0x0,
+ 0x0, 0x6d, 0xfc, 0x50, 0x6, 0xf7, 0x49, 0xf4,
+ 0xe, 0x90, 0x0, 0xbb, 0x2f, 0x40, 0x0, 0x12,
+ 0x4f, 0x20, 0x0, 0x0, 0x2f, 0x40, 0x0, 0x0,
+ 0xe, 0x80, 0x0, 0x9a, 0x6, 0xf7, 0x48, 0xf4,
+ 0x0, 0x6d, 0xfc, 0x50,
/* U+64 "d" */
- 0x0, 0x0, 0x0, 0x23, 0x0, 0x0, 0x0, 0x8f,
- 0x0, 0x0, 0x0, 0x8f, 0x0, 0x0, 0x0, 0x8f,
- 0x0, 0x27, 0x74, 0x8f, 0x3, 0xee, 0xce, 0xcf,
- 0xc, 0xe1, 0x1, 0xdf, 0xf, 0x80, 0x0, 0x8f,
- 0x4f, 0x50, 0x0, 0x8f, 0x4f, 0x50, 0x0, 0x8f,
- 0xf, 0x90, 0x0, 0x9f, 0xa, 0xe5, 0x26, 0xff,
- 0x1, 0xcf, 0xfd, 0x7f, 0x0, 0x0, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x9e,
+ 0x0, 0x0, 0x0, 0x9e, 0x0, 0x8e, 0xfa, 0x9e,
+ 0x7, 0xf9, 0x59, 0xfe, 0xe, 0xa0, 0x0, 0xae,
+ 0x2f, 0x40, 0x0, 0x9e, 0x3f, 0x30, 0x0, 0x9e,
+ 0x2f, 0x40, 0x0, 0x9e, 0xe, 0x80, 0x0, 0x9e,
+ 0x7, 0xf6, 0x26, 0xfe, 0x0, 0x8e, 0xea, 0x9e,
/* U+65 "e" */
- 0x0, 0x16, 0x76, 0x10, 0x2, 0xde, 0xbf, 0xc1,
- 0xc, 0xe1, 0x2, 0xf7, 0x1f, 0x93, 0x33, 0xcb,
- 0x4f, 0xff, 0xff, 0xfc, 0x3f, 0x70, 0x0, 0x0,
- 0xf, 0xa0, 0x0, 0x0, 0x8, 0xf6, 0x11, 0x52,
- 0x0, 0x7f, 0xff, 0xe3, 0x0, 0x0, 0x21, 0x0,
+ 0x0, 0x5d, 0xfd, 0x40, 0x5, 0xf8, 0x4a, 0xf2,
+ 0xe, 0xa0, 0x0, 0xd9, 0x2f, 0x50, 0x0, 0x9c,
+ 0x4f, 0xff, 0xff, 0xfe, 0x3f, 0x63, 0x33, 0x33,
+ 0xe, 0x80, 0x0, 0x10, 0x6, 0xf8, 0x45, 0xd8,
+ 0x0, 0x5d, 0xfe, 0x80,
/* U+66 "f" */
- 0x0, 0x4, 0x31, 0x0, 0xcf, 0xf4, 0x4, 0xf7,
- 0x0, 0x8, 0xf1, 0x0, 0x6b, 0xf7, 0x60, 0x9e,
- 0xfc, 0x90, 0x8, 0xf0, 0x0, 0x8, 0xf0, 0x0,
- 0x8, 0xf0, 0x0, 0x8, 0xf0, 0x0, 0x8, 0xf0,
- 0x0, 0x8, 0xf0, 0x0, 0x8, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3c, 0xf8, 0x0, 0xdd,
+ 0x42, 0x1, 0xf5, 0x0, 0x2, 0xf4, 0x0, 0x8f,
+ 0xff, 0xf1, 0x15, 0xf6, 0x20, 0x3, 0xf4, 0x0,
+ 0x3, 0xf4, 0x0, 0x3, 0xf4, 0x0, 0x3, 0xf4,
+ 0x0, 0x3, 0xf4, 0x0, 0x3, 0xf4, 0x0, 0x3,
+ 0xf4, 0x0,
/* U+67 "g" */
- 0x0, 0x27, 0x74, 0x27, 0x3, 0xee, 0xce, 0xbf,
- 0xa, 0xf1, 0x0, 0xcf, 0xf, 0x90, 0x0, 0x8f,
- 0x1f, 0x80, 0x0, 0x8f, 0x1f, 0x80, 0x0, 0x8f,
- 0xf, 0xa0, 0x0, 0x9f, 0x8, 0xf6, 0x35, 0xef,
- 0x1, 0xaf, 0xfe, 0xbf, 0x0, 0x0, 0x20, 0x9f,
- 0x0, 0x30, 0x2, 0xeb, 0x2, 0xff, 0xff, 0xe2,
- 0x0, 0x25, 0x64, 0x0,
+ 0x0, 0x8e, 0xfa, 0x8e, 0x7, 0xf9, 0x59, 0xfe,
+ 0xe, 0xa0, 0x0, 0xae, 0x2f, 0x40, 0x0, 0x9e,
+ 0x3f, 0x30, 0x0, 0x9e, 0x2f, 0x40, 0x0, 0x9e,
+ 0xe, 0x90, 0x0, 0xae, 0x7, 0xf9, 0x59, 0xfe,
+ 0x0, 0x8e, 0xfa, 0xae, 0x0, 0x0, 0x0, 0xcb,
+ 0x9, 0xc5, 0x49, 0xf4, 0x0, 0x8e, 0xfc, 0x40,
/* U+68 "h" */
- 0x33, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0xcc,
- 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0xcc, 0x27,
- 0x75, 0xc, 0xdd, 0xce, 0xf6, 0xce, 0x10, 0xd,
- 0xcc, 0xc0, 0x0, 0x8f, 0xcc, 0x0, 0x8, 0xfc,
- 0xc0, 0x0, 0x8f, 0xcc, 0x0, 0x8, 0xfc, 0xc0,
- 0x0, 0x8f, 0xcc, 0x0, 0x8, 0xf0,
+ 0xe8, 0x0, 0x0, 0xe, 0x80, 0x0, 0x0, 0xe8,
+ 0x0, 0x0, 0xe, 0x88, 0xee, 0x90, 0xef, 0xa5,
+ 0x8f, 0x6e, 0xb0, 0x0, 0xca, 0xe8, 0x0, 0xb,
+ 0xbe, 0x80, 0x0, 0xbc, 0xe8, 0x0, 0xb, 0xce,
+ 0x80, 0x0, 0xbc, 0xe8, 0x0, 0xb, 0xce, 0x80,
+ 0x0, 0xbc,
/* U+69 "i" */
- 0x33, 0xcc, 0x66, 0x0, 0x66, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xb9, 0x76, 0x0, 0xca, 0xca, 0xca, 0xca, 0xca,
+ 0xca, 0xca, 0xca, 0xca,
/* U+6A "j" */
- 0x0, 0x33, 0x0, 0xcc, 0x0, 0x33, 0x0, 0x0,
- 0x0, 0x67, 0x0, 0xcf, 0x0, 0xcf, 0x0, 0xcf,
- 0x0, 0xcf, 0x0, 0xcf, 0x0, 0xcf, 0x0, 0xcf,
- 0x0, 0xcf, 0x0, 0xcf, 0x0, 0xdc, 0x8d, 0xf5,
- 0x26, 0x20,
+ 0x0, 0xc8, 0x0, 0x85, 0x0, 0x0, 0x0, 0xd9,
+ 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9,
+ 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9, 0x0, 0xd9,
+ 0x0, 0xd9, 0x26, 0xf7, 0x7f, 0xb0,
/* U+6B "k" */
- 0x33, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0xcc,
- 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0xcc, 0x0,
- 0x17, 0x5c, 0xc0, 0xb, 0xf3, 0xcc, 0x7, 0xf6,
- 0xc, 0xc3, 0xea, 0x0, 0xcf, 0xff, 0x10, 0xc,
- 0xc2, 0xf9, 0x0, 0xcc, 0x7, 0xf5, 0xc, 0xc0,
- 0xc, 0xe2, 0xcc, 0x0, 0x2f, 0xb0,
+ 0xe8, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0,
+ 0xe8, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x7f, 0x40,
+ 0xe8, 0x6, 0xf6, 0x0, 0xe8, 0x4f, 0x80, 0x0,
+ 0xeb, 0xfb, 0x0, 0x0, 0xef, 0xfe, 0x0, 0x0,
+ 0xed, 0x3f, 0xa0, 0x0, 0xe8, 0x6, 0xf5, 0x0,
+ 0xe8, 0x0, 0xae, 0x10, 0xe8, 0x0, 0x1e, 0xb0,
/* U+6C "l" */
- 0x33, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
- 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
+ 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
+ 0xca, 0xca, 0xca, 0xca,
/* U+6D "m" */
- 0x64, 0x27, 0x74, 0x2, 0x77, 0x30, 0xcb, 0xec,
- 0xff, 0x7e, 0xce, 0xf4, 0xce, 0x10, 0x2f, 0xf3,
- 0x1, 0xfb, 0xcc, 0x0, 0xc, 0xc0, 0x0, 0xcc,
- 0xcc, 0x0, 0xc, 0xc0, 0x0, 0xcf, 0xcc, 0x0,
- 0xc, 0xc0, 0x0, 0xcf, 0xcc, 0x0, 0xc, 0xc0,
- 0x0, 0xcf, 0xcc, 0x0, 0xc, 0xc0, 0x0, 0xcf,
- 0xcc, 0x0, 0xc, 0xc0, 0x0, 0xcf,
+ 0xe8, 0x9f, 0xf9, 0x8, 0xee, 0xa1, 0xef, 0x85,
+ 0x9f, 0xdb, 0x57, 0xf9, 0xea, 0x0, 0xd, 0xe0,
+ 0x0, 0x9d, 0xe8, 0x0, 0xb, 0xb0, 0x0, 0x8e,
+ 0xe8, 0x0, 0xb, 0xb0, 0x0, 0x8f, 0xe8, 0x0,
+ 0xb, 0xb0, 0x0, 0x8f, 0xe8, 0x0, 0xb, 0xb0,
+ 0x0, 0x8f, 0xe8, 0x0, 0xb, 0xb0, 0x0, 0x8f,
+ 0xe8, 0x0, 0xb, 0xb0, 0x0, 0x8f,
/* U+6E "n" */
- 0x64, 0x27, 0x75, 0xc, 0xad, 0xcd, 0xf6, 0xce,
- 0x10, 0xd, 0xcc, 0xc0, 0x0, 0x9f, 0xcc, 0x0,
- 0x8, 0xfc, 0xc0, 0x0, 0x8f, 0xcc, 0x0, 0x8,
- 0xfc, 0xc0, 0x0, 0x8f, 0xcc, 0x0, 0x8, 0xf0,
+ 0xe8, 0x9e, 0xe9, 0xe, 0xfa, 0x58, 0xf6, 0xeb,
+ 0x0, 0xc, 0xae, 0x80, 0x0, 0xbb, 0xe8, 0x0,
+ 0xb, 0xce, 0x80, 0x0, 0xbc, 0xe8, 0x0, 0xb,
+ 0xce, 0x80, 0x0, 0xbc, 0xe8, 0x0, 0xb, 0xc0,
/* U+6F "o" */
- 0x0, 0x16, 0x76, 0x10, 0x0, 0x2d, 0xeb, 0xee,
- 0x30, 0xc, 0xe1, 0x1, 0xdc, 0x0, 0xf8, 0x0,
- 0x6, 0xf3, 0x4f, 0x40, 0x0, 0x4f, 0x42, 0xf6,
- 0x0, 0x4, 0xf4, 0xf, 0xa0, 0x0, 0x8f, 0x10,
- 0x8f, 0x61, 0x5e, 0x90, 0x0, 0x8f, 0xff, 0x90,
- 0x0, 0x0, 0x1, 0x0, 0x0,
+ 0x0, 0x5d, 0xfd, 0x70, 0x0, 0x5f, 0x94, 0x7f,
+ 0x70, 0xe, 0xa0, 0x0, 0x8f, 0x13, 0xf4, 0x0,
+ 0x2, 0xf5, 0x4f, 0x30, 0x0, 0xf, 0x63, 0xf4,
+ 0x0, 0x2, 0xf5, 0xe, 0x90, 0x0, 0x8f, 0x10,
+ 0x5f, 0x94, 0x7f, 0x70, 0x0, 0x6d, 0xfd, 0x70,
+ 0x0,
/* U+70 "p" */
- 0x62, 0x47, 0x72, 0x0, 0xcc, 0xec, 0xef, 0x50,
- 0xce, 0x10, 0x1e, 0xd0, 0xcc, 0x0, 0x6, 0xf3,
- 0xcc, 0x0, 0x4, 0xf4, 0xcc, 0x0, 0x4, 0xf4,
- 0xcc, 0x0, 0x8, 0xf2, 0xce, 0x40, 0x5e, 0xc0,
- 0xcd, 0xdf, 0xfd, 0x10, 0xcc, 0x1, 0x10, 0x0,
- 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0,
- 0x33, 0x0, 0x0, 0x0,
+ 0xe8, 0xaf, 0xe8, 0x0, 0xef, 0x62, 0x6f, 0x70,
+ 0xe9, 0x0, 0x9, 0xe0, 0xe8, 0x0, 0x4, 0xf1,
+ 0xe8, 0x0, 0x3, 0xf3, 0xe8, 0x0, 0x5, 0xf1,
+ 0xe9, 0x0, 0xa, 0xe0, 0xef, 0x74, 0x8f, 0x70,
+ 0xe9, 0xae, 0xe9, 0x0, 0xe8, 0x0, 0x0, 0x0,
+ 0xe8, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0,
/* U+71 "q" */
- 0x0, 0x27, 0x74, 0x36, 0x3, 0xee, 0xae, 0xcc,
- 0xc, 0xe1, 0x1, 0xec, 0xf, 0x80, 0x0, 0xcc,
- 0x4f, 0x50, 0x0, 0xcc, 0x4f, 0x50, 0x0, 0xcc,
- 0xf, 0x90, 0x0, 0xcc, 0xa, 0xe4, 0x6, 0xfc,
- 0x1, 0xcf, 0xfd, 0xdc, 0x0, 0x0, 0x20, 0xcc,
- 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0, 0xcc,
- 0x0, 0x0, 0x0, 0x33,
+ 0x0, 0x8e, 0xfa, 0x8e, 0x7, 0xf8, 0x48, 0xfe,
+ 0xe, 0x90, 0x0, 0xae, 0x2f, 0x40, 0x0, 0x9e,
+ 0x3f, 0x30, 0x0, 0x9e, 0x2f, 0x40, 0x0, 0x9e,
+ 0xe, 0x90, 0x0, 0xae, 0x7, 0xf8, 0x48, 0xfe,
+ 0x0, 0x8e, 0xea, 0xae, 0x0, 0x0, 0x0, 0x9e,
+ 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x9e,
/* U+72 "r" */
- 0x64, 0x37, 0x2c, 0xae, 0xf4, 0xce, 0x10, 0xc,
- 0xc0, 0x0, 0xcc, 0x0, 0xc, 0xc0, 0x0, 0xcc,
- 0x0, 0xc, 0xc0, 0x0, 0xcc, 0x0, 0x0,
+ 0xe9, 0xbf, 0x2e, 0xf8, 0x51, 0xea, 0x0, 0xe,
+ 0x80, 0x0, 0xe8, 0x0, 0xe, 0x80, 0x0, 0xe8,
+ 0x0, 0xe, 0x80, 0x0, 0xe8, 0x0, 0x0,
/* U+73 "s" */
- 0x2, 0x77, 0x50, 0x6, 0xfd, 0xaf, 0xc0, 0xdd,
- 0x0, 0x4f, 0x5b, 0xd2, 0x0, 0x0, 0x3c, 0xfd,
- 0x82, 0x0, 0x2, 0x7d, 0xe3, 0x84, 0x0, 0x1f,
- 0x8d, 0xc3, 0x7, 0xf6, 0x3c, 0xff, 0xf8, 0x0,
- 0x0, 0x20, 0x0,
+ 0x0, 0x9e, 0xfb, 0x30, 0xa, 0xe5, 0x4c, 0xe1,
+ 0xe, 0x80, 0x1, 0xb3, 0xa, 0xe6, 0x10, 0x0,
+ 0x0, 0x8d, 0xfc, 0x40, 0x0, 0x0, 0x29, 0xf3,
+ 0x2d, 0x40, 0x0, 0xf6, 0xc, 0xd5, 0x49, 0xf2,
+ 0x1, 0x9e, 0xfc, 0x40,
/* U+74 "t" */
- 0x4, 0x70, 0x0, 0x8f, 0x0, 0x6b, 0xf7, 0x69,
- 0xef, 0xc9, 0x8, 0xf0, 0x0, 0x8f, 0x0, 0x8,
- 0xf0, 0x0, 0x8f, 0x0, 0x8, 0xf0, 0x0, 0x6f,
- 0x51, 0x1, 0xdf, 0xc0, 0x0, 0x20,
+ 0x6, 0xf1, 0x0, 0x6f, 0x10, 0xef, 0xff, 0xa2,
+ 0x7f, 0x31, 0x6, 0xf1, 0x0, 0x6f, 0x10, 0x6,
+ 0xf1, 0x0, 0x6f, 0x10, 0x6, 0xf1, 0x0, 0x4f,
+ 0x73, 0x0, 0xaf, 0x90,
/* U+75 "u" */
- 0x86, 0x0, 0x4, 0x7f, 0xc0, 0x0, 0x8f, 0xfc,
- 0x0, 0x8, 0xff, 0xc0, 0x0, 0x8f, 0xfc, 0x0,
- 0x8, 0xff, 0xc0, 0x0, 0x8f, 0xcc, 0x0, 0x9,
- 0xf8, 0xf4, 0x26, 0xff, 0x1c, 0xff, 0xc9, 0xf0,
- 0x1, 0x10, 0x0,
+ 0xf8, 0x0, 0xb, 0xbf, 0x80, 0x0, 0xbb, 0xf8,
+ 0x0, 0xb, 0xbf, 0x80, 0x0, 0xbb, 0xf8, 0x0,
+ 0xb, 0xbe, 0x80, 0x0, 0xbb, 0xda, 0x0, 0xd,
+ 0xb9, 0xf6, 0x5b, 0xfb, 0x1a, 0xfe, 0x9b, 0xb0,
/* U+76 "v" */
- 0x47, 0x0, 0x0, 0x76, 0x5f, 0x50, 0x2, 0xf7,
- 0xe, 0xa0, 0x7, 0xf1, 0x9, 0xe0, 0xc, 0xb0,
- 0x2, 0xf5, 0x1f, 0x50, 0x0, 0xda, 0x6f, 0x0,
- 0x0, 0x6e, 0xba, 0x0, 0x0, 0x1f, 0xf3, 0x0,
- 0x0, 0xb, 0xe0, 0x0,
+ 0x9e, 0x0, 0x2, 0xf4, 0x3f, 0x30, 0x7, 0xe0,
+ 0xe, 0x80, 0xc, 0x90, 0x8, 0xd0, 0x1f, 0x40,
+ 0x3, 0xf2, 0x6e, 0x0, 0x0, 0xd7, 0xb9, 0x0,
+ 0x0, 0x8d, 0xf4, 0x0, 0x0, 0x2f, 0xe0, 0x0,
+ 0x0, 0xd, 0x90, 0x0,
/* U+77 "w" */
- 0x47, 0x0, 0x5, 0x60, 0x0, 0x85, 0x6f, 0x30,
- 0xe, 0xe0, 0x2, 0xf7, 0x1f, 0x70, 0x3f, 0xf5,
- 0x6, 0xf2, 0xd, 0xb0, 0x9c, 0xc9, 0x9, 0xe0,
- 0x8, 0xe0, 0xd7, 0x7d, 0xd, 0x90, 0x3, 0xf5,
- 0xf2, 0x2f, 0x4f, 0x50, 0x0, 0xfc, 0xe0, 0xd,
- 0xcf, 0x0, 0x0, 0xaf, 0x90, 0x7, 0xfb, 0x0,
- 0x0, 0x5f, 0x30, 0x2, 0xf6, 0x0,
+ 0x8e, 0x0, 0xb, 0xb0, 0x0, 0xe8, 0x4f, 0x20,
+ 0xf, 0xf0, 0x2, 0xf3, 0xf, 0x60, 0x5d, 0xe5,
+ 0x6, 0xf0, 0xb, 0xa0, 0x99, 0xa9, 0xa, 0xb0,
+ 0x6, 0xe0, 0xe4, 0x5e, 0xe, 0x60, 0x2, 0xf5,
+ 0xf0, 0xf, 0x5f, 0x20, 0x0, 0xed, 0xb0, 0xb,
+ 0xdd, 0x0, 0x0, 0x9f, 0x60, 0x6, 0xf9, 0x0,
+ 0x0, 0x5f, 0x10, 0x2, 0xf5, 0x0,
/* U+78 "x" */
- 0x37, 0x30, 0x3, 0x73, 0x1e, 0xb0, 0xc, 0xe1,
- 0x4, 0xf5, 0x6f, 0x50, 0x0, 0x9d, 0xdb, 0x0,
- 0x0, 0x1f, 0xf1, 0x0, 0x0, 0x5f, 0xf5, 0x0,
- 0x1, 0xea, 0x9e, 0x10, 0xb, 0xf1, 0x1f, 0xa0,
- 0x5f, 0x70, 0x6, 0xf5,
+ 0x4f, 0x50, 0x7, 0xf3, 0xa, 0xe0, 0x1f, 0x90,
+ 0x1, 0xf8, 0xae, 0x0, 0x0, 0x6f, 0xf5, 0x0,
+ 0x0, 0xf, 0xe0, 0x0, 0x0, 0x7f, 0xf6, 0x0,
+ 0x2, 0xf7, 0x8e, 0x10, 0xb, 0xd0, 0xe, 0xa0,
+ 0x5f, 0x40, 0x6, 0xf4,
/* U+79 "y" */
- 0x67, 0x0, 0x0, 0x86, 0x7f, 0x30, 0x3, 0xf7,
- 0x1f, 0x90, 0x9, 0xf2, 0xb, 0xd0, 0xe, 0xb0,
- 0x5, 0xf3, 0x3f, 0x60, 0x0, 0xe9, 0x9f, 0x10,
- 0x0, 0x9d, 0xda, 0x0, 0x0, 0x2f, 0xf5, 0x0,
- 0x0, 0xd, 0xe0, 0x0, 0x0, 0xf, 0x90, 0x0,
- 0x0, 0x7f, 0x20, 0x0, 0x1f, 0xf9, 0x0, 0x0,
- 0x17, 0x30, 0x0, 0x0,
+ 0xae, 0x0, 0x5, 0xf3, 0x4f, 0x30, 0x9, 0xd0,
+ 0xe, 0x80, 0xe, 0x80, 0x9, 0xd0, 0x3f, 0x20,
+ 0x3, 0xf2, 0x8d, 0x0, 0x0, 0xd8, 0xc7, 0x0,
+ 0x0, 0x8e, 0xf2, 0x0, 0x0, 0x2f, 0xc0, 0x0,
+ 0x0, 0xe, 0x70, 0x0, 0x0, 0x3f, 0x10, 0x0,
+ 0x15, 0xda, 0x0, 0x0, 0x5f, 0xb1, 0x0, 0x0,
/* U+7A "z" */
- 0x27, 0x77, 0x77, 0x72, 0x3c, 0xcc, 0xcf, 0xf3,
- 0x0, 0x0, 0x4f, 0x80, 0x0, 0x1, 0xec, 0x0,
- 0x0, 0xc, 0xf1, 0x0, 0x0, 0x7f, 0x50, 0x0,
- 0x3, 0xf9, 0x0, 0x0, 0x1d, 0xe3, 0x33, 0x32,
- 0x4f, 0xff, 0xff, 0xf8,
+ 0x3f, 0xff, 0xff, 0xf2, 0x4, 0x44, 0x4e, 0xd0,
+ 0x0, 0x0, 0x8f, 0x20, 0x0, 0x3, 0xf7, 0x0,
+ 0x0, 0xd, 0xb0, 0x0, 0x0, 0xae, 0x10, 0x0,
+ 0x5, 0xf5, 0x0, 0x0, 0x1e, 0xc3, 0x33, 0x31,
+ 0x5f, 0xff, 0xff, 0xf6,
/* U+7B "{" */
- 0x0, 0x0, 0x50, 0x0, 0x1c, 0xe2, 0x0, 0x8f,
- 0x10, 0x0, 0xcc, 0x0, 0x0, 0xcc, 0x0, 0x0,
- 0xdc, 0x0, 0x1, 0xf9, 0x0, 0x4a, 0xf2, 0x0,
- 0x6f, 0xb0, 0x0, 0x3, 0xf7, 0x0, 0x0, 0xeb,
- 0x0, 0x0, 0xcc, 0x0, 0x0, 0xcc, 0x0, 0x0,
- 0xbd, 0x0, 0x0, 0x3f, 0x91, 0x0, 0x3, 0xa1,
+ 0x0, 0x0, 0x30, 0x0, 0xa, 0xe1, 0x0, 0x6f,
+ 0x10, 0x0, 0xbb, 0x0, 0x0, 0xd9, 0x0, 0x0,
+ 0xd9, 0x0, 0x0, 0xe8, 0x0, 0x5, 0xf4, 0x0,
+ 0x8f, 0xa0, 0x0, 0x18, 0xf2, 0x0, 0x0, 0xe8,
+ 0x0, 0x0, 0xd9, 0x0, 0x0, 0xd9, 0x0, 0x0,
+ 0xca, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x1c, 0xc1,
+ 0x0, 0x0, 0x60,
/* U+7C "|" */
- 0x32, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
- 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
+ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
+ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
/* U+7D "}" */
- 0x41, 0x0, 0x8, 0xf4, 0x0, 0xa, 0xe0, 0x0,
- 0x4f, 0x40, 0x4, 0xf4, 0x0, 0x4f, 0x40, 0x3,
- 0xf6, 0x0, 0xa, 0xe7, 0x0, 0x5f, 0xd0, 0x1f,
- 0x90, 0x4, 0xf4, 0x0, 0x4f, 0x40, 0x4, 0xf4,
- 0x0, 0x7f, 0x20, 0x4e, 0x90, 0x8, 0x60, 0x0,
+ 0x30, 0x0, 0x9, 0xe2, 0x0, 0xa, 0xd0, 0x0,
+ 0x4f, 0x20, 0x3, 0xf3, 0x0, 0x3f, 0x30, 0x2,
+ 0xf4, 0x0, 0xd, 0xb1, 0x0, 0x3f, 0xe0, 0xc,
+ 0xd3, 0x2, 0xf5, 0x0, 0x3f, 0x30, 0x3, 0xf3,
+ 0x0, 0x4f, 0x20, 0x9, 0xe0, 0x7, 0xf4, 0x0,
+ 0x52, 0x0, 0x0,
/* U+7E "~" */
- 0x2, 0x31, 0x0, 0x0, 0x5, 0xef, 0xf7, 0x0,
- 0x5a, 0xe7, 0x7, 0xfb, 0x7d, 0x86, 0x10, 0x3,
- 0xbc, 0x90,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xd3, 0x0,
+ 0x6c, 0xac, 0x5a, 0xf6, 0x2c, 0x8d, 0x50, 0x7,
+ 0xff, 0xc1, 0x0, 0x0, 0x1, 0x30, 0x0,
/* U+F001 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x74, 0x0,
- 0x0, 0x0, 0x0, 0x58, 0xdf, 0xfc, 0x0, 0x0,
- 0x6, 0x9e, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f,
- 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0xfc, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xd7, 0xac, 0x0, 0x0, 0x8f, 0xfb, 0x61, 0x0,
- 0x8c, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x0, 0x8c,
- 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x8c, 0x0,
- 0x0, 0x8c, 0x0, 0x3, 0x64, 0xac, 0x0, 0x0,
- 0x8c, 0x0, 0xaf, 0xff, 0xfc, 0x0, 0x20, 0x8c,
- 0x0, 0xff, 0xff, 0xfb, 0x6d, 0xff, 0xec, 0x0,
- 0x4d, 0xff, 0xa1, 0xff, 0xff, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0x44, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xdc,
+ 0x0, 0x0, 0x0, 0x0, 0x16, 0xbf, 0xff, 0xff,
+ 0x0, 0x0, 0x3, 0x8d, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff,
+ 0x0, 0x0, 0xff, 0xff, 0xea, 0x51, 0x0, 0xff,
+ 0x0, 0x0, 0xff, 0x83, 0x0, 0x0, 0x0, 0xff,
+ 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
+ 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
+ 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
+ 0x0, 0x0, 0xff, 0x0, 0x0, 0x2b, 0xff, 0xff,
+ 0x0, 0x0, 0xff, 0x0, 0x0, 0xdf, 0xff, 0xff,
+ 0x2b, 0xff, 0xff, 0x0, 0x0, 0xdf, 0xff, 0xfd,
+ 0xdf, 0xff, 0xff, 0x0, 0x0, 0x2b, 0xff, 0xb2,
+ 0xdf, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2b, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F008 "" */
- 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x50, 0xfb, 0x8f, 0xf8, 0x88, 0x88, 0x88, 0xdf,
- 0x89, 0xf1, 0xf4, 0x8, 0x80, 0x0, 0x0, 0x0,
- 0x8c, 0x0, 0xf4, 0xf6, 0x3a, 0x80, 0x0, 0x0,
- 0x0, 0x8c, 0x34, 0xf4, 0xff, 0xff, 0x80, 0x0,
- 0x0, 0x0, 0x8f, 0xff, 0xf4, 0xf5, 0x9, 0x80,
- 0x0, 0x0, 0x0, 0x8d, 0x1, 0xf4, 0xf4, 0x8,
- 0x80, 0x0, 0x0, 0x0, 0x8c, 0x0, 0xf4, 0xfc,
- 0xbe, 0xeb, 0xbb, 0xbb, 0xbb, 0xdf, 0xbc, 0xf4,
- 0xfa, 0x8d, 0xd8, 0x88, 0x88, 0x88, 0xce, 0x89,
- 0xf4, 0xf4, 0x8, 0x80, 0x0, 0x0, 0x0, 0x8c,
- 0x0, 0xf4, 0xf7, 0x3b, 0x80, 0x0, 0x0, 0x0,
- 0x8d, 0x34, 0xf4, 0xff, 0xcf, 0x80, 0x0, 0x0,
- 0x0, 0x8f, 0xde, 0xf4, 0xf4, 0x9, 0x80, 0x0,
- 0x0, 0x0, 0x8c, 0x0, 0xf4, 0xf4, 0x9, 0x90,
- 0x0, 0x0, 0x0, 0x8c, 0x0, 0xf4, 0xde, 0xbf,
- 0xfb, 0xbb, 0xbb, 0xbb, 0xff, 0xcd, 0xf0, 0x14,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x10,
+ 0xd0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xd,
+ 0xff, 0xff, 0xc8, 0x88, 0x88, 0x8c, 0xff, 0xff,
+ 0xf0, 0xf, 0x80, 0x0, 0x0, 0x8, 0xf0, 0xf,
+ 0xf0, 0xf, 0x80, 0x0, 0x0, 0x8, 0xf0, 0xf,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xf0, 0xf, 0xec, 0xcc, 0xcc, 0xce, 0xf0, 0xf,
+ 0xf0, 0xf, 0xec, 0xcc, 0xcc, 0xce, 0xf0, 0xf,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xf0, 0xf, 0x80, 0x0, 0x0, 0x8, 0xf0, 0xf,
+ 0xf0, 0xf, 0x80, 0x0, 0x0, 0x8, 0xf0, 0xf,
+ 0xff, 0xff, 0xc8, 0x88, 0x88, 0x8c, 0xff, 0xff,
+ 0xd0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xd,
/* U+F00B "" */
- 0x77, 0x77, 0x31, 0x77, 0x77, 0x77, 0x77, 0x76,
- 0xff, 0xff, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xbc, 0xcc, 0x52, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb,
+ 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0x72, 0xef, 0xff, 0xff, 0xff, 0xfc,
- 0xff, 0xff, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x58, 0x88, 0x10, 0x78, 0x88, 0x88, 0x88, 0x85,
- 0x57, 0x77, 0x10, 0x77, 0x77, 0x77, 0x77, 0x75,
- 0xff, 0xff, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xdf, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xdf, 0xff, 0x73, 0xff, 0xff, 0xff, 0xff, 0xfd,
/* U+F00C "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xff, 0xfe, 0x3, 0x50, 0x0,
- 0x0, 0xaf, 0xff, 0xf3, 0x3e, 0xf9, 0x0, 0xa,
- 0xff, 0xff, 0x30, 0xef, 0xff, 0x90, 0xaf, 0xff,
- 0xf3, 0x0, 0x6f, 0xff, 0xfb, 0xff, 0xff, 0x30,
- 0x0, 0x6, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6c, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xb1,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfc,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xc0,
+ 0x1b, 0xa0, 0x0, 0x0, 0xb, 0xff, 0xfc, 0x0,
+ 0xcf, 0xfb, 0x0, 0x0, 0xbf, 0xff, 0xc0, 0x0,
+ 0xbf, 0xff, 0xb0, 0xb, 0xff, 0xfc, 0x0, 0x0,
+ 0xc, 0xff, 0xfb, 0xbf, 0xff, 0xc0, 0x0, 0x0,
+ 0x0, 0xcf, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0xc, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0,
/* U+F00D "" */
- 0x3, 0x50, 0x0, 0x1, 0x51, 0x3, 0xef, 0x60,
- 0x1, 0xcf, 0xc1, 0xff, 0xff, 0x61, 0xcf, 0xff,
- 0x86, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x6, 0xff,
- 0xff, 0xff, 0xf3, 0x0, 0x7, 0xff, 0xff, 0xf3,
- 0x0, 0x1, 0xcf, 0xff, 0xff, 0x60, 0x1, 0xcf,
- 0xff, 0xff, 0xff, 0x60, 0xcf, 0xff, 0xf8, 0xff,
- 0xff, 0x5d, 0xff, 0xf3, 0x6, 0xff, 0xf7, 0x1d,
- 0xf3, 0x0, 0x6, 0xfa, 0x0, 0x1, 0x0, 0x0,
- 0x2, 0x0,
+ 0x3, 0x0, 0x0, 0x0, 0x3, 0x8, 0xfc, 0x10,
+ 0x0, 0x1c, 0xf8, 0xff, 0xfc, 0x10, 0x1c, 0xff,
+ 0xf5, 0xff, 0xfc, 0x2c, 0xff, 0xf5, 0x5, 0xff,
+ 0xff, 0xff, 0xf5, 0x0, 0x5, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0x1d, 0xff, 0xfd, 0x10, 0x0, 0x1c,
+ 0xff, 0xff, 0xfc, 0x10, 0x1c, 0xff, 0xf9, 0xff,
+ 0xfc, 0x1c, 0xff, 0xf5, 0x5, 0xff, 0xfc, 0xdf,
+ 0xf5, 0x0, 0x5, 0xff, 0xd1, 0xa4, 0x0, 0x0,
+ 0x4, 0xa1,
/* U+F011 "" */
- 0x0, 0x0, 0x0, 0xa7, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0x0, 0x0, 0x0, 0x0, 0x15,
- 0x14, 0xff, 0x2, 0x50, 0x0, 0x3, 0xcf, 0x84,
- 0xff, 0xc, 0xf9, 0x0, 0xd, 0xff, 0x34, 0xff,
- 0x9, 0xff, 0x80, 0x6f, 0xf4, 0x4, 0xff, 0x0,
- 0xaf, 0xf2, 0xbf, 0xa0, 0x4, 0xff, 0x0, 0x1f,
- 0xf7, 0xff, 0x60, 0x3, 0xff, 0x0, 0xc, 0xfa,
- 0xff, 0x40, 0x0, 0x32, 0x0, 0x9, 0xfc, 0xef,
- 0x70, 0x0, 0x0, 0x0, 0xd, 0xf9, 0xaf, 0xd0,
- 0x0, 0x0, 0x0, 0x3f, 0xf5, 0x2f, 0xf9, 0x0,
- 0x0, 0x1, 0xcf, 0xe0, 0x8, 0xff, 0xc5, 0x33,
- 0x7e, 0xff, 0x30, 0x0, 0x9f, 0xff, 0xff, 0xff,
- 0xf5, 0x0, 0x0, 0x4, 0xbf, 0xff, 0xea, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4f, 0xe0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x10, 0x6f, 0xf1, 0x3, 0x10, 0x0,
+ 0x0, 0x5f, 0xd0, 0x6f, 0xf1, 0x3f, 0xd1, 0x0,
+ 0x3, 0xff, 0xf1, 0x6f, 0xf1, 0x5f, 0xfd, 0x0,
+ 0xd, 0xff, 0x40, 0x6f, 0xf1, 0x9, 0xff, 0x70,
+ 0x4f, 0xf7, 0x0, 0x6f, 0xf1, 0x0, 0xcf, 0xe0,
+ 0x9f, 0xf0, 0x0, 0x6f, 0xf1, 0x0, 0x5f, 0xf3,
+ 0xbf, 0xc0, 0x0, 0x6f, 0xf1, 0x0, 0x2f, 0xf5,
+ 0xbf, 0xc0, 0x0, 0x4f, 0xe0, 0x0, 0x1f, 0xf6,
+ 0xaf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
+ 0x6f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf0,
+ 0xf, 0xfe, 0x10, 0x0, 0x0, 0x5, 0xff, 0xa0,
+ 0x6, 0xff, 0xd3, 0x0, 0x0, 0x7f, 0xff, 0x20,
+ 0x0, 0x9f, 0xff, 0xda, 0xbe, 0xff, 0xf4, 0x0,
+ 0x0, 0x6, 0xff, 0xff, 0xff, 0xfd, 0x30, 0x0,
+ 0x0, 0x0, 0x17, 0xbd, 0xca, 0x50, 0x0, 0x0,
/* U+F013 "" */
- 0x0, 0x0, 0x4, 0x77, 0x20, 0x0, 0x0, 0x0,
- 0x22, 0x9, 0xff, 0x40, 0x30, 0x0, 0x3, 0xee,
- 0x7d, 0xff, 0xb8, 0xf9, 0x0, 0xb, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x60, 0x2, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0x0, 0x13, 0xef, 0xf8, 0x12, 0xcf,
- 0xfb, 0x30, 0xff, 0xff, 0xd0, 0x0, 0x1f, 0xff,
- 0xfc, 0xff, 0xff, 0xa0, 0x0, 0xf, 0xff, 0xfc,
- 0xac, 0xff, 0xe1, 0x0, 0x4f, 0xff, 0xc7, 0x0,
- 0xef, 0xfd, 0x78, 0xef, 0xf9, 0x0, 0x6, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x30, 0x9, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x50, 0x0, 0xaa, 0x1c, 0xff,
- 0x73, 0xc6, 0x0, 0x0, 0x0, 0x8, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x44, 0x0, 0x0,
- 0x0,
-
- /* U+F014 "" */
- 0x0, 0x0, 0x77, 0x77, 0x40, 0x0, 0x0, 0x0,
- 0x7e, 0x88, 0x9f, 0x10, 0x0, 0x43, 0x3d, 0x83,
- 0x33, 0xd8, 0x33, 0x2c, 0xfd, 0xcc, 0xcc, 0xcc,
- 0xcf, 0xe6, 0xc, 0x40, 0x0, 0x0, 0x0, 0xc8,
- 0x0, 0xc4, 0x44, 0x26, 0x7, 0x1c, 0x80, 0xc,
- 0x48, 0x84, 0xc0, 0xf4, 0xc8, 0x0, 0xc4, 0x88,
- 0x4c, 0xf, 0x4c, 0x80, 0xc, 0x48, 0x84, 0xc0,
- 0xf4, 0xc8, 0x0, 0xc4, 0x88, 0x4c, 0xf, 0x4c,
- 0x80, 0xc, 0x48, 0x84, 0xc0, 0xf4, 0xc8, 0x0,
- 0xc4, 0x22, 0x13, 0x4, 0xc, 0x80, 0xc, 0x50,
- 0x0, 0x0, 0x0, 0xd7, 0x0, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0x10, 0x0, 0x24, 0x44, 0x44, 0x44,
- 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8b, 0xb8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x30, 0x6, 0xff, 0xff, 0x60, 0x3, 0x0,
+ 0x4, 0xfd, 0xdf, 0xff, 0xff, 0xfd, 0xef, 0x40,
+ 0xd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
+ 0x4f, 0xff, 0xff, 0xf9, 0x9f, 0xff, 0xff, 0xf4,
+ 0x8, 0xff, 0xff, 0x20, 0x2, 0xff, 0xff, 0x80,
+ 0x0, 0xff, 0xf9, 0x0, 0x0, 0x9f, 0xff, 0x0,
+ 0x0, 0xff, 0xf9, 0x0, 0x0, 0x9f, 0xff, 0x0,
+ 0x8, 0xff, 0xff, 0x20, 0x2, 0xff, 0xff, 0x80,
+ 0x4f, 0xff, 0xff, 0xf9, 0x9f, 0xff, 0xff, 0xf4,
+ 0xd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
+ 0x4, 0xfe, 0xdf, 0xff, 0xff, 0xfd, 0xdf, 0x40,
+ 0x0, 0x30, 0x6, 0xff, 0xff, 0x60, 0x3, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8b, 0xb8, 0x0, 0x0, 0x0,
/* U+F015 "" */
- 0x0, 0x0, 0x0, 0x16, 0x10, 0x57, 0x40, 0x0,
- 0x0, 0x0, 0x3e, 0xfc, 0x2c, 0xf8, 0x0, 0x0,
- 0x0, 0x6e, 0xd4, 0xee, 0xdf, 0x80, 0x0, 0x0,
- 0x8f, 0xa7, 0xe5, 0xdf, 0xf8, 0x0, 0x1, 0x9f,
- 0x89, 0xff, 0xf6, 0xaf, 0xa0, 0x1, 0xcf, 0x7a,
- 0xff, 0xff, 0xf9, 0x7f, 0xb1, 0xbf, 0x6c, 0xff,
- 0xff, 0xff, 0xfc, 0x6f, 0x71, 0x1c, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x20, 0x0, 0xcf, 0xff, 0xa8,
- 0xcf, 0xff, 0x80, 0x0, 0xc, 0xff, 0xf4, 0x8,
- 0xff, 0xf8, 0x0, 0x0, 0xcf, 0xff, 0x40, 0x8f,
- 0xff, 0x80, 0x0, 0xb, 0xff, 0xf4, 0x8, 0xff,
- 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0xdd, 0x30, 0x3f, 0xf3,
+ 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf5, 0x4f,
+ 0xf4, 0x0, 0x0, 0x0, 0x9, 0xff, 0x99, 0xff,
+ 0xbf, 0xf4, 0x0, 0x0, 0x1, 0xbf, 0xf6, 0x22,
+ 0x6f, 0xff, 0xf4, 0x0, 0x0, 0x2d, 0xfe, 0x35,
+ 0xff, 0x53, 0xef, 0xf4, 0x0, 0x4, 0xff, 0xc1,
+ 0x8f, 0xff, 0xf8, 0x2d, 0xfe, 0x40, 0x7f, 0xfa,
+ 0x1a, 0xff, 0xff, 0xff, 0xa1, 0xaf, 0xf7, 0xcf,
+ 0x82, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x28, 0xfc,
+ 0x14, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
+ 0x41, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x0, 0x0, 0xf, 0xff, 0xf9, 0x0, 0x8f,
+ 0xff, 0xf0, 0x0, 0x0, 0xf, 0xff, 0xf8, 0x0,
+ 0x8f, 0xff, 0xf0, 0x0, 0x0, 0xf, 0xff, 0xf8,
+ 0x0, 0x8f, 0xff, 0xf0, 0x0, 0x0, 0xe, 0xff,
+ 0xf6, 0x0, 0x6f, 0xff, 0xe0, 0x0,
/* U+F019 "" */
- 0x0, 0x0, 0x2, 0xbb, 0xa1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x3,
- 0x36, 0xff, 0xf6, 0x32, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xf3, 0x0, 0x0, 0x7, 0x77, 0x77, 0x36, 0xf3,
- 0x37, 0x77, 0x75, 0xff, 0xff, 0xfe, 0x30, 0x4e,
- 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xef, 0xfe,
- 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a,
- 0xa7, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfb,
+ 0x0, 0x0, 0x0, 0xdf, 0xfd, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0,
+ 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
+ 0x0, 0x0, 0xbf, 0xff, 0xff, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0xb, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xfb, 0x0, 0x0, 0x0,
+ 0xdf, 0xff, 0xfc, 0x1b, 0xb1, 0xcf, 0xff, 0xfd,
+ 0xff, 0xff, 0xff, 0xc2, 0x2c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xe0, 0xff,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
/* U+F01C "" */
- 0x0, 0x27, 0x77, 0x77, 0x77, 0x61, 0x0, 0x0,
- 0xef, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x4, 0xfb,
- 0x44, 0x44, 0x44, 0xee, 0x0, 0xb, 0xf2, 0x0,
- 0x0, 0x0, 0x8f, 0x60, 0x2f, 0xc0, 0x0, 0x0,
- 0x0, 0x1f, 0xd0, 0x9f, 0x50, 0x0, 0x0, 0x0,
- 0xa, 0xf4, 0xfe, 0x33, 0x20, 0x0, 0x3, 0x36,
- 0xfa, 0xff, 0xff, 0xd0, 0x0, 0x2f, 0xff, 0xfc,
- 0xff, 0xff, 0xf9, 0x77, 0xbf, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfb,
+ 0x0, 0x4, 0xef, 0xff, 0xff, 0xff, 0xfe, 0x40,
+ 0x0, 0x0, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe1, 0x0, 0x0, 0xaf, 0xb0, 0x0, 0x0, 0x0,
+ 0xb, 0xfa, 0x0, 0x5, 0xff, 0x10, 0x0, 0x0,
+ 0x0, 0x1, 0xff, 0x50, 0x1e, 0xf6, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x6f, 0xe1, 0xaf, 0xb0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xfa, 0xff, 0xff,
+ 0xff, 0x80, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf1, 0x0, 0x1f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf8,
/* U+F021 "" */
- 0x0, 0x0, 0x25, 0x77, 0x51, 0x0, 0x0, 0x0,
- 0x19, 0xff, 0xff, 0xfe, 0x70, 0xab, 0x1, 0xcf,
- 0xff, 0xcd, 0xff, 0xfd, 0xfc, 0xd, 0xff, 0x70,
- 0x0, 0x1b, 0xff, 0xfc, 0x5f, 0xf5, 0x0, 0x0,
- 0xa, 0xff, 0xfc, 0xbf, 0xa0, 0x0, 0x0, 0x6f,
- 0xff, 0xfb, 0x24, 0x10, 0x0, 0x0, 0x4, 0x44,
- 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x77, 0x77, 0x70, 0x0, 0x0, 0x7, 0x74, 0xff,
- 0xff, 0xd0, 0x0, 0x0, 0x3f, 0xf3, 0xff, 0xfe,
- 0x10, 0x0, 0x1, 0xcf, 0xc0, 0xff, 0xff, 0xc5,
- 0x33, 0x7e, 0xff, 0x30, 0xfd, 0x9f, 0xff, 0xff,
- 0xff, 0xf3, 0x0, 0x71, 0x4, 0xbf, 0xff, 0xe8,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0,
- 0x0,
+ 0x0, 0x0, 0x6, 0xbd, 0xda, 0x50, 0x2, 0xff,
+ 0x0, 0x5, 0xef, 0xff, 0xff, 0xfe, 0x42, 0xff,
+ 0x0, 0x7f, 0xff, 0xa7, 0x7b, 0xff, 0xf9, 0xff,
+ 0x5, 0xff, 0xc1, 0x0, 0x0, 0x2c, 0xff, 0xff,
+ 0xe, 0xfc, 0x0, 0x0, 0x2, 0x22, 0xdf, 0xff,
+ 0x5f, 0xf2, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
+ 0x8f, 0xb0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0xb, 0xf8,
+ 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x2f, 0xf4,
+ 0xff, 0xfd, 0x22, 0x20, 0x0, 0x0, 0xcf, 0xe0,
+ 0xff, 0xff, 0xc2, 0x0, 0x0, 0x2c, 0xff, 0x40,
+ 0xff, 0x9f, 0xff, 0xb7, 0x6a, 0xff, 0xf7, 0x0,
+ 0xff, 0x24, 0xdf, 0xff, 0xff, 0xfe, 0x50, 0x0,
+ 0xff, 0x20, 0x5, 0xac, 0xdb, 0x60, 0x0, 0x0,
/* U+F026 "" */
- 0x0, 0x0, 0xa, 0xc0, 0x0, 0xa, 0xfc, 0x0,
- 0xa, 0xff, 0xcf, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xcf, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xc7, 0x88, 0xff, 0xfc, 0x0, 0x3, 0xff, 0xc0,
- 0x0, 0x3, 0xfc, 0x0, 0x0, 0x3, 0x80,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8d,
+ 0x0, 0x0, 0x8, 0xff, 0x0, 0x0, 0x8f, 0xff,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0, 0x8, 0xff,
+ 0x0, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x0, 0x0,
/* U+F027 "" */
- 0x0, 0x0, 0xa, 0xc0, 0x0, 0x0, 0x0, 0xa,
- 0xfc, 0x0, 0x0, 0x0, 0xa, 0xff, 0xc0, 0x0,
- 0xf, 0xff, 0xff, 0xfc, 0x9, 0x60, 0xff, 0xff,
- 0xff, 0xc0, 0x4f, 0x2f, 0xff, 0xff, 0xfc, 0x0,
- 0xf4, 0xff, 0xff, 0xff, 0xc0, 0xae, 0x7, 0x88,
- 0xff, 0xfc, 0x5, 0x10, 0x0, 0x3, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0x80, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8d, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0,
+ 0xcf, 0xff, 0xff, 0xff, 0x1, 0x50, 0xff, 0xff,
+ 0xff, 0xff, 0x6, 0xf7, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0xbe, 0xff, 0xff, 0xff, 0xff, 0x0, 0xae,
+ 0xff, 0xff, 0xff, 0xff, 0x5, 0xf8, 0xdf, 0xff,
+ 0xff, 0xff, 0x2, 0x60, 0x0, 0x0, 0x9f, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+F028 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x10, 0x0,
- 0x0, 0x0, 0xac, 0x0, 0x2, 0xdc, 0x10, 0x0,
- 0x0, 0xaf, 0xc0, 0xe, 0x71, 0xba, 0x0, 0x0,
- 0xaf, 0xfc, 0x0, 0x4d, 0x91, 0xf3, 0xff, 0xff,
- 0xff, 0xc0, 0x96, 0x2f, 0x2a, 0x9f, 0xff, 0xff,
- 0xfc, 0x4, 0xf2, 0xc8, 0x6c, 0xff, 0xff, 0xff,
- 0xc0, 0xf, 0x49, 0x84, 0xcf, 0xff, 0xff, 0xfc,
- 0xa, 0xe0, 0xd7, 0x8c, 0x78, 0x8f, 0xff, 0xc0,
- 0x51, 0x7f, 0x1d, 0x70, 0x0, 0x3f, 0xfc, 0x0,
- 0xaf, 0x35, 0xf1, 0x0, 0x0, 0x3f, 0xc0, 0x7,
- 0x23, 0xe6, 0x0, 0x0, 0x0, 0x38, 0x0, 0x9,
- 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x82,
- 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f,
+ 0xd2, 0x0, 0x0, 0x0, 0x0, 0x8d, 0x0, 0x0,
+ 0x3, 0xee, 0x10, 0x0, 0x0, 0x8, 0xff, 0x0,
+ 0xa, 0xb1, 0x2f, 0xb0, 0x0, 0x0, 0x8f, 0xff,
+ 0x0, 0x5, 0xfc, 0x7, 0xf4, 0xdf, 0xff, 0xff,
+ 0xff, 0x2, 0x50, 0x5f, 0x60, 0xf9, 0xff, 0xff,
+ 0xff, 0xff, 0x6, 0xf7, 0xd, 0xc0, 0xbd, 0xff,
+ 0xff, 0xff, 0xff, 0x0, 0xae, 0x9, 0xf0, 0x9f,
+ 0xff, 0xff, 0xff, 0xff, 0x0, 0xae, 0x9, 0xf0,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0x6, 0xf7, 0xd,
+ 0xc0, 0xad, 0xdf, 0xff, 0xff, 0xff, 0x2, 0x50,
+ 0x5f, 0x60, 0xe9, 0x0, 0x0, 0x8f, 0xff, 0x0,
+ 0x5, 0xfc, 0x6, 0xf4, 0x0, 0x0, 0x8, 0xff,
+ 0x0, 0xa, 0xb1, 0x2f, 0xb0, 0x0, 0x0, 0x0,
+ 0x8d, 0x0, 0x0, 0x2, 0xee, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1f, 0xd2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x10, 0x0,
/* U+F03E "" */
- 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x50, 0xfa, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x89, 0xf1, 0xf4, 0x3, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xf4, 0xf4, 0x5f, 0xf5, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xf4, 0xf4, 0xcf, 0xfc, 0x0,
- 0x0, 0x38, 0x0, 0x0, 0xf4, 0xf4, 0x5f, 0xf5,
- 0x0, 0x3, 0xef, 0x90, 0x0, 0xf4, 0xf4, 0x0,
- 0x0, 0x0, 0x3e, 0xff, 0xf9, 0x0, 0xf4, 0xf4,
- 0x0, 0x36, 0x3, 0xef, 0xff, 0xff, 0x90, 0xf4,
- 0xf4, 0x3, 0xef, 0x7e, 0xff, 0xff, 0xff, 0xc0,
- 0xf4, 0xf4, 0x3e, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc0, 0xf4, 0xf4, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xc0, 0xf4, 0xf4, 0x9c, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0x90, 0xf4, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf3, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x3, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x0,
-
- /* U+F040 "" */
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3e, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xff, 0x90, 0x0, 0x0, 0x0,
- 0x3b, 0x2d, 0xff, 0xf7, 0x0, 0x0, 0x3, 0xec,
- 0xc2, 0xdf, 0xf5, 0x0, 0x0, 0x3e, 0xbc, 0xfc,
- 0x2d, 0x60, 0x0, 0x3, 0xeb, 0xcf, 0xff, 0xc0,
- 0x0, 0x0, 0x3e, 0xbc, 0xff, 0xff, 0x60, 0x0,
- 0x3, 0xeb, 0xcf, 0xff, 0xf6, 0x0, 0x0, 0x3e,
- 0xdc, 0xff, 0xff, 0x60, 0x0, 0x0, 0xfa, 0xaf,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x1a, 0xff,
- 0x60, 0x0, 0x0, 0x0, 0xff, 0x46, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0x44, 0x43, 0x0, 0x0, 0x0, 0x0,
- 0x0,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x20, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x0, 0xc, 0xff, 0xff, 0xee, 0xff, 0xff,
+ 0xff, 0x20, 0x2f, 0xff, 0xfe, 0x22, 0xef, 0xff,
+ 0xff, 0xfc, 0xff, 0xff, 0xe2, 0x0, 0x2e, 0xff,
+ 0xff, 0xfe, 0x4e, 0xfe, 0x20, 0x0, 0x2, 0xff,
+ 0xff, 0xe2, 0x2, 0xc2, 0x0, 0x0, 0x0, 0xff,
+ 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
+ 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
/* U+F048 "" */
- 0x77, 0x20, 0x0, 0x0, 0x32, 0xff, 0x40, 0x0,
- 0x3, 0xe4, 0xff, 0x40, 0x0, 0x3e, 0xf4, 0xff,
- 0x40, 0x3, 0xef, 0xf4, 0xff, 0x40, 0x3e, 0xff,
- 0xf4, 0xff, 0x43, 0xef, 0xff, 0xf4, 0xff, 0x7e,
- 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0x5d, 0xff, 0xff, 0xf4, 0xff, 0x41, 0xdf,
- 0xff, 0xf4, 0xff, 0x40, 0x1d, 0xff, 0xf4, 0xff,
- 0x40, 0x1, 0xdf, 0xf4, 0xff, 0x40, 0x0, 0x1d,
- 0xf4, 0xff, 0x40, 0x0, 0x1, 0xd4, 0x23, 0x0,
- 0x0, 0x0, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x30, 0x0,
+ 0x1, 0xcc, 0xff, 0x40, 0x0, 0x2d, 0xff, 0xff,
+ 0x40, 0x3, 0xef, 0xff, 0xff, 0x40, 0x3f, 0xff,
+ 0xff, 0xff, 0x44, 0xff, 0xff, 0xff, 0xff, 0x9f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff,
+ 0xff, 0xff, 0xff, 0x45, 0xff, 0xff, 0xff, 0xff,
+ 0x40, 0x4f, 0xff, 0xff, 0xff, 0x40, 0x3, 0xef,
+ 0xff, 0xff, 0x40, 0x0, 0x2e, 0xff, 0xff, 0x30,
+ 0x0, 0x1, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F04B "" */
- 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe7,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfd, 0x50,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xb4, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xfa, 0x20, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0x81, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe7, 0xf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xa1, 0xf, 0xff, 0xff, 0xff, 0xfc, 0x20,
- 0x0, 0xff, 0xff, 0xff, 0xd4, 0x0, 0x0, 0xf,
- 0xff, 0xfe, 0x60, 0x0, 0x0, 0x0, 0xff, 0xf8,
- 0x10, 0x0, 0x0, 0x0, 0xf, 0xa1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
+ 0x91, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0x70, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xfd,
+ 0x40, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfa,
+ 0x10, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf7,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xb2, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xd5, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xf7, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfa, 0x10,
+ 0x0, 0x0, 0xff, 0xff, 0xfd, 0x40, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x8e, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F04C "" */
- 0x77, 0x77, 0x75, 0x0, 0x77, 0x77, 0x75, 0xff,
- 0xff, 0xfc, 0x0, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xfc, 0x0, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc,
- 0x0, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0x0,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0x0, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xfc, 0x0, 0xff, 0xff,
- 0xfc, 0xff, 0xff, 0xfc, 0x0, 0xff, 0xff, 0xfc,
- 0xff, 0xff, 0xfc, 0x0, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xfc, 0x0, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xfc, 0x0, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc,
- 0x0, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0x0,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfb, 0x0, 0xff,
- 0xff, 0xfb, 0x24, 0x44, 0x41, 0x0, 0x24, 0x44,
- 0x41,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
+ 0xff, 0xf8, 0x0, 0x8f, 0xff, 0xf8, 0xff, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0xff, 0x7f, 0xff, 0xf7, 0x0, 0x7f, 0xff,
+ 0xf7,
/* U+F04D "" */
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfb, 0x24, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x41,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf8,
/* U+F051 "" */
- 0x50, 0x0, 0x0, 0x8, 0x70, 0xf6, 0x0, 0x0,
- 0x4f, 0xf4, 0xff, 0x60, 0x0, 0x4f, 0xf4, 0xff,
- 0xf6, 0x0, 0x4f, 0xf4, 0xff, 0xff, 0x60, 0x4f,
- 0xf4, 0xff, 0xff, 0xf6, 0x4f, 0xf4, 0xff, 0xff,
- 0xff, 0xaf, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xff, 0xff, 0xfd, 0x5f, 0xf4, 0xff, 0xff, 0xd1,
- 0x4f, 0xf4, 0xff, 0xfd, 0x10, 0x4f, 0xf4, 0xff,
- 0xd1, 0x0, 0x4f, 0xf4, 0xfd, 0x10, 0x0, 0x4f,
- 0xf4, 0xd1, 0x0, 0x0, 0x3f, 0xf3, 0x10, 0x0,
- 0x0, 0x3, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x10, 0x0,
+ 0x3, 0xff, 0xff, 0xd2, 0x0, 0x4, 0xff, 0xff,
+ 0xfe, 0x30, 0x4, 0xff, 0xff, 0xff, 0xf4, 0x4,
+ 0xff, 0xff, 0xff, 0xff, 0x54, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf9, 0xff, 0xff, 0xff, 0xff, 0x44, 0xff, 0xff,
+ 0xff, 0xf3, 0x4, 0xff, 0xff, 0xfe, 0x30, 0x4,
+ 0xff, 0xff, 0xd2, 0x0, 0x4, 0xff, 0xcc, 0x10,
+ 0x0, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F052 "" */
- 0x0, 0x0, 0x0, 0x53, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xfe, 0x30, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xff, 0xe3, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x30, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe3, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x75, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0x2d, 0xd2, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xef, 0xfe, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x1d, 0xff, 0xff, 0xd1, 0x0, 0x0,
+ 0x0, 0x0, 0xcf, 0xff, 0xff, 0xfc, 0x0, 0x0,
+ 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
+ 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
+ 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
/* U+F053 "" */
- 0x0, 0x0, 0x0, 0x7, 0x10, 0x0, 0x0, 0x0,
- 0xaf, 0xc1, 0x0, 0x0, 0xa, 0xff, 0xf8, 0x0,
- 0x0, 0xaf, 0xff, 0xd1, 0x0, 0xa, 0xff, 0xfd,
- 0x10, 0x0, 0xaf, 0xff, 0xd1, 0x0, 0xa, 0xff,
- 0xfd, 0x10, 0x0, 0x7f, 0xff, 0xe1, 0x0, 0x0,
- 0x3f, 0xff, 0xf9, 0x0, 0x0, 0x3, 0xff, 0xff,
- 0x90, 0x0, 0x0, 0x3f, 0xff, 0xf9, 0x0, 0x0,
- 0x3, 0xff, 0xff, 0x90, 0x0, 0x0, 0x3f, 0xff,
- 0xf7, 0x0, 0x0, 0x3, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x3d, 0x30,
+ 0x0, 0x0, 0x0, 0x1a, 0x40, 0x0, 0x0, 0x1,
+ 0xdf, 0xf0, 0x0, 0x0, 0x1d, 0xff, 0xa0, 0x0,
+ 0x1, 0xdf, 0xfa, 0x0, 0x0, 0x1d, 0xff, 0xa0,
+ 0x0, 0x1, 0xdf, 0xfa, 0x0, 0x0, 0xc, 0xff,
+ 0xa0, 0x0, 0x0, 0xd, 0xff, 0x80, 0x0, 0x0,
+ 0x1, 0xdf, 0xf8, 0x0, 0x0, 0x0, 0x1d, 0xff,
+ 0x80, 0x0, 0x0, 0x1, 0xdf, 0xf8, 0x0, 0x0,
+ 0x0, 0x1d, 0xff, 0x80, 0x0, 0x0, 0x1, 0xdf,
+ 0xf0, 0x0, 0x0, 0x0, 0x1b, 0x50,
/* U+F054 "" */
- 0x0, 0x53, 0x0, 0x0, 0x0, 0x6, 0xfe, 0x30,
- 0x0, 0x0, 0x2f, 0xff, 0xe3, 0x0, 0x0, 0x6,
- 0xff, 0xfe, 0x30, 0x0, 0x0, 0x6f, 0xff, 0xe3,
- 0x0, 0x0, 0x6, 0xff, 0xfe, 0x30, 0x0, 0x0,
- 0x6f, 0xff, 0xe3, 0x0, 0x0, 0x8, 0xff, 0xfe,
- 0x0, 0x0, 0x3e, 0xff, 0xfa, 0x0, 0x3, 0xef,
- 0xff, 0xa0, 0x0, 0x3e, 0xff, 0xfa, 0x0, 0x3,
- 0xef, 0xff, 0xa0, 0x0, 0x2e, 0xff, 0xfa, 0x0,
- 0x0, 0x1d, 0xff, 0xa0, 0x0, 0x0, 0x1, 0xc9,
- 0x0, 0x0, 0x0,
+ 0x4, 0xa1, 0x0, 0x0, 0x0, 0xf, 0xfd, 0x10,
+ 0x0, 0x0, 0xa, 0xff, 0xd1, 0x0, 0x0, 0x0,
+ 0xaf, 0xfd, 0x10, 0x0, 0x0, 0xa, 0xff, 0xd1,
+ 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x10, 0x0, 0x0,
+ 0xa, 0xff, 0xc0, 0x0, 0x0, 0x8, 0xff, 0xd0,
+ 0x0, 0x0, 0x8f, 0xfd, 0x10, 0x0, 0x8, 0xff,
+ 0xd1, 0x0, 0x0, 0x8f, 0xfd, 0x10, 0x0, 0x8,
+ 0xff, 0xd1, 0x0, 0x0, 0xf, 0xfd, 0x10, 0x0,
+ 0x0, 0x5, 0xb1, 0x0, 0x0, 0x0,
/* U+F067 "" */
- 0x0, 0x0, 0x17, 0x76, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0,
- 0xd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x58, 0x88, 0xcf, 0xff,
- 0x88, 0x88, 0x10, 0x0, 0x8, 0xff, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x5f, 0xfd, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4, 0xff, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x8, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
+ 0x8, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
+ 0x80, 0x0, 0x0, 0x48, 0x88, 0x8c, 0xff, 0xc8,
+ 0x88, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x48, 0x88, 0x8c, 0xff, 0xc8, 0x88, 0x84, 0x0,
+ 0x0, 0x8, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
+ 0x8, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
+ 0x80, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x40,
+ 0x0, 0x0,
/* U+F068 "" */
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x85, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x81,
+ 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xb7,
+
+ /* U+F06E "" */
+ 0x0, 0x0, 0x5, 0xad, 0xff, 0xda, 0x50, 0x0,
+ 0x0, 0x0, 0x4, 0xdf, 0xfc, 0x88, 0xcf, 0xfd,
+ 0x40, 0x0, 0x0, 0x7f, 0xfe, 0x40, 0x0, 0x4,
+ 0xef, 0xf7, 0x0, 0x7, 0xff, 0xf4, 0x0, 0x9e,
+ 0x80, 0x4f, 0xff, 0x70, 0x4f, 0xff, 0xc0, 0x0,
+ 0xaf, 0xf8, 0xc, 0xff, 0xf4, 0xdf, 0xff, 0x80,
+ 0x9a, 0xff, 0xfe, 0x8, 0xff, 0xfd, 0xdf, 0xff,
+ 0x80, 0xef, 0xff, 0xfe, 0x8, 0xff, 0xfd, 0x4f,
+ 0xff, 0xc0, 0x8f, 0xff, 0xf8, 0xc, 0xff, 0xf4,
+ 0x7, 0xff, 0xf4, 0x8, 0xee, 0x80, 0x4f, 0xff,
+ 0x70, 0x0, 0x7f, 0xfe, 0x40, 0x0, 0x4, 0xef,
+ 0xf8, 0x0, 0x0, 0x4, 0xdf, 0xfc, 0x88, 0xcf,
+ 0xfd, 0x40, 0x0, 0x0, 0x0, 0x5, 0xad, 0xff,
+ 0xda, 0x50, 0x0, 0x0,
+
+ /* U+F070 "" */
+ 0x8c, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xdf, 0xe4, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1b, 0xff, 0x80, 0x49,
+ 0xdf, 0xfd, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x7f,
+ 0xff, 0xff, 0xd8, 0x8c, 0xff, 0xd4, 0x0, 0x0,
+ 0x0, 0x4, 0xef, 0xf8, 0x0, 0x0, 0x4e, 0xff,
+ 0x70, 0x0, 0x0, 0x0, 0x1c, 0xff, 0x69, 0xe8,
+ 0x4, 0xff, 0xf7, 0x0, 0x4, 0xe3, 0x0, 0x9f,
+ 0xfe, 0xff, 0x80, 0xcf, 0xff, 0x40, 0xd, 0xff,
+ 0x70, 0x5, 0xff, 0xff, 0xe0, 0x8f, 0xff, 0xd0,
+ 0xd, 0xff, 0xf7, 0x0, 0x2d, 0xff, 0xe0, 0x8f,
+ 0xff, 0xd0, 0x4, 0xff, 0xfc, 0x0, 0x0, 0xaf,
+ 0xf8, 0xcf, 0xff, 0x30, 0x0, 0x7f, 0xff, 0x40,
+ 0x0, 0x6, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x8,
+ 0xff, 0xf4, 0x0, 0x0, 0x3e, 0xff, 0xa0, 0x0,
+ 0x0, 0x0, 0x4d, 0xff, 0xc8, 0x82, 0x1, 0xbf,
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xdf, 0xfc,
+ 0x10, 0x8, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4e, 0xfd, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xc8,
/* U+F071 "" */
- 0x0, 0x0, 0x0, 0x9, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x1e, 0xfc, 0xcf, 0xe1, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xc0, 0xc, 0xf8, 0x0, 0x0,
- 0x0, 0x2, 0xef, 0xc0, 0xc, 0xfe, 0x20, 0x0,
- 0x0, 0xa, 0xff, 0xc0, 0xc, 0xff, 0xa0, 0x0,
- 0x0, 0x2f, 0xff, 0xc0, 0xc, 0xff, 0xf2, 0x0,
- 0x0, 0xcf, 0xff, 0xe7, 0x7e, 0xff, 0xfb, 0x0,
- 0x4, 0xff, 0xff, 0xf8, 0x8f, 0xff, 0xff, 0x40,
- 0xc, 0xff, 0xff, 0xc0, 0xc, 0xff, 0xff, 0xb0,
- 0x6f, 0xff, 0xff, 0xc3, 0x3c, 0xff, 0xff, 0xf6,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x4, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x2d, 0xd2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfb,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xd, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xd8, 0x8d,
+ 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff,
+ 0xa0, 0xa, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xb0, 0xb, 0xff, 0xf3, 0x0, 0x0,
+ 0x0, 0x0, 0xcf, 0xff, 0xc0, 0xc, 0xff, 0xfc,
+ 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xd0, 0xd,
+ 0xff, 0xff, 0x50, 0x0, 0x0, 0xe, 0xff, 0xff,
+ 0xf9, 0x9f, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x8f,
+ 0xff, 0xff, 0xe2, 0x2e, 0xff, 0xff, 0xf8, 0x0,
+ 0x2, 0xff, 0xff, 0xff, 0x90, 0x9, 0xff, 0xff,
+ 0xff, 0x10, 0xa, 0xff, 0xff, 0xff, 0xe3, 0x3e,
+ 0xff, 0xff, 0xff, 0xa0, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x8, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
/* U+F074 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x31, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x10,
- 0x77, 0x52, 0x0, 0x0, 0x14, 0x77, 0xbf, 0xc1,
- 0xff, 0xff, 0xb1, 0x6, 0xef, 0xff, 0xff, 0xfc,
- 0xcc, 0xef, 0xfc, 0x5f, 0xff, 0xcc, 0xef, 0xf6,
- 0x0, 0x4, 0xf8, 0xdf, 0xd1, 0x0, 0x8f, 0x60,
- 0x0, 0x0, 0x77, 0xff, 0x20, 0x0, 0x66, 0x0,
- 0x0, 0x0, 0xe, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xf5, 0x0, 0x0, 0x31, 0x0,
- 0x0, 0x1, 0xdf, 0xca, 0x70, 0x0, 0x8c, 0x10,
- 0x77, 0x7c, 0xff, 0x5f, 0xf9, 0x77, 0xbf, 0xc1,
- 0xff, 0xff, 0xf6, 0x1d, 0xff, 0xff, 0xff, 0xfc,
- 0xcc, 0xcb, 0x40, 0x1, 0x8c, 0xcc, 0xef, 0xf6,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x66, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80,
+ 0xff, 0xff, 0x70, 0x0, 0x7, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xf6, 0x0, 0x6f, 0xff, 0xff, 0xfd,
+ 0x78, 0x8e, 0xff, 0x15, 0xff, 0xe8, 0xff, 0xe2,
+ 0x0, 0x2, 0xe5, 0x4f, 0xfe, 0x20, 0xfe, 0x20,
+ 0x0, 0x0, 0x13, 0xff, 0xf3, 0x0, 0x52, 0x0,
+ 0x0, 0x0, 0x3f, 0xff, 0x31, 0x0, 0x52, 0x0,
+ 0x0, 0x2, 0xef, 0xf4, 0x5e, 0x20, 0xfe, 0x20,
+ 0x78, 0x8e, 0xff, 0x51, 0xff, 0xe8, 0xff, 0xe2,
+ 0xff, 0xff, 0xf6, 0x0, 0x6f, 0xff, 0xff, 0xfd,
+ 0xff, 0xff, 0x70, 0x0, 0x7, 0xff, 0xff, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F077 "" */
- 0x0, 0x0, 0x0, 0x3, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3e, 0xe3, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0xef, 0xfe, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x3e, 0xff, 0xff, 0xe3, 0x0, 0x0,
- 0x0, 0x3, 0xef, 0xff, 0xff, 0xfe, 0x30, 0x0,
- 0x0, 0x3e, 0xff, 0xf6, 0x6f, 0xff, 0xe3, 0x0,
- 0x3, 0xef, 0xff, 0x60, 0x6, 0xff, 0xfe, 0x30,
- 0x2e, 0xff, 0xf6, 0x0, 0x0, 0x6f, 0xff, 0xe2,
- 0xa, 0xff, 0x60, 0x0, 0x0, 0x6, 0xff, 0xa0,
- 0x0, 0x96, 0x0, 0x0, 0x0, 0x0, 0x69, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x1d, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x1, 0xdf,
+ 0xff, 0xfd, 0x10, 0x0, 0x0, 0x1d, 0xff, 0x99,
+ 0xff, 0xd1, 0x0, 0x1, 0xdf, 0xf9, 0x0, 0x9f,
+ 0xfd, 0x10, 0x1d, 0xff, 0x90, 0x0, 0x9, 0xff,
+ 0xd1, 0xbf, 0xf9, 0x0, 0x0, 0x0, 0x9f, 0xfb,
+ 0x5f, 0x90, 0x0, 0x0, 0x0, 0x9, 0xf5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F078 "" */
- 0x1, 0xc9, 0x0, 0x0, 0x0, 0x0, 0xac, 0x10,
- 0x1c, 0xff, 0x90, 0x0, 0x0, 0xa, 0xff, 0xc1,
- 0x1f, 0xff, 0xf9, 0x0, 0x0, 0xaf, 0xff, 0xf1,
- 0x3, 0xff, 0xff, 0x90, 0xa, 0xff, 0xff, 0x30,
- 0x0, 0x3f, 0xff, 0xf9, 0xaf, 0xff, 0xf3, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0xff, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3f, 0xf3, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f,
+ 0x90, 0x0, 0x0, 0x0, 0x9, 0xf5, 0xbf, 0xf9,
+ 0x0, 0x0, 0x0, 0x9f, 0xfb, 0x1d, 0xff, 0x90,
+ 0x0, 0x9, 0xff, 0xd1, 0x1, 0xdf, 0xf9, 0x0,
+ 0x9f, 0xfd, 0x10, 0x0, 0x1d, 0xff, 0x99, 0xff,
+ 0xd1, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xfd, 0x10,
+ 0x0, 0x0, 0x0, 0x1d, 0xff, 0xd1, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F079 "" */
- 0x0, 0x3, 0x1, 0x33, 0x33, 0x33, 0x33, 0x30,
- 0x0, 0x8, 0xf6, 0x1e, 0xff, 0xff, 0xff, 0xfc,
- 0x0, 0x6, 0xff, 0xe3, 0x3f, 0xff, 0xff, 0xff,
- 0xc0, 0x3, 0xef, 0xff, 0xe1, 0x0, 0x0, 0x8,
- 0xfc, 0x0, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x8f, 0xc0, 0x3, 0x4d, 0xfa, 0x43, 0x0, 0x0,
- 0x8, 0xfc, 0x0, 0x0, 0xcf, 0x80, 0x0, 0x0,
- 0x57, 0xbf, 0xd7, 0x70, 0xc, 0xf8, 0x0, 0x0,
- 0x7, 0xff, 0xff, 0xfd, 0x0, 0xcf, 0x93, 0x33,
- 0x33, 0xa, 0xff, 0xff, 0x30, 0xc, 0xff, 0xff,
- 0xff, 0xf8, 0xd, 0xff, 0x40, 0x0, 0xcf, 0xff,
- 0xff, 0xff, 0xf4, 0x1d, 0x60, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1d, 0xd1, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xfd, 0x10,
+ 0xef, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x1d, 0xff,
+ 0xff, 0xd1, 0xaf, 0xff, 0xff, 0xff, 0xf0, 0x0,
+ 0xcf, 0xcf, 0xfc, 0xfc, 0x0, 0x0, 0x0, 0xf,
+ 0xf0, 0x0, 0x6b, 0x1f, 0xf1, 0xb6, 0x0, 0x0,
+ 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf,
+ 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0,
+ 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x6b, 0x1f,
+ 0xf1, 0xb6, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0,
+ 0xcf, 0xcf, 0xfc, 0xfc, 0x0, 0xf, 0xff, 0xff,
+ 0xff, 0xfa, 0x1d, 0xff, 0xff, 0xd1, 0x0, 0xd,
+ 0xff, 0xff, 0xff, 0xfe, 0x1, 0xdf, 0xfd, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d,
+ 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+F07B "" */
- 0x16, 0x77, 0x76, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xc3, 0x33, 0x33, 0x33, 0xf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x30,
+ 0x8f, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
/* U+F093 "" */
- 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x1, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0x40, 0x0, 0x0, 0x57, 0x77, 0x62, 0x88, 0x80,
- 0x77, 0x77, 0x4f, 0xff, 0xff, 0x73, 0x33, 0xaf,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xaa,
- 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb1, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40,
+ 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xb, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xff, 0xff, 0xfb, 0x0, 0x0,
+ 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
+ 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0xdf, 0xff, 0xf0, 0xdf, 0xfd, 0xf, 0xff, 0xfd,
+ 0xff, 0xff, 0xf9, 0x0, 0x0, 0x9f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xe0, 0xff,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
/* U+F095 "" */
- 0x5, 0x71, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfe, 0x20,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0xdf, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x2f,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf6,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xe6, 0x0,
- 0x7, 0x20, 0x0, 0x1, 0xdf, 0xf8, 0x1a, 0xfe,
- 0x71, 0x0, 0x1, 0xdf, 0xff, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x9f, 0xff, 0xff, 0xf5, 0x0, 0x0,
- 0x0, 0x28, 0xdf, 0xe5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xea,
+ 0x62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff,
+ 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
+ 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
+ 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0xef, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xff, 0x30, 0x0, 0x0, 0x2,
+ 0x0, 0x0, 0x4f, 0xff, 0x90, 0x0, 0x2, 0x8f,
+ 0xf3, 0x0, 0x6f, 0xff, 0xd0, 0x0, 0xa, 0xff,
+ 0xff, 0xe4, 0xbf, 0xff, 0xd1, 0x0, 0x0, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xd1, 0x0, 0x0, 0xa,
+ 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0,
+ 0x6f, 0xff, 0xff, 0xfb, 0x30, 0x0, 0x0, 0x0,
+ 0x2, 0xff, 0xdb, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
/* U+F0C4 "" */
- 0x2, 0x53, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xe6, 0x0, 0x0, 0x0, 0x1, 0x30,
- 0xfb, 0x2, 0xbf, 0x50, 0x0, 0x0, 0x6a, 0x6a,
- 0xea, 0x0, 0xc, 0xc0, 0x0, 0x4b, 0x40, 0x78,
- 0x6f, 0xa3, 0x3c, 0xc1, 0x2a, 0x60, 0x19, 0x50,
- 0x6, 0xef, 0xff, 0x6e, 0x81, 0x2, 0xa3, 0x0,
- 0x0, 0x4, 0x43, 0xb8, 0xa1, 0x59, 0x10, 0x0,
- 0x0, 0x47, 0x76, 0xa3, 0x88, 0x7b, 0x30, 0x0,
- 0x1a, 0xff, 0xff, 0xaa, 0xe7, 0x0, 0x86, 0x0,
- 0x9f, 0x70, 0xb, 0xc0, 0x6, 0xa2, 0x6, 0x90,
- 0xf9, 0x0, 0x1d, 0xb0, 0x0, 0x18, 0x81, 0x3b,
- 0xec, 0x36, 0xdf, 0x30, 0x0, 0x0, 0x29, 0xb8,
- 0x3e, 0xff, 0xc3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8, 0xee, 0x80, 0x0, 0x0, 0x6, 0x61, 0x8,
+ 0xff, 0xff, 0x80, 0x0, 0x2d, 0xff, 0xd0, 0xef,
+ 0x33, 0xfe, 0x0, 0x2e, 0xff, 0xf3, 0xe, 0xf3,
+ 0x3f, 0xe0, 0x2e, 0xff, 0xf3, 0x0, 0x8f, 0xff,
+ 0xff, 0x6e, 0xff, 0xf3, 0x0, 0x0, 0x8e, 0xff,
+ 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x2, 0xef,
+ 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff,
+ 0xff, 0x30, 0x0, 0x0, 0x8, 0xef, 0xff, 0xff,
+ 0xff, 0x30, 0x0, 0x8, 0xff, 0xff, 0xf6, 0xef,
+ 0xff, 0x30, 0x0, 0xef, 0x33, 0xfe, 0x2, 0xef,
+ 0xff, 0x30, 0xe, 0xf3, 0x3f, 0xe0, 0x2, 0xef,
+ 0xff, 0x30, 0x8f, 0xff, 0xf8, 0x0, 0x2, 0xdf,
+ 0xfd, 0x0, 0x8e, 0xe8, 0x0, 0x0, 0x0, 0x66,
+ 0x10,
/* U+F0C5 "" */
- 0x0, 0x0, 0x5a, 0xbb, 0xba, 0x10, 0x0, 0x0,
- 0x0, 0x6, 0xfe, 0x88, 0x8e, 0x40, 0x0, 0x0,
- 0x0, 0x6f, 0xdc, 0x0, 0xc, 0x40, 0x0, 0x0,
- 0x6, 0xf6, 0x8c, 0x0, 0xc, 0x53, 0x33, 0x32,
- 0x6f, 0x93, 0x9c, 0x0, 0xc, 0xfe, 0xcc, 0xde,
- 0xef, 0xff, 0xf9, 0x0, 0x3e, 0xf8, 0x0, 0x4f,
- 0xf4, 0x0, 0x0, 0x3, 0xe6, 0xc8, 0x0, 0x4f,
- 0xf4, 0x0, 0x0, 0x3e, 0x60, 0xc8, 0x0, 0x4f,
- 0xf4, 0x0, 0x1, 0xee, 0xbb, 0xe7, 0x0, 0x4f,
- 0xf4, 0x0, 0x4, 0xe8, 0x88, 0x71, 0x0, 0x4f,
- 0xf4, 0x0, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x4f,
- 0xf6, 0x33, 0x36, 0xc0, 0x0, 0x0, 0x0, 0x4f,
- 0xbc, 0xcc, 0xcd, 0xc0, 0x0, 0x0, 0x0, 0x4f,
- 0x0, 0x0, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x4f,
- 0x0, 0x0, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x4f,
- 0x0, 0x0, 0x4, 0xeb, 0xbb, 0xbb, 0xbb, 0xcf,
- 0x0, 0x0, 0x0, 0x44, 0x44, 0x44, 0x44, 0x42,
+ 0x0, 0x0, 0xdf, 0xff, 0xff, 0xd, 0x20, 0x0,
+ 0x0, 0xff, 0xff, 0xff, 0xf, 0xe2, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xf, 0xfd, 0xdf, 0xf0, 0xff,
+ 0xff, 0xff, 0x20, 0x0, 0xff, 0xf0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xdf, 0xff,
+ 0xff, 0xff, 0xfd, 0xff, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0,
/* U+F0C7 "" */
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x20, 0x0, 0xfa,
- 0xef, 0xfe, 0x89, 0xfd, 0xe3, 0x0, 0xf4, 0xcf,
- 0xfc, 0x0, 0xf4, 0xae, 0x30, 0xf4, 0xcf, 0xfc,
- 0x0, 0xf4, 0xa, 0xe2, 0xf4, 0xcf, 0xfc, 0x0,
- 0xf4, 0x0, 0xba, 0xf4, 0xbf, 0xff, 0xff, 0xf1,
- 0x0, 0x8c, 0xf4, 0x4, 0x44, 0x44, 0x10, 0x0,
- 0x8c, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c,
- 0xf4, 0x47, 0x77, 0x77, 0x77, 0x71, 0x8c, 0xf4,
- 0xcc, 0x88, 0x88, 0x88, 0xe8, 0x8c, 0xf4, 0xc8,
- 0x0, 0x0, 0x0, 0xc8, 0x8c, 0xf4, 0xc8, 0x0,
- 0x0, 0x0, 0xc8, 0x8c, 0xf4, 0xc8, 0x0, 0x0,
- 0x0, 0xc8, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfb, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x40,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0xff, 0x0,
+ 0x0, 0x0, 0x1, 0xff, 0xe2, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xfc, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfb, 0x11, 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xf1, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff,
+ 0xf1, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfb,
+ 0x11, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf8,
/* U+F0E7 "" */
- 0x2, 0x77, 0x74, 0x0, 0x6, 0xff, 0xf5, 0x0,
- 0xa, 0xff, 0xe0, 0x0, 0xe, 0xff, 0x90, 0x0,
- 0x2f, 0xff, 0x44, 0x8b, 0x6f, 0xff, 0xff, 0xfa,
- 0xaf, 0xff, 0xff, 0xf2, 0xef, 0xfc, 0xff, 0xa0,
- 0x84, 0x1, 0xff, 0x40, 0x0, 0x5, 0xfc, 0x0,
- 0x0, 0x9, 0xf4, 0x0, 0x0, 0xd, 0xd0, 0x0,
- 0x0, 0x1f, 0x60, 0x0, 0x0, 0x5e, 0x0, 0x0,
- 0x0, 0x96, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0,
+ 0x0, 0xdf, 0xff, 0xfd, 0x0, 0x0, 0x1, 0xff,
+ 0xff, 0xfc, 0x0, 0x0, 0x3, 0xff, 0xff, 0xf7,
+ 0x0, 0x0, 0x6, 0xff, 0xff, 0xf2, 0x0, 0x0,
+ 0x8, 0xff, 0xff, 0xd0, 0x0, 0x0, 0xa, 0xff,
+ 0xff, 0xff, 0xff, 0xd0, 0xc, 0xff, 0xff, 0xff,
+ 0xff, 0xa0, 0xe, 0xff, 0xff, 0xff, 0xff, 0x20,
+ 0xd, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0xa, 0xff, 0xe0, 0x0, 0x0, 0x0, 0xe, 0xff,
+ 0x50, 0x0, 0x0, 0x0, 0x2f, 0xfc, 0x0, 0x0,
+ 0x0, 0x0, 0x5f, 0xf3, 0x0, 0x0, 0x0, 0x0,
+ 0x9f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
+
+ /* U+F0EA "" */
+ 0x0, 0x4, 0xee, 0x40, 0x0, 0x0, 0x0, 0xdf,
+ 0xff, 0x99, 0xff, 0xfd, 0x0, 0x0, 0xff, 0xff,
+ 0x99, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0x90, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0xd, 0xff, 0xff,
+ 0xd, 0x20, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf,
+ 0xe2, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf, 0xfd,
+ 0xff, 0xff, 0xf, 0xff, 0xff, 0x20, 0x0, 0xff,
+ 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xfd,
/* U+F0F3 "" */
- 0x0, 0x0, 0x0, 0x8, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5d, 0xd4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3c, 0xff, 0xff, 0xc3, 0x0, 0x0,
- 0x0, 0x1, 0xdf, 0xff, 0xff, 0xfd, 0x10, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0x60, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0,
- 0x0, 0x9, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0,
- 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0,
- 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
- 0x3e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3,
- 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2,
- 0x0, 0x0, 0x3, 0xbf, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xaa, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0xff, 0x30, 0x0, 0x0, 0x0, 0x1,
+ 0xbf, 0xff, 0xfc, 0x20, 0x0, 0x0, 0x1e, 0xff,
+ 0xff, 0xff, 0xe1, 0x0, 0x0, 0x9f, 0xff, 0xff,
+ 0xff, 0xf8, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xfd, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe1, 0xcf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0xcf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xe0, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0xee, 0x40, 0x0, 0x0,
/* U+F11C "" */
- 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x20, 0xfd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xf1, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xf4, 0xf4, 0xc8, 0x8c, 0x4f, 0xc,
- 0x48, 0x84, 0xc0, 0xf4, 0xf4, 0x21, 0x13, 0x4,
- 0x3, 0x12, 0x24, 0xc0, 0xf4, 0xf4, 0x9b, 0x63,
- 0x90, 0xc2, 0x96, 0x6c, 0xc0, 0xf4, 0xf4, 0x68,
- 0x42, 0x60, 0x81, 0x64, 0x48, 0x60, 0xf4, 0xf4,
- 0x64, 0x47, 0x77, 0x77, 0x77, 0x42, 0x60, 0xf4,
- 0xf4, 0x96, 0x6c, 0xcc, 0xcc, 0xcc, 0x63, 0x90,
- 0xf4, 0xf6, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0xf4, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xd0,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x0, 0xf0, 0xf, 0x0, 0xf0,
+ 0xf, 0x0, 0xff, 0xff, 0x0, 0xf0, 0xf, 0x0,
+ 0xf0, 0xf, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x8,
+ 0x80, 0x88, 0x8, 0x80, 0x8f, 0xff, 0xff, 0xf8,
+ 0x8, 0x80, 0x88, 0x8, 0x80, 0x8f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0xf0, 0x0, 0x0, 0x0, 0xf, 0x0,
+ 0xff, 0xff, 0x0, 0xf0, 0x0, 0x0, 0x0, 0xf,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf8,
/* U+F124 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x4b, 0xf7, 0x0, 0x0, 0x0,
- 0x4, 0xbf, 0xff, 0x10, 0x0, 0x0, 0x4b, 0xff,
- 0xff, 0x80, 0x0, 0x4, 0xbf, 0xff, 0xff, 0xf1,
- 0x0, 0x4b, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0x10, 0x7, 0x88, 0x88,
- 0xaf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xf1, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xf1, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0xaf, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xcf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x6,
+ 0xdf, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x17,
+ 0xef, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0x18,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x2a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60,
+ 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
+ 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xf2, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0x80, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
/* U+F15B "" */
- 0x9b, 0xbb, 0xbb, 0xbb, 0x1, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xb, 0x30, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xc, 0xe3, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xc, 0xfe, 0x30, 0xff, 0xff, 0xff, 0xff,
- 0x9, 0xcc, 0xb1, 0xff, 0xff, 0xff, 0xff, 0x30,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
- 0x24, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41,
+ 0xdf, 0xff, 0xff, 0xf0, 0xd2, 0x0, 0xff, 0xff,
+ 0xff, 0xf0, 0xfe, 0x20, 0xff, 0xff, 0xff, 0xf0,
+ 0xff, 0xe2, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xfd,
+ 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd,
/* U+F1EB "" */
- 0x0, 0x0, 0x0, 0x47, 0x77, 0x74, 0x10, 0x0,
- 0x0, 0x0, 0x3, 0xae, 0xff, 0xff, 0xff, 0xfc,
- 0x50, 0x0, 0x1, 0x9f, 0xff, 0xfe, 0xcc, 0xcf,
- 0xff, 0xfd, 0x30, 0x3c, 0xff, 0xe6, 0x20, 0x1,
- 0x1, 0x5c, 0xff, 0xe6, 0x5f, 0xf7, 0x6, 0xaf,
- 0xff, 0xfc, 0x61, 0x4f, 0xfa, 0x5, 0x33, 0xdf,
- 0xff, 0xff, 0xff, 0xfe, 0x61, 0x70, 0x0, 0x2f,
- 0xff, 0xc6, 0x44, 0x5a, 0xff, 0xf5, 0x0, 0x0,
- 0x6, 0xd4, 0x16, 0xab, 0x83, 0x2c, 0xa0, 0x0,
- 0x0, 0x0, 0x6, 0xef, 0xff, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0xb9, 0xef, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x51, 0x33, 0x5,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6a, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0x9c, 0xef, 0xfe,
+ 0xc9, 0x40, 0x0, 0x0, 0x0, 0x7, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x70, 0x0, 0x4, 0xdf,
+ 0xff, 0xfc, 0xa8, 0x8a, 0xcf, 0xff, 0xfd, 0x40,
+ 0x6f, 0xff, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x5d,
+ 0xff, 0xf6, 0xcf, 0xf6, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xfc, 0x1a, 0x30, 0x0, 0x5a,
+ 0xdf, 0xfd, 0xa5, 0x0, 0x3, 0xa1, 0x0, 0x0,
+ 0x4d, 0xff, 0xff, 0xff, 0xff, 0xd4, 0x0, 0x0,
+ 0x0, 0x5, 0xff, 0xfe, 0xa8, 0x8a, 0xef, 0xff,
+ 0x50, 0x0, 0x0, 0x1, 0xdf, 0x70, 0x0, 0x0,
+ 0x7, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x12, 0x0,
+ 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4e, 0xe4, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xef, 0xfe, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfe,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4e, 0xe4, 0x0, 0x0, 0x0, 0x0,
/* U+F240 "" */
- 0x26, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x40, 0xe, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcf, 0x40, 0xf4, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0xc8, 0xf,
- 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x4c, 0xb1, 0xf4, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0x6c, 0x8f, 0x4c, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x88, 0xf4,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0x8, 0x8f, 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x40, 0x88, 0xf4, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf4, 0xcf, 0x6f, 0x49,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x3c,
- 0x80, 0xf6, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0xc7, 0xa, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xff,
+ 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0xff, 0xff, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80,
/* U+F241 "" */
- 0x26, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x40, 0xe, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcf, 0x40, 0xf4, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x33, 0x0, 0x0, 0xc8, 0xf,
- 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0,
- 0xc, 0xb1, 0xf4, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x0, 0x0, 0x6c, 0x8f, 0x4c, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x88, 0xf4,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
- 0x8, 0x8f, 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc0, 0x0, 0x0, 0x88, 0xf4, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x0, 0x0, 0xcf, 0x6f, 0x49,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x90, 0x0, 0xc,
- 0x80, 0xf6, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0xc7, 0xa, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf, 0xff,
+ 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0,
+ 0x0, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x0, 0x0, 0xff, 0xff, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0xf0, 0x0, 0xf, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80,
/* U+F242 "" */
- 0x26, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x40, 0xe, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcf, 0x40, 0xf4, 0x33, 0x33,
- 0x33, 0x33, 0x10, 0x0, 0x0, 0x0, 0xc8, 0xf,
- 0x4c, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0xc, 0xb1, 0xf4, 0xcf, 0xff, 0xff, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x6c, 0x8f, 0x4c, 0xff, 0xff,
- 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x88, 0xf4,
- 0xcf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0,
- 0x8, 0x8f, 0x4c, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x88, 0xf4, 0xcf, 0xff, 0xff,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0xcf, 0x6f, 0x49,
- 0xcc, 0xcc, 0xcc, 0xc3, 0x0, 0x0, 0x0, 0xc,
- 0x80, 0xf6, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0xc7, 0xa, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xf,
+ 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff,
+ 0xff, 0xf, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0xf, 0xff, 0xff,
+ 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80,
/* U+F243 "" */
- 0x26, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x40, 0xe, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcf, 0x40, 0xf4, 0x33, 0x33,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc8, 0xf,
- 0x4c, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xb1, 0xf4, 0xcf, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6c, 0x8f, 0x4c, 0xff, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88, 0xf4,
- 0xcf, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0x8f, 0x4c, 0xff, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x88, 0xf4, 0xcf, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x6f, 0x49,
- 0xcc, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0x80, 0xf6, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0xc7, 0xa, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0xf,
+ 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
+ 0xff, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0xf, 0xff, 0xf0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0xf, 0xff, 0xf0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80,
/* U+F244 "" */
- 0x26, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x40, 0xe, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcf, 0x40, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc8, 0xf,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xb1, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6c, 0x8f, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0x8f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x88, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x6f, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0x80, 0xf6, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0xc7, 0xa, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
+ 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80,
+
+ /* U+F287 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0xcf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xb9, 0x29, 0xfe, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x10, 0x2,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xdf, 0x80, 0xa,
+ 0x90, 0x0, 0x0, 0x0, 0x3, 0x70, 0x0, 0xdf,
+ 0xff, 0x77, 0xf7, 0x55, 0x55, 0x55, 0x55, 0x8f,
+ 0xd3, 0xf, 0xff, 0xfd, 0xcc, 0xdf, 0xdc, 0xcc,
+ 0xcc, 0xcd, 0xff, 0xb0, 0x8f, 0xfe, 0x10, 0x0,
+ 0xaa, 0x0, 0x0, 0x0, 0x4d, 0x40, 0x0, 0x46,
+ 0x10, 0x0, 0x1, 0xf2, 0x2, 0x33, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xb1, 0xcf,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xa, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x22,
+ 0x0, 0x0, 0x0,
/* U+F293 "" */
- 0x0, 0x6, 0x9b, 0xb7, 0x40, 0x0, 0x2, 0xcf,
- 0xfd, 0xff, 0xf9, 0x0, 0xd, 0xff, 0xf4, 0xaf,
- 0xff, 0x80, 0x5f, 0xff, 0xf4, 0xa, 0xff, 0xe1,
- 0xaf, 0xff, 0xf4, 0x51, 0xaf, 0xf5, 0xdf, 0x83,
- 0xf4, 0x8a, 0xc, 0xf8, 0xff, 0xf6, 0x33, 0x51,
- 0x6f, 0xfc, 0xff, 0xff, 0x60, 0x6, 0xff, 0xfc,
- 0xff, 0xff, 0xd0, 0x1f, 0xff, 0xfc, 0xff, 0xfd,
- 0x10, 0x13, 0xff, 0xfc, 0xff, 0xd1, 0x64, 0x86,
- 0x3f, 0xfa, 0xcf, 0x96, 0xf4, 0x86, 0x1c, 0xf8,
- 0x8f, 0xff, 0xf4, 0x11, 0xcf, 0xf3, 0x2f, 0xff,
- 0xf4, 0x1c, 0xff, 0xe0, 0x8, 0xff, 0xf5, 0xcf,
- 0xff, 0x40, 0x0, 0x7e, 0xfe, 0xff, 0xc3, 0x0,
- 0x0, 0x0, 0x34, 0x42, 0x0, 0x0
+ 0x0, 0x18, 0xdf, 0xfd, 0x92, 0x0, 0x2, 0xef,
+ 0xfb, 0xef, 0xff, 0x30, 0xd, 0xff, 0xfa, 0x2e,
+ 0xff, 0xe0, 0x4f, 0xff, 0xfa, 0x3, 0xff, 0xf5,
+ 0x9f, 0xfa, 0xfa, 0x35, 0x4f, 0xfa, 0xcf, 0xc0,
+ 0x8a, 0x3d, 0xb, 0xfd, 0xef, 0xfb, 0x3, 0x12,
+ 0x8f, 0xfe, 0xff, 0xff, 0xb0, 0x6, 0xff, 0xff,
+ 0xff, 0xff, 0xd1, 0x8, 0xff, 0xff, 0xef, 0xfd,
+ 0x11, 0x10, 0x9f, 0xff, 0xdf, 0xd1, 0x59, 0x3b,
+ 0xb, 0xfd, 0xaf, 0xd7, 0xfa, 0x38, 0x1d, 0xfb,
+ 0x5f, 0xff, 0xfa, 0x1, 0xdf, 0xf7, 0xd, 0xff,
+ 0xfa, 0x1d, 0xff, 0xf1, 0x3, 0xef, 0xfc, 0xdf,
+ 0xff, 0x50, 0x0, 0x18, 0xdf, 0xfe, 0xa3, 0x0,
+
+ /* U+F2ED "" */
+ 0x0, 0x0, 0x7f, 0xff, 0xf7, 0x0, 0x0, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0xf, 0xf9, 0x9f, 0x99, 0xf9, 0x9f,
+ 0xf0, 0xf, 0xf8, 0x8f, 0x88, 0xf8, 0x8f, 0xf0,
+ 0xf, 0xf8, 0x8f, 0x88, 0xf8, 0x8f, 0xf0, 0xf,
+ 0xf8, 0x8f, 0x88, 0xf8, 0x8f, 0xf0, 0xf, 0xf8,
+ 0x8f, 0x88, 0xf8, 0x8f, 0xf0, 0xf, 0xf8, 0x8f,
+ 0x88, 0xf8, 0x8f, 0xf0, 0xf, 0xf8, 0x8f, 0x88,
+ 0xf8, 0x8f, 0xf0, 0xf, 0xf9, 0x9f, 0x99, 0xf9,
+ 0x9f, 0xf0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+
+ /* U+F304 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xa0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff,
+ 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x8a, 0x1d,
+ 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xfa,
+ 0x1d, 0xff, 0x70, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xfa, 0x1d, 0x80, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x6f, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0xdf,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0xe,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xde, 0xdb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F55A "" */
+ 0x0, 0x0, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xe4, 0x0, 0x1, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x0, 0x1d, 0xff, 0xff,
+ 0xfa, 0xef, 0xfe, 0xaf, 0xff, 0xff, 0x1, 0xdf,
+ 0xff, 0xff, 0xa0, 0x2e, 0xe2, 0xa, 0xff, 0xff,
+ 0x1d, 0xff, 0xff, 0xff, 0xe2, 0x2, 0x20, 0x2e,
+ 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xfe, 0x20,
+ 0x2, 0xef, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff,
+ 0xfe, 0x20, 0x2, 0xef, 0xff, 0xff, 0x1d, 0xff,
+ 0xff, 0xff, 0xe2, 0x2, 0x20, 0x2e, 0xff, 0xff,
+ 0x1, 0xdf, 0xff, 0xff, 0xa0, 0x2e, 0xe2, 0xa,
+ 0xff, 0xff, 0x0, 0x1d, 0xff, 0xff, 0xfa, 0xef,
+ 0xfe, 0xaf, 0xff, 0xff, 0x0, 0x1, 0xdf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0,
+ 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4,
+
+ /* U+F7C2 "" */
+ 0x0, 0x8, 0xff, 0xff, 0xff, 0xe4, 0x0, 0x8f,
+ 0xff, 0xff, 0xff, 0xfe, 0x8, 0xf8, 0xf, 0xb,
+ 0x40, 0xff, 0x8f, 0xf8, 0xf, 0xb, 0x40, 0xff,
+ 0xff, 0xf8, 0xf, 0xb, 0x40, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xe4,
+
+ /* U+F8A2 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0xe0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x2,
+ 0xef, 0x10, 0x0, 0xbf, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xf1, 0x0, 0xcf, 0xf1, 0x0, 0x0, 0x0,
+ 0x7, 0xff, 0x11, 0xcf, 0xff, 0x77, 0x77, 0x77,
+ 0x77, 0xbf, 0xf1, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x17, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe0, 0x7, 0xff, 0xf1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xa0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
};
@@ -1486,152 +1651,159 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 64, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 67, .box_h = 12, .box_w = 2, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 12, .adv_w = 92, .box_h = 5, .box_w = 4, .ofs_x = 1, .ofs_y = 7},
- {.bitmap_index = 22, .adv_w = 160, .box_h = 12, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 82, .adv_w = 149, .box_h = 16, .box_w = 8, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 146, .adv_w = 187, .box_h = 13, .box_w = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 218, .adv_w = 160, .box_h = 13, .box_w = 10, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 283, .adv_w = 56, .box_h = 5, .box_w = 2, .ofs_x = 1, .ofs_y = 7},
- {.bitmap_index = 288, .adv_w = 85, .box_h = 17, .box_w = 5, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 331, .adv_w = 86, .box_h = 17, .box_w = 5, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 374, .adv_w = 111, .box_h = 6, .box_w = 7, .ofs_x = 0, .ofs_y = 3},
- {.bitmap_index = 395, .adv_w = 145, .box_h = 9, .box_w = 9, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 436, .adv_w = 57, .box_h = 4, .box_w = 2, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 440, .adv_w = 115, .box_h = 2, .box_w = 5, .ofs_x = 1, .ofs_y = 4},
- {.bitmap_index = 445, .adv_w = 69, .box_h = 2, .box_w = 2, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 447, .adv_w = 106, .box_h = 13, .box_w = 6, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 486, .adv_w = 144, .box_h = 13, .box_w = 8, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 538, .adv_w = 144, .box_h = 12, .box_w = 5, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 568, .adv_w = 144, .box_h = 12, .box_w = 8, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 616, .adv_w = 144, .box_h = 13, .box_w = 7, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 662, .adv_w = 144, .box_h = 12, .box_w = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 716, .adv_w = 144, .box_h = 13, .box_w = 8, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 768, .adv_w = 144, .box_h = 13, .box_w = 8, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 820, .adv_w = 144, .box_h = 12, .box_w = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 874, .adv_w = 144, .box_h = 13, .box_w = 9, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 933, .adv_w = 144, .box_h = 13, .box_w = 8, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 985, .adv_w = 65, .box_h = 9, .box_w = 2, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 994, .adv_w = 66, .box_h = 11, .box_w = 2, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 1005, .adv_w = 130, .box_h = 8, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1033, .adv_w = 144, .box_h = 5, .box_w = 7, .ofs_x = 1, .ofs_y = 3},
- {.bitmap_index = 1051, .adv_w = 134, .box_h = 8, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1079, .adv_w = 122, .box_h = 12, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1121, .adv_w = 229, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 1225, .adv_w = 162, .box_h = 12, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1285, .adv_w = 162, .box_h = 12, .box_w = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1339, .adv_w = 162, .box_h = 13, .box_w = 9, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 1398, .adv_w = 173, .box_h = 12, .box_w = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1452, .adv_w = 140, .box_h = 12, .box_w = 8, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1500, .adv_w = 140, .box_h = 12, .box_w = 8, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1548, .adv_w = 173, .box_h = 13, .box_w = 9, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 1607, .adv_w = 180, .box_h = 12, .box_w = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1661, .adv_w = 72, .box_h = 12, .box_w = 2, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1673, .adv_w = 140, .box_h = 13, .box_w = 8, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 1725, .adv_w = 162, .box_h = 12, .box_w = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1779, .adv_w = 140, .box_h = 12, .box_w = 8, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1827, .adv_w = 221, .box_h = 12, .box_w = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1899, .adv_w = 180, .box_h = 12, .box_w = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1953, .adv_w = 175, .box_h = 13, .box_w = 9, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2012, .adv_w = 162, .box_h = 12, .box_w = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2066, .adv_w = 178, .box_h = 13, .box_w = 10, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2131, .adv_w = 162, .box_h = 12, .box_w = 9, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2185, .adv_w = 157, .box_h = 13, .box_w = 8, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2237, .adv_w = 153, .box_h = 12, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2297, .adv_w = 173, .box_h = 13, .box_w = 9, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2356, .adv_w = 162, .box_h = 12, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2416, .adv_w = 220, .box_h = 12, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2500, .adv_w = 162, .box_h = 12, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2560, .adv_w = 162, .box_h = 12, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2620, .adv_w = 153, .box_h = 12, .box_w = 9, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2674, .adv_w = 69, .box_h = 16, .box_w = 4, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 2706, .adv_w = 106, .box_h = 13, .box_w = 7, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 2752, .adv_w = 69, .box_h = 16, .box_w = 3, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 2776, .adv_w = 107, .box_h = 7, .box_w = 6, .ofs_x = 0, .ofs_y = 5},
- {.bitmap_index = 2797, .adv_w = 116, .box_h = 2, .box_w = 8, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 2805, .adv_w = 80, .box_h = 3, .box_w = 4, .ofs_x = 0, .ofs_y = 9},
- {.bitmap_index = 2811, .adv_w = 141, .box_h = 10, .box_w = 8, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 2851, .adv_w = 146, .box_h = 14, .box_w = 8, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2907, .adv_w = 134, .box_h = 10, .box_w = 8, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 2947, .adv_w = 146, .box_h = 14, .box_w = 8, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3003, .adv_w = 134, .box_h = 10, .box_w = 8, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3043, .adv_w = 78, .box_h = 13, .box_w = 6, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3082, .adv_w = 146, .box_h = 13, .box_w = 8, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 3134, .adv_w = 146, .box_h = 13, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3180, .adv_w = 65, .box_h = 13, .box_w = 2, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3193, .adv_w = 66, .box_h = 17, .box_w = 4, .ofs_x = -1, .ofs_y = -4},
- {.bitmap_index = 3227, .adv_w = 131, .box_h = 13, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3273, .adv_w = 65, .box_h = 13, .box_w = 2, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3286, .adv_w = 224, .box_h = 9, .box_w = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3340, .adv_w = 146, .box_h = 9, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3372, .adv_w = 146, .box_h = 10, .box_w = 9, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3417, .adv_w = 146, .box_h = 13, .box_w = 8, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 3469, .adv_w = 146, .box_h = 13, .box_w = 8, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 3521, .adv_w = 90, .box_h = 9, .box_w = 5, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3544, .adv_w = 134, .box_h = 10, .box_w = 7, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 3579, .adv_w = 82, .box_h = 12, .box_w = 5, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3609, .adv_w = 146, .box_h = 10, .box_w = 7, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 3644, .adv_w = 129, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3680, .adv_w = 194, .box_h = 9, .box_w = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3734, .adv_w = 129, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3770, .adv_w = 129, .box_h = 13, .box_w = 8, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 3822, .adv_w = 129, .box_h = 9, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3858, .adv_w = 87, .box_h = 16, .box_w = 6, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 3906, .adv_w = 63, .box_h = 14, .box_w = 2, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 3920, .adv_w = 87, .box_h = 16, .box_w = 5, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 3960, .adv_w = 174, .box_h = 4, .box_w = 9, .ofs_x = 1, .ofs_y = 3},
- {.bitmap_index = 3978, .adv_w = 219, .box_h = 16, .box_w = 14, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 4090, .adv_w = 274, .box_h = 16, .box_w = 18, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 4234, .adv_w = 256, .box_h = 13, .box_w = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4338, .adv_w = 256, .box_h = 11, .box_w = 14, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4415, .adv_w = 201, .box_h = 12, .box_w = 11, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 4481, .adv_w = 219, .box_h = 16, .box_w = 14, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4593, .adv_w = 219, .box_h = 15, .box_w = 14, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4698, .adv_w = 201, .box_h = 15, .box_w = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 4796, .adv_w = 238, .box_h = 12, .box_w = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4886, .adv_w = 238, .box_h = 14, .box_w = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4991, .adv_w = 219, .box_h = 12, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5075, .adv_w = 219, .box_h = 15, .box_w = 14, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5180, .adv_w = 110, .box_h = 11, .box_w = 7, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5219, .adv_w = 165, .box_h = 11, .box_w = 11, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5280, .adv_w = 238, .box_h = 13, .box_w = 15, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 5378, .adv_w = 274, .box_h = 15, .box_w = 18, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5513, .adv_w = 219, .box_h = 15, .box_w = 14, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5618, .adv_w = 146, .box_h = 15, .box_w = 10, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5693, .adv_w = 201, .box_h = 15, .box_w = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5791, .adv_w = 219, .box_h = 15, .box_w = 14, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5896, .adv_w = 219, .box_h = 15, .box_w = 14, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 6001, .adv_w = 146, .box_h = 15, .box_w = 10, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 6076, .adv_w = 220, .box_h = 12, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6160, .adv_w = 183, .box_h = 15, .box_w = 10, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 6235, .adv_w = 183, .box_h = 15, .box_w = 10, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 6310, .adv_w = 201, .box_h = 13, .box_w = 13, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6395, .adv_w = 201, .box_h = 4, .box_w = 13, .ofs_x = 0, .ofs_y = 4},
- {.bitmap_index = 6421, .adv_w = 256, .box_h = 16, .box_w = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 6549, .adv_w = 256, .box_h = 15, .box_w = 16, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 6669, .adv_w = 256, .box_h = 10, .box_w = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6749, .adv_w = 256, .box_h = 10, .box_w = 16, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 6829, .adv_w = 274, .box_h = 11, .box_w = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6923, .adv_w = 238, .box_h = 13, .box_w = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7021, .adv_w = 238, .box_h = 16, .box_w = 15, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7141, .adv_w = 201, .box_h = 13, .box_w = 13, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7226, .adv_w = 256, .box_h = 14, .box_w = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7338, .adv_w = 256, .box_h = 17, .box_w = 16, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 7474, .adv_w = 219, .box_h = 15, .box_w = 14, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7579, .adv_w = 128, .box_h = 16, .box_w = 8, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 7643, .adv_w = 256, .box_h = 17, .box_w = 16, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 7779, .adv_w = 274, .box_h = 11, .box_w = 18, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7878, .adv_w = 201, .box_h = 13, .box_w = 13, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 7963, .adv_w = 219, .box_h = 17, .box_w = 14, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 8082, .adv_w = 293, .box_h = 13, .box_w = 18, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8199, .adv_w = 329, .box_h = 12, .box_w = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8325, .adv_w = 329, .box_h = 12, .box_w = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8451, .adv_w = 329, .box_h = 12, .box_w = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8577, .adv_w = 329, .box_h = 12, .box_w = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8703, .adv_w = 329, .box_h = 12, .box_w = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8829, .adv_w = 219, .box_h = 17, .box_w = 12, .ofs_x = 1, .ofs_y = -3}
+ {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 63, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 0, .adv_w = 66, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 12, .adv_w = 82, .box_w = 4, .box_h = 5, .ofs_x = 1, .ofs_y = 7},
+ {.bitmap_index = 22, .adv_w = 159, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 82, .adv_w = 144, .box_w = 9, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 154, .adv_w = 188, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 226, .adv_w = 159, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 286, .adv_w = 45, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = 8},
+ {.bitmap_index = 290, .adv_w = 88, .box_w = 5, .box_h = 18, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 335, .adv_w = 89, .box_w = 5, .box_h = 18, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 380, .adv_w = 110, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 5},
+ {.bitmap_index = 405, .adv_w = 145, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 446, .adv_w = 50, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 454, .adv_w = 71, .box_w = 5, .box_h = 3, .ofs_x = 0, .ofs_y = 4},
+ {.bitmap_index = 462, .adv_w = 67, .box_w = 2, .box_h = 2, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 464, .adv_w = 106, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 510, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 564, .adv_w = 144, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 594, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 648, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 696, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 750, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 798, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 846, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 900, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 954, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1002, .adv_w = 62, .box_w = 2, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1011, .adv_w = 54, .box_w = 3, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 1029, .adv_w = 130, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 1057, .adv_w = 141, .box_w = 7, .box_h = 6, .ofs_x = 1, .ofs_y = 3},
+ {.bitmap_index = 1078, .adv_w = 134, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 1},
+ {.bitmap_index = 1106, .adv_w = 121, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1148, .adv_w = 230, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 1253, .adv_w = 167, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1319, .adv_w = 159, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1373, .adv_w = 167, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1433, .adv_w = 168, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1487, .adv_w = 146, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1535, .adv_w = 142, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1583, .adv_w = 174, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1643, .adv_w = 183, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1703, .adv_w = 70, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1715, .adv_w = 141, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1763, .adv_w = 161, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1823, .adv_w = 138, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1871, .adv_w = 224, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1943, .adv_w = 183, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2003, .adv_w = 176, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2069, .adv_w = 162, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2123, .adv_w = 176, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 2200, .adv_w = 158, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2254, .adv_w = 152, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2308, .adv_w = 153, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2368, .adv_w = 166, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2422, .adv_w = 163, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2482, .adv_w = 227, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2566, .adv_w = 161, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2626, .adv_w = 154, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2686, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2740, .adv_w = 68, .box_w = 4, .box_h = 18, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 2776, .adv_w = 105, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 2822, .adv_w = 68, .box_w = 4, .box_h = 18, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 2858, .adv_w = 107, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 6},
+ {.bitmap_index = 2879, .adv_w = 116, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 2891, .adv_w = 79, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 10},
+ {.bitmap_index = 2897, .adv_w = 139, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2933, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2981, .adv_w = 134, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3017, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3065, .adv_w = 136, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3101, .adv_w = 89, .box_w = 6, .box_h = 14, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3143, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 3191, .adv_w = 141, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3233, .adv_w = 62, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3245, .adv_w = 61, .box_w = 4, .box_h = 15, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 3275, .adv_w = 130, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3323, .adv_w = 62, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3335, .adv_w = 224, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3389, .adv_w = 141, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3421, .adv_w = 146, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3462, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 3510, .adv_w = 146, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 3558, .adv_w = 87, .box_w = 5, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3581, .adv_w = 132, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3617, .adv_w = 84, .box_w = 5, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3645, .adv_w = 141, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3677, .adv_w = 124, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3713, .adv_w = 192, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3767, .adv_w = 127, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3803, .adv_w = 121, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 3851, .adv_w = 127, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3887, .adv_w = 87, .box_w = 6, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 3938, .adv_w = 62, .box_w = 2, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 3952, .adv_w = 87, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 3995, .adv_w = 174, .box_w = 9, .box_h = 5, .ofs_x = 1, .ofs_y = 3},
+ {.bitmap_index = 4018, .adv_w = 256, .box_w = 16, .box_h = 17, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 4154, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4250, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 4362, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4458, .adv_w = 176, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4524, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 4652, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 4780, .adv_w = 288, .box_w = 18, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 4906, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5034, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5142, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5270, .adv_w = 128, .box_w = 8, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 5326, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 5410, .adv_w = 288, .box_w = 18, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5554, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5650, .adv_w = 224, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 5730, .adv_w = 224, .box_w = 14, .box_h = 18, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 5856, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 5961, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 6059, .adv_w = 224, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 6139, .adv_w = 224, .box_w = 16, .box_h = 14, .ofs_x = -1, .ofs_y = -1},
+ {.bitmap_index = 6251, .adv_w = 160, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 6321, .adv_w = 160, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 6391, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 6489, .adv_w = 224, .box_w = 14, .box_h = 4, .ofs_x = 0, .ofs_y = 4},
+ {.bitmap_index = 6517, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6625, .adv_w = 320, .box_w = 20, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 6785, .adv_w = 288, .box_w = 20, .box_h = 16, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 6945, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 7073, .adv_w = 224, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 7143, .adv_w = 224, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 7213, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 7353, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7449, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 7577, .adv_w = 256, .box_w = 17, .box_h = 17, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 7722, .adv_w = 224, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 7827, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 7939, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 8037, .adv_w = 160, .box_w = 12, .box_h = 16, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 8133, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 8245, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 8357, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8465, .adv_w = 256, .box_w = 18, .box_h = 18, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 8627, .adv_w = 192, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 8723, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 8873, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 8973, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 9073, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 9173, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 9273, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 9373, .adv_w = 320, .box_w = 21, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 9520, .adv_w = 224, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 9616, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 9728, .adv_w = 256, .box_w = 17, .box_h = 17, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 9873, .adv_w = 320, .box_w = 20, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 9993, .adv_w = 192, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 10089, .adv_w = 258, .box_w = 17, .box_h = 11, .ofs_x = 0, .ofs_y = 1}
};
/*---------------------
@@ -1639,25 +1811,26 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
*--------------------*/
static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x13,
- 0x14, 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d,
- 0x3f, 0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52,
- 0x53, 0x66, 0x67, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xf2,
- 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241, 0x242,
- 0x243, 0x292
+ 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
+ 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
+ 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
+ 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
+ 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
+ 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
+ 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
+ 0x8a1
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
- .range_start = 32, .range_length = 95, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY,
- .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0
+ .range_start = 32, .range_length = 95, .glyph_id_start = 1,
+ .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
- .range_start = 61441, .range_length = 659, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY,
- .glyph_id_start = 96, .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 50
+ .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
+ .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
@@ -1666,569 +1839,245 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
*----------------*/
-/*Pair left and right glyphs for kerning*/
-static const uint8_t kern_pair_glyph_ids[] =
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] =
{
- 9, 43,
- 9, 55,
- 9, 56,
- 9, 58,
- 17, 17,
- 17, 18,
- 17, 20,
- 17, 21,
- 17, 22,
- 17, 23,
- 17, 24,
- 17, 26,
- 18, 19,
- 18, 20,
- 18, 22,
- 18, 24,
- 19, 17,
- 19, 18,
- 19, 19,
- 19, 22,
- 19, 23,
- 19, 24,
- 19, 25,
- 19, 26,
- 20, 18,
- 20, 19,
- 20, 20,
- 20, 21,
- 20, 22,
- 20, 23,
- 20, 24,
- 20, 25,
- 20, 26,
- 21, 17,
- 21, 19,
- 21, 21,
- 21, 22,
- 21, 23,
- 21, 24,
- 21, 25,
- 22, 18,
- 22, 19,
- 22, 20,
- 22, 21,
- 22, 22,
- 22, 23,
- 22, 24,
- 22, 25,
- 22, 26,
- 23, 17,
- 23, 18,
- 23, 19,
- 23, 21,
- 23, 22,
- 23, 23,
- 23, 24,
- 23, 25,
- 24, 18,
- 24, 21,
- 24, 22,
- 24, 23,
- 24, 24,
- 24, 25,
- 24, 26,
- 25, 17,
- 25, 18,
- 25, 20,
- 25, 21,
- 25, 22,
- 25, 23,
- 26, 17,
- 26, 18,
- 26, 19,
- 26, 21,
- 26, 22,
- 26, 23,
- 26, 24,
- 26, 26,
- 34, 36,
- 34, 40,
- 34, 48,
- 34, 50,
- 34, 53,
- 34, 54,
- 34, 55,
- 34, 56,
- 34, 58,
- 34, 66,
- 34, 68,
- 34, 69,
- 34, 70,
- 34, 72,
- 34, 80,
- 34, 82,
- 34, 84,
- 34, 85,
- 34, 86,
- 34, 87,
- 34, 88,
- 34, 91,
- 35, 58,
- 35, 66,
- 35, 74,
- 35, 77,
- 35, 80,
- 35, 83,
- 35, 86,
- 35, 90,
- 36, 36,
- 36, 40,
- 36, 48,
- 36, 50,
- 36, 74,
- 36, 83,
- 36, 86,
- 36, 90,
- 36, 91,
- 37, 55,
- 37, 56,
- 37, 66,
- 37, 70,
- 37, 80,
- 37, 86,
- 38, 55,
- 38, 56,
- 38, 58,
- 38, 67,
- 38, 68,
- 38, 69,
- 38, 70,
- 38, 71,
- 38, 72,
- 38, 74,
- 38, 75,
- 38, 76,
- 38, 77,
- 38, 78,
- 38, 79,
- 38, 80,
- 38, 81,
- 38, 82,
- 38, 83,
- 38, 85,
- 38, 86,
- 38, 87,
- 38, 88,
- 38, 89,
- 38, 90,
- 38, 91,
- 39, 13,
- 39, 15,
- 39, 34,
- 39, 66,
- 39, 70,
- 39, 74,
- 39, 77,
- 39, 80,
- 39, 83,
- 39, 86,
- 39, 90,
- 40, 66,
- 40, 70,
- 40, 79,
- 40, 80,
- 40, 83,
- 40, 86,
- 40, 90,
- 41, 66,
- 41, 70,
- 41, 80,
- 41, 86,
- 41, 90,
- 42, 66,
- 42, 68,
- 42, 69,
- 42, 71,
- 42, 72,
- 42, 78,
- 42, 79,
- 42, 80,
- 42, 81,
- 42, 83,
- 42, 84,
- 42, 85,
- 42, 86,
- 42, 87,
- 42, 88,
- 42, 90,
- 43, 66,
- 43, 80,
- 44, 36,
- 44, 40,
- 44, 48,
- 44, 50,
- 44, 66,
- 44, 70,
- 44, 74,
- 44, 80,
- 44, 83,
- 44, 86,
- 44, 88,
- 44, 90,
- 45, 34,
- 45, 36,
- 45, 40,
- 45, 48,
- 45, 50,
- 45, 53,
- 45, 54,
- 45, 55,
- 45, 56,
- 45, 58,
- 45, 75,
- 45, 86,
- 45, 88,
- 45, 90,
- 46, 66,
- 46, 70,
- 46, 75,
- 46, 79,
- 46, 80,
- 46, 86,
- 46, 90,
- 47, 70,
- 47, 80,
- 47, 90,
- 48, 34,
- 48, 53,
- 48, 55,
- 48, 56,
- 48, 57,
- 48, 58,
- 48, 68,
- 48, 69,
- 48, 70,
- 48, 71,
- 48, 72,
- 48, 75,
- 48, 80,
- 48, 81,
- 48, 82,
- 48, 84,
- 48, 85,
- 48, 86,
- 48, 89,
- 48, 90,
- 48, 91,
- 49, 13,
- 49, 15,
- 49, 34,
- 49, 38,
- 49, 41,
- 49, 42,
- 49, 66,
- 49, 70,
- 49, 73,
- 49, 74,
- 49, 77,
- 49, 79,
- 49, 80,
- 49, 83,
- 49, 84,
- 49, 85,
- 49, 90,
- 50, 34,
- 50, 53,
- 50, 54,
- 50, 55,
- 50, 56,
- 50, 57,
- 50, 58,
- 50, 66,
- 50, 86,
- 51, 36,
- 51, 40,
- 51, 48,
- 51, 50,
- 51, 53,
- 51, 54,
- 51, 55,
- 51, 56,
- 51, 58,
- 51, 66,
- 51, 70,
- 51, 80,
- 51, 86,
- 51, 90,
- 52, 66,
- 52, 70,
- 52, 75,
- 52, 78,
- 52, 79,
- 52, 80,
- 52, 81,
- 52, 82,
- 52, 86,
- 52, 88,
- 52, 90,
- 53, 13,
- 53, 14,
- 53, 15,
- 53, 27,
- 53, 28,
- 53, 34,
- 53, 36,
- 53, 40,
- 53, 48,
- 53, 50,
- 53, 52,
- 53, 53,
- 53, 55,
- 53, 56,
- 53, 57,
- 53, 58,
- 53, 66,
- 53, 70,
- 53, 74,
- 53, 78,
- 53, 80,
- 53, 83,
- 53, 84,
- 53, 86,
- 53, 88,
- 53, 90,
- 53, 91,
- 54, 34,
- 54, 69,
- 54, 71,
- 54, 72,
- 54, 78,
- 54, 79,
- 54, 81,
- 54, 83,
- 54, 84,
- 54, 85,
- 54, 89,
- 54, 91,
- 55, 10,
- 55, 13,
- 55, 14,
- 55, 15,
- 55, 27,
- 55, 28,
- 55, 34,
- 55, 36,
- 55, 40,
- 55, 48,
- 55, 50,
- 55, 62,
- 55, 66,
- 55, 70,
- 55, 80,
- 55, 83,
- 55, 86,
- 55, 90,
- 55, 94,
- 56, 10,
- 56, 13,
- 56, 14,
- 56, 15,
- 56, 27,
- 56, 28,
- 56, 34,
- 56, 36,
- 56, 40,
- 56, 48,
- 56, 50,
- 56, 53,
- 56, 62,
- 56, 66,
- 56, 70,
- 56, 80,
- 56, 83,
- 56, 86,
- 56, 90,
- 56, 94,
- 57, 36,
- 57, 40,
- 57, 48,
- 57, 50,
- 57, 70,
- 57, 86,
- 57, 90,
- 58, 10,
- 58, 13,
- 58, 14,
- 58, 15,
- 58, 27,
- 58, 28,
- 58, 34,
- 58, 36,
- 58, 40,
- 58, 48,
- 58, 50,
- 58, 53,
- 58, 55,
- 58, 56,
- 58, 57,
- 58, 58,
- 58, 62,
- 58, 66,
- 58, 70,
- 58, 80,
- 58, 82,
- 58, 85,
- 58, 86,
- 58, 87,
- 58, 94,
- 59, 34,
- 59, 36,
- 59, 40,
- 59, 48,
- 59, 50,
- 59, 66,
- 59, 70,
- 59, 74,
- 59, 80,
- 59, 86,
- 59, 88,
- 59, 90,
- 60, 43,
- 67, 87,
- 67, 88,
- 67, 90,
- 70, 90,
- 71, 3,
- 71, 8,
- 71, 10,
- 71, 62,
- 71, 72,
- 71, 94,
- 76, 70,
- 80, 87,
- 80, 88,
- 80, 89,
- 80, 90,
- 81, 88,
- 83, 13,
- 83, 15,
- 83, 68,
- 83, 69,
- 83, 70,
- 83, 71,
- 83, 76,
- 83, 80,
- 83, 82,
- 83, 85,
- 83, 86,
- 83, 87,
- 83, 88,
- 83, 89,
- 83, 90,
- 83, 91,
- 87, 13,
- 87, 15,
- 87, 66,
- 87, 68,
- 87, 69,
- 87, 70,
- 87, 80,
- 87, 82,
- 88, 13,
- 88, 15,
- 88, 68,
- 88, 69,
- 88, 70,
- 88, 82,
- 89, 68,
- 89, 69,
- 89, 70,
- 89, 80,
- 89, 82,
- 90, 13,
- 90, 15,
- 90, 68,
- 90, 69,
- 90, 70,
- 90, 80,
- 90, 82,
- 91, 68,
- 91, 69,
- 91, 70,
- 91, 80,
- 92, 43
+ 0, 1, 0, 2, 0, 0, 0, 0,
+ 2, 3, 0, 0, 0, 4, 0, 4,
+ 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 7, 8, 9, 10, 11,
+ 0, 12, 12, 13, 14, 15, 12, 12,
+ 9, 16, 17, 18, 0, 19, 13, 20,
+ 21, 22, 23, 24, 25, 0, 0, 0,
+ 0, 0, 26, 27, 28, 0, 29, 30,
+ 0, 31, 0, 0, 32, 0, 31, 31,
+ 33, 27, 0, 34, 0, 35, 0, 36,
+ 37, 38, 36, 39, 40, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
};
-/* Kerning between the respective left and right glyphs
- * 4.4 format which needs to scaled with `kern_scale`*/
-static const int8_t kern_pair_values[] =
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] =
{
- -12, 5, 5, 6, 1, -4, 0, 1,
- 0, 1, -5, 1, -1, -1, -1, 0,
- -2, -2, 1, -2, -2, -3, -2, 0,
- -2, 0, 1, 2, 1, 0, -3, 1,
- 0, 0, -4, 4, 2, 0, -10, 2,
- 0, -3, 1, 2, 1, 0, 0, 1,
- -3, 0, -5, -3, 3, 1, 0, -5,
- 1, 5, -20, -4, -5, 5, -3, -1,
- 0, -3, 1, 3, 1, 0, 0, -5,
- -1, 1, 0, 0, -6, 1, -5, -5,
- -5, -5, -19, -6, -18, -12, -20, 1,
- -2, -3, -3, -2, -3, -2, 0, -8,
- -3, -10, -8, 3, -20, 1, 0, 0,
- 1, 0, 1, 1, -1, -1, -1, -1,
- -1, -1, -1, 1, -1, -5, -3, 0,
- 1, 1, 1, 2, 2, 2, -1, -5,
- -5, -5, -5, -4, -1, -1, -1, -1,
- -2, -2, -5, -2, -4, -2, -5, -4,
- -7, -6, 1, -6, 1, -38, -38, -15,
- -9, -5, -1, -1, -5, -7, -6, -6,
- 0, 1, 0, 0, 0, 0, 0, -1,
- -1, -1, -1, 0, -1, -1, -2, -1,
- -1, -1, -1, -1, 0, -1, -1, -1,
- -1, -1, 0, -1, -1, -1, -7, -7,
- -8, -7, -1, -7, -1, -7, -1, -6,
- -10, -10, 5, -5, -6, -6, -6, -19,
- -6, -23, -14, -22, 0, -4, -11, -14,
- -1, -1, -1, -1, -1, -1, 0, -1,
- -1, 0, -5, -7, -6, -3, -6, -7,
- 0, 0, 0, 0, 0, -1, 0, 0,
- 1, 0, 1, 0, -1, 1, -2, -42,
- -42, -14, -1, -1, -1, -3, -3, 0,
- -1, -1, -1, -3, 0, -1, 4, 4,
- 4, -8, -2, -7, -5, 3, -9, 0,
- 0, -1, -1, -2, -1, -5, -2, -5,
- -4, -12, 0, -2, -2, -1, 0, 0,
- 0, -1, -1, -1, 0, 0, 0, 0,
- 1, 1, -20, -20, -20, -19, -19, -20,
- -6, -7, -7, -7, -4, 4, 4, 4,
- 3, 4, -20, -20, -1, -17, -20, -17,
- -19, -17, -12, -12, -15, -6, -2, 0,
- -1, -1, -1, -1, -1, -1, 0, -2,
- -2, 5, -22, -9, -22, -8, -8, -19,
- -5, -5, -6, -5, 4, -12, -11, -12,
- -8, -7, -3, 5, 4, -15, -5, -15,
- -5, -6, -14, -3, -3, -4, -3, 4,
- 3, -8, -8, -8, -5, -5, -1, 4,
- -6, -6, -6, -6, -7, -5, -8, 5,
- -23, -13, -23, -11, -11, -21, -7, -7,
- -7, -7, 4, 5, 4, 3, 5, 5,
- -16, -17, -17, -16, -6, -10, -5, 5,
- 3, -6, -6, -7, -6, 0, -5, -1,
- -5, -5, -7, -7, -5, -3, -2, -3,
- -3, 4, 4, 5, 5, -6, 5, -5,
- -4, -2, -5, -4, -2, -16, -16, -5,
- -4, -5, 4, 0, -5, -4, 4, 0,
- 5, 4, 2, 5, 1, -15, -15, -4,
- -3, -3, -3, -4, -3, -12, -11, -2,
- -2, -3, -2, -5, -5, -5, -5, -5,
- -17, -16, -4, -4, -4, -4, -5, -4,
- -4, -4, -4, -5
+ 0, 1, 0, 2, 0, 0, 0, 3,
+ 2, 0, 4, 5, 0, 6, 7, 6,
+ 8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 10, 0, 11, 0, 0, 0,
+ 11, 0, 0, 12, 0, 0, 0, 0,
+ 11, 0, 11, 0, 13, 14, 15, 16,
+ 17, 18, 19, 20, 0, 0, 21, 0,
+ 0, 0, 22, 0, 23, 23, 23, 24,
+ 23, 0, 0, 0, 0, 0, 25, 25,
+ 26, 25, 23, 27, 28, 29, 30, 31,
+ 32, 33, 31, 34, 0, 0, 35, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
};
-/*Collect the kern pair's data in one place*/
-static const lv_font_fmt_txt_kern_pair_t kern_pairs =
+/*Kern values between classes*/
+static const int8_t kern_class_values[] =
{
- .glyph_ids = kern_pair_glyph_ids,
- .values = kern_pair_values,
- .pair_cnt = 484,
- .glyph_ids_size = 0
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -13, 0, 0, 0,
+ 0, 0, 0, 0, -15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -6, -7, 0, -2, -8, 0, -10, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 2, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -21, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -28, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -15, 0, 0, 0, 0, 0, 0, -8,
+ 0, -1, 0, 0, -16, -2, -11, -9,
+ 0, -12, 0, 0, 0, 0, 0, 0,
+ -1, 0, 0, -2, -1, -6, -4, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3,
+ 0, -3, 0, 0, -7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -4, 0, 0, 0, 0, 0,
+ 0, -1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -2,
+ 0, 0, 0, 0, 0, -13, 0, 0,
+ 0, -3, 0, 0, 0, -3, 0, -3,
+ 0, -3, -5, -3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, -2, -2, 0, -2, 0, 0, 0,
+ -2, -3, -3, 0, 0, 0, 0, 0,
+ 0, 0, 0, -29, 0, 0, 0, -21,
+ 0, -33, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, -4, -3, 0, 0, -3,
+ -3, 0, 0, -3, -3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, -4, 0,
+ 0, 0, 2, -3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -8, 0, 0,
+ 0, -4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -3, 0, -3,
+ -3, 0, 0, 0, -3, -5, -8, 0,
+ 0, 0, 0, -42, 0, 0, 0, 0,
+ 0, 0, 0, 2, -8, 0, 0, -34,
+ -7, -22, -18, 0, -30, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -5,
+ -17, -11, 0, 0, 0, 0, 0, 0,
+ 0, 0, -40, 0, 0, 0, -17, 0,
+ -25, 0, 0, 0, 0, 0, -4, 0,
+ -3, 0, -1, -2, 0, 0, -2, 0,
+ 0, 2, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -5, 0, -3,
+ -2, 0, -4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -10, 0, -2, 0, 0, -6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -5, 0,
+ 0, 0, 0, -27, -29, 0, 0, -10,
+ -3, -30, -2, 2, 0, 2, 2, 0,
+ 2, 0, 0, -14, -12, 0, -14, -12,
+ -9, -14, 0, -12, -9, -7, -10, -7,
+ 0, 0, 0, 0, 3, 0, -28, -5,
+ 0, 0, -9, -2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, -6, -5,
+ 0, 0, -6, -4, 0, 0, -3, -1,
+ 0, 0, 0, 2, 0, 0, 0, 2,
+ 0, -15, -7, 0, 0, -5, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0,
+ 2, -4, -4, 0, 0, -4, -3, 0,
+ 0, -2, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, -6, 0, 0,
+ 0, -3, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, -3, 0, 0,
+ -3, 0, 0, 0, -3, -4, 0, 0,
+ 0, 0, 0, 0, -4, 3, -6, -26,
+ -6, 0, 0, -12, -4, -12, -2, 2,
+ -12, 2, 2, 2, 2, 0, 2, -9,
+ -8, -3, -5, -8, -5, -7, -3, -5,
+ -2, 0, -3, -4, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, -3,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -3, 0, 0, -3, 0,
+ 0, 0, -2, -3, -3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -2, 0, 0, -2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -8, 0, 0, 0,
+ 0, 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, -4,
+ 0, 0, 0, 0, 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, -2, -2,
+ 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, 0, 0, -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, -2, 0, 0, 0, 0, 0,
+ 2, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, -3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, -13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 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, 0, 0, 0, 0, 0, 0,
+ 0, -17, 0, 0, 0, 0, 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,
+ -3, -2, 0, 0, 2, 0, 0, 0,
+ -15, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -5, -2, 2, 0, -2, 0, 0, 6,
+ 0, 2, 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, -2,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, -13, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -2, -2,
+ 2, 0, -2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -15, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 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,
+ -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,
+ -2, 0, 0, -2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -2, 0, 0, -2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes =
+{
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 40,
+ .right_class_cnt = 35,
};
/*--------------------
@@ -2240,12 +2089,12 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
-
- .kern_scale = 16,
- .kern_dsc = &kern_pairs,
- .kern_classes = 0
+ .kern_classes = 1,
+ .bitmap_format = 0
};
@@ -2255,11 +2104,13 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
/*Initialize a public general font descriptor*/
lv_font_t lv_font_roboto_16 = {
- .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .line_height = 18, /*The maximum line height required by the font*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
+ .line_height = 19, /*The maximum line height required by the font*/
.base_line = 4, /*Baseline measured from the bottom of the line*/
+ .subpx = LV_FONT_SUBPX_NONE,
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if LV_FONT_ROBOTO_16*/
+
diff --git a/src/lv_font/lv_font_roboto_22.c b/src/lv_font/lv_font_roboto_22.c
index 5b5f2f866..f7bdac057 100644
--- a/src/lv_font/lv_font_roboto_22.c
+++ b/src/lv_font/lv_font_roboto_22.c
@@ -3,7 +3,7 @@
/*******************************************************************************
* Size: 22 px
* Bpp: 4
- * Opts:
+ * Opts: --no-compress --no-prefilter --bpp 4 --size 22 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_22.c --force-fast-kern-format
******************************************************************************/
#ifndef LV_FONT_ROBOTO_22
@@ -21,2379 +21,2736 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+20 " " */
/* U+21 "!" */
- 0x3b, 0xb4, 0xff, 0x4f, 0xf4, 0xff, 0x4f, 0xf4,
- 0xff, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff, 0x3c,
- 0xc0, 0x0, 0x0, 0x1, 0x33, 0x4f, 0xf4, 0xff,
+ 0x3f, 0xd0, 0x2f, 0xd0, 0x2f, 0xd0, 0x2f, 0xd0,
+ 0x2f, 0xd0, 0x2f, 0xc0, 0x2f, 0xc0, 0x1f, 0xc0,
+ 0x1f, 0xc0, 0x1f, 0xc0, 0x1f, 0xb0, 0x6, 0x40,
+ 0x0, 0x0, 0x3, 0x20, 0x2f, 0xf0, 0x1e, 0xc0,
/* U+22 "\"" */
- 0x9b, 0x63, 0xb9, 0xcf, 0x84, 0xfc, 0xcf, 0x84,
- 0xfc, 0xcf, 0x64, 0xfb, 0xcf, 0x14, 0xf5, 0xc9,
- 0x4, 0xe0,
+ 0x8f, 0xa, 0xe8, 0xf0, 0xad, 0x8e, 0xa, 0xc8,
+ 0xc0, 0xab, 0x8b, 0xa, 0x93, 0x40, 0x33,
/* U+23 "#" */
- 0x0, 0x0, 0x6, 0xb0, 0x3, 0xb6, 0x0, 0x0,
- 0x0, 0xce, 0x0, 0x6f, 0x40, 0x0, 0x0, 0xf,
- 0xb0, 0x9, 0xf1, 0x0, 0x0, 0x2, 0xf8, 0x0,
- 0xce, 0x0, 0x2, 0x33, 0x6f, 0x63, 0x3f, 0xc3,
- 0x30, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x2,
- 0x44, 0xdf, 0x44, 0x8f, 0x74, 0x30, 0x0, 0xf,
- 0xc0, 0x8, 0xf1, 0x0, 0x0, 0x1, 0xf8, 0x0,
- 0xce, 0x0, 0x0, 0x0, 0x4f, 0x50, 0xf, 0xb0,
- 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2,
- 0x88, 0xef, 0x88, 0xbf, 0xa8, 0x80, 0x0, 0xe,
- 0xc0, 0x8, 0xf2, 0x0, 0x0, 0x1, 0xf8, 0x0,
- 0xcf, 0x0, 0x0, 0x0, 0x4f, 0x50, 0xf, 0xc0,
- 0x0, 0x0, 0x8, 0xf2, 0x2, 0xf8, 0x0, 0x0,
+ 0x0, 0x0, 0x9, 0xe0, 0x3, 0xf5, 0x0, 0x0,
+ 0x0, 0xdb, 0x0, 0x7f, 0x10, 0x0, 0x0, 0xf,
+ 0x80, 0xa, 0xe0, 0x0, 0x0, 0x4, 0xf4, 0x0,
+ 0xea, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xb0, 0x38, 0x8d, 0xe8, 0x8a, 0xf9, 0x85, 0x0,
+ 0x0, 0xdb, 0x0, 0x7f, 0x10, 0x0, 0x0, 0xf,
+ 0x80, 0xa, 0xe0, 0x0, 0x0, 0x2, 0xf5, 0x0,
+ 0xcb, 0x0, 0x0, 0x22, 0x6f, 0x52, 0x2f, 0xa2,
+ 0x20, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1,
+ 0x55, 0xdd, 0x55, 0x9f, 0x75, 0x40, 0x0, 0xe,
+ 0xa0, 0x8, 0xf0, 0x0, 0x0, 0x1, 0xf7, 0x0,
+ 0xbd, 0x0, 0x0, 0x0, 0x4f, 0x40, 0xe, 0xa0,
+ 0x0, 0x0, 0x7, 0xf1, 0x1, 0xf7, 0x0, 0x0,
/* U+24 "$" */
- 0x0, 0x0, 0x13, 0x20, 0x0, 0x0, 0x0, 0x4,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x80, 0x0,
- 0x0, 0x1, 0x6c, 0xfd, 0x61, 0x0, 0x1, 0xcf,
- 0xff, 0xff, 0xd3, 0x0, 0xaf, 0xd2, 0x1, 0xdf,
- 0xb0, 0xe, 0xf4, 0x0, 0x2, 0xff, 0x0, 0xff,
- 0x10, 0x0, 0xf, 0xf4, 0xe, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xe6, 0x0, 0x0, 0x0, 0x0,
- 0xbf, 0xfe, 0x82, 0x0, 0x0, 0x0, 0x5c, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x2, 0xaf, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x5f, 0xf3, 0x47, 0x40, 0x0,
- 0x0, 0xcf, 0x58, 0xfa, 0x0, 0x0, 0xd, 0xf4,
- 0x3f, 0xf3, 0x0, 0x5, 0xff, 0x20, 0xbf, 0xfa,
- 0x7b, 0xff, 0x80, 0x0, 0x8e, 0xff, 0xfe, 0x70,
- 0x0, 0x0, 0x9, 0xf5, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0x40, 0x0, 0x0, 0x0, 0x2, 0x41, 0x0,
- 0x0,
+ 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x6,
+ 0xf3, 0x0, 0x0, 0x0, 0x4, 0xbf, 0xa3, 0x0,
+ 0x0, 0x1b, 0xff, 0xff, 0xf9, 0x0, 0x9, 0xfc,
+ 0x42, 0x6f, 0xf5, 0x1, 0xff, 0x10, 0x0, 0x6f,
+ 0xc0, 0x3f, 0xc0, 0x0, 0x1, 0xff, 0x2, 0xfe,
+ 0x0, 0x0, 0x8, 0x80, 0xe, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x4f, 0xfd, 0x60, 0x0, 0x0, 0x0,
+ 0x4e, 0xff, 0xf8, 0x10, 0x0, 0x0, 0x5, 0xbf,
+ 0xfd, 0x10, 0x0, 0x0, 0x0, 0x3d, 0xfb, 0x0,
+ 0x0, 0x0, 0x0, 0x2f, 0xf1, 0xcf, 0x30, 0x0,
+ 0x0, 0xdf, 0x2a, 0xf7, 0x0, 0x0, 0xf, 0xf1,
+ 0x4f, 0xf4, 0x0, 0x1a, 0xfc, 0x0, 0x9f, 0xfe,
+ 0xdf, 0xfe, 0x20, 0x0, 0x5b, 0xff, 0xc8, 0x10,
+ 0x0, 0x0, 0x8, 0xf0, 0x0, 0x0, 0x0, 0x0,
+ 0x8f, 0x0, 0x0, 0x0,
/* U+25 "%" */
- 0x4, 0xbb, 0xa2, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xfb, 0x8e, 0xe1, 0x0, 0x0, 0x0, 0x0, 0xce,
- 0x0, 0x2f, 0x70, 0x1, 0xd5, 0x0, 0xc, 0xc0,
- 0x0, 0xf8, 0x0, 0xaf, 0x10, 0x0, 0xcc, 0x0,
- 0xf, 0x80, 0x4f, 0x60, 0x0, 0xa, 0xf3, 0x7,
- 0xf4, 0xe, 0xc0, 0x0, 0x0, 0x1d, 0xff, 0xf9,
- 0x8, 0xf2, 0x0, 0x0, 0x0, 0x4, 0x53, 0x2,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x42,
- 0xbf, 0xf9, 0x10, 0x0, 0x0, 0x1e, 0xa0, 0xdf,
- 0x56, 0xfa, 0x0, 0x0, 0xa, 0xf1, 0x4f, 0x60,
- 0x9, 0xf0, 0x0, 0x4, 0xf6, 0x4, 0xf4, 0x0,
- 0x8f, 0x40, 0x0, 0xec, 0x0, 0x4f, 0x50, 0x8,
- 0xf1, 0x0, 0x19, 0x20, 0x0, 0xec, 0x34, 0xdc,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xfd, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0,
+ 0x6, 0xef, 0xc3, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xf9, 0x5c, 0xe1, 0x0, 0x0, 0x0, 0x0, 0xcc,
+ 0x0, 0x1f, 0x60, 0x2, 0xf3, 0x0, 0xd, 0x90,
+ 0x0, 0xf8, 0x0, 0xcc, 0x0, 0x0, 0xcb, 0x0,
+ 0xf, 0x70, 0x6f, 0x20, 0x0, 0x8, 0xf5, 0x19,
+ 0xf2, 0x1f, 0x80, 0x0, 0x0, 0xa, 0xff, 0xf6,
+ 0xa, 0xd0, 0x0, 0x0, 0x0, 0x1, 0x30, 0x4,
+ 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x11,
+ 0xbf, 0xfa, 0x10, 0x0, 0x0, 0x3f, 0x60, 0xce,
+ 0x56, 0xeb, 0x0, 0x0, 0xc, 0xc0, 0x2f, 0x50,
+ 0x7, 0xf0, 0x0, 0x7, 0xf2, 0x3, 0xf3, 0x0,
+ 0x5f, 0x20, 0x1, 0xf8, 0x0, 0x2f, 0x50, 0x7,
+ 0xf0, 0x0, 0x6, 0x0, 0x0, 0xce, 0x67, 0xfa,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xae, 0xe9, 0x0,
/* U+26 "&" */
- 0x0, 0x2, 0x9b, 0xb9, 0x10, 0x0, 0x0, 0x0,
- 0x3f, 0xfe, 0xef, 0xe1, 0x0, 0x0, 0x0, 0xbf,
- 0xb0, 0x9, 0xfa, 0x0, 0x0, 0x0, 0xef, 0x40,
- 0x4, 0xfc, 0x0, 0x0, 0x0, 0xef, 0x50, 0x6,
- 0xfa, 0x0, 0x0, 0x0, 0xaf, 0xa0, 0x6e, 0xf2,
- 0x0, 0x0, 0x0, 0x1f, 0xfb, 0xfd, 0x30, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0xb1, 0x0, 0x0, 0x0,
- 0x0, 0x9f, 0xff, 0xe2, 0x0, 0x4, 0x30, 0x8,
- 0xff, 0x3a, 0xfc, 0x10, 0xf, 0xc0, 0x2f, 0xf3,
- 0x0, 0xdf, 0xa0, 0x4f, 0xb0, 0x4f, 0xd0, 0x0,
- 0x1f, 0xf9, 0xaf, 0x60, 0x3f, 0xe0, 0x0, 0x3,
- 0xff, 0xff, 0x10, 0xf, 0xf7, 0x0, 0x0, 0xaf,
- 0xf6, 0x0, 0x5, 0xff, 0x97, 0x7c, 0xff, 0xfe,
- 0x20, 0x0, 0x4d, 0xff, 0xff, 0xa2, 0xaf, 0xc1,
- 0x0, 0x0, 0x3, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x19, 0xef, 0xc4, 0x0, 0x0, 0x0, 0xd,
+ 0xfd, 0xbf, 0xf5, 0x0, 0x0, 0x7, 0xfb, 0x0,
+ 0x2f, 0xd0, 0x0, 0x0, 0x9f, 0x60, 0x0, 0xef,
+ 0x0, 0x0, 0x8, 0xf7, 0x0, 0x3f, 0xb0, 0x0,
+ 0x0, 0x3f, 0xe1, 0x4e, 0xf3, 0x0, 0x0, 0x0,
+ 0x9f, 0xdf, 0xe3, 0x0, 0x0, 0x0, 0x3, 0xff,
+ 0xe1, 0x0, 0x0, 0x0, 0x4, 0xff, 0xef, 0x60,
+ 0x0, 0x53, 0x3, 0xff, 0x53, 0xff, 0x40, 0x3f,
+ 0xa0, 0xbf, 0x70, 0x5, 0xfe, 0x25, 0xf8, 0xe,
+ 0xf1, 0x0, 0x8, 0xfd, 0xbf, 0x40, 0xdf, 0x30,
+ 0x0, 0xa, 0xff, 0xd0, 0x8, 0xfa, 0x0, 0x0,
+ 0x5f, 0xf9, 0x0, 0xc, 0xfd, 0x87, 0xbf, 0xff,
+ 0xf5, 0x0, 0x6, 0xcf, 0xfd, 0x92, 0x3f, 0xf3,
/* U+27 "'" */
- 0x9b, 0x6c, 0xf8, 0xcf, 0x8c, 0xf3, 0xce, 0x9,
- 0x70,
+ 0xeb, 0xeb, 0xea, 0xe9, 0xe8, 0x31,
/* U+28 "(" */
- 0x0, 0x0, 0x4, 0x0, 0x0, 0xa, 0xf1, 0x0,
- 0x8, 0xf6, 0x0, 0x4, 0xfa, 0x0, 0x0, 0xef,
- 0x20, 0x0, 0x5f, 0x90, 0x0, 0xb, 0xf5, 0x0,
- 0x1, 0xff, 0x0, 0x0, 0x4f, 0xc0, 0x0, 0x5,
- 0xfc, 0x0, 0x0, 0x8f, 0xa0, 0x0, 0x8, 0xf8,
- 0x0, 0x0, 0x8f, 0x80, 0x0, 0x7, 0xfc, 0x0,
- 0x0, 0x4f, 0xc0, 0x0, 0x3, 0xfd, 0x0, 0x0,
- 0xe, 0xf3, 0x0, 0x0, 0x7f, 0x70, 0x0, 0x1,
- 0xfd, 0x0, 0x0, 0x8, 0xf6, 0x0, 0x0, 0xd,
- 0xe2, 0x0, 0x0, 0x2f, 0xc1, 0x0, 0x0, 0x1c,
- 0x0,
+ 0x0, 0x0, 0x18, 0x0, 0x0, 0x1d, 0xe0, 0x0,
+ 0xc, 0xe2, 0x0, 0x7, 0xf5, 0x0, 0x0, 0xfd,
+ 0x0, 0x0, 0x6f, 0x60, 0x0, 0xc, 0xf1, 0x0,
+ 0x0, 0xfd, 0x0, 0x0, 0x4f, 0xa0, 0x0, 0x6,
+ 0xf8, 0x0, 0x0, 0x7f, 0x70, 0x0, 0x8, 0xf6,
+ 0x0, 0x0, 0x8f, 0x70, 0x0, 0x6, 0xf8, 0x0,
+ 0x0, 0x5f, 0x90, 0x0, 0x1, 0xfc, 0x0, 0x0,
+ 0xd, 0xf0, 0x0, 0x0, 0x8f, 0x50, 0x0, 0x1,
+ 0xfb, 0x0, 0x0, 0x9, 0xf3, 0x0, 0x0, 0x1e,
+ 0xd0, 0x0, 0x0, 0x3f, 0xa0, 0x0, 0x0, 0x3c,
+ 0x0, 0x0, 0x0, 0x0,
/* U+29 ")" */
- 0x40, 0x0, 0x0, 0xdc, 0x10, 0x0, 0x3f, 0xb0,
- 0x0, 0x6, 0xf8, 0x0, 0x0, 0xef, 0x20, 0x0,
- 0x6f, 0x90, 0x0, 0x1f, 0xd0, 0x0, 0xd, 0xf5,
- 0x0, 0x8, 0xf8, 0x0, 0x8, 0xf9, 0x0, 0x6,
- 0xfc, 0x0, 0x4, 0xfc, 0x0, 0x4, 0xfc, 0x0,
- 0x8, 0xfa, 0x0, 0x8, 0xf8, 0x0, 0xa, 0xf7,
- 0x0, 0xf, 0xf1, 0x0, 0x3f, 0xb0, 0x0, 0xaf,
- 0x50, 0x2, 0xfc, 0x0, 0xb, 0xf2, 0x0, 0xaf,
- 0x50, 0x0, 0xa3, 0x0, 0x0,
+ 0x45, 0x0, 0x0, 0x5, 0xf7, 0x0, 0x0, 0x8,
+ 0xf4, 0x0, 0x0, 0xd, 0xe0, 0x0, 0x0, 0x5f,
+ 0x70, 0x0, 0x0, 0xee, 0x0, 0x0, 0x9, 0xf4,
+ 0x0, 0x0, 0x5f, 0x80, 0x0, 0x2, 0xfc, 0x0,
+ 0x0, 0xf, 0xe0, 0x0, 0x0, 0xff, 0x0, 0x0,
+ 0xe, 0xf1, 0x0, 0x0, 0xff, 0x0, 0x0, 0xf,
+ 0xf0, 0x0, 0x1, 0xfd, 0x0, 0x0, 0x4f, 0x90,
+ 0x0, 0x8, 0xf5, 0x0, 0x0, 0xcf, 0x10, 0x0,
+ 0x2f, 0x90, 0x0, 0xa, 0xf2, 0x0, 0x4, 0xf7,
+ 0x0, 0x3, 0xfa, 0x0, 0x0, 0x69, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+2A "*" */
- 0x0, 0x8, 0x40, 0x0, 0x0, 0xf, 0x80, 0x0,
- 0x86, 0x1f, 0x83, 0x82, 0xef, 0xff, 0xef, 0xf7,
- 0x4, 0xdf, 0xf8, 0x30, 0x4, 0xfd, 0xf9, 0x0,
- 0x1f, 0xf1, 0xbf, 0x50, 0x4, 0x50, 0x19, 0x0,
+ 0x0, 0x0, 0xf9, 0x0, 0x0, 0x0, 0x0, 0xf8,
+ 0x0, 0x0, 0x23, 0x0, 0xf8, 0x0, 0x30, 0x8f,
+ 0xd7, 0xfa, 0x9e, 0xe0, 0x38, 0xdf, 0xff, 0xfc,
+ 0x70, 0x0, 0xb, 0xff, 0x20, 0x0, 0x0, 0x6f,
+ 0x8f, 0xc0, 0x0, 0x2, 0xfc, 0x7, 0xf7, 0x0,
+ 0x3, 0xd2, 0x0, 0xc8, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
/* U+2B "+" */
- 0x0, 0x0, 0xc, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xf4, 0x0, 0x0,
- 0x27, 0x77, 0x7d, 0xf9, 0x77, 0x74, 0x4f, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x28, 0x88, 0x8e, 0xfa,
- 0x88, 0x84, 0x0, 0x0, 0xc, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0x82, 0x0, 0x0,
+ 0x0, 0x0, 0x6, 0x81, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf3,
+ 0x0, 0x0, 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0, 0x2e, 0xee,
+ 0xef, 0xfe, 0xee, 0xe8, 0x2f, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf3,
+ 0x0, 0x0, 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0,
/* U+2C "," */
- 0x33, 0x2c, 0xf8, 0xcf, 0x8c, 0xf3, 0xcd, 0x9,
- 0x50,
+ 0xa, 0xf5, 0xa, 0xf4, 0xb, 0xf3, 0x1f, 0xd0,
+ 0x7f, 0x50, 0x5, 0x0,
/* U+2D "-" */
- 0x16, 0x66, 0x66, 0x60, 0x3f, 0xff, 0xff, 0xf1,
- 0x3, 0x33, 0x33, 0x30,
+ 0x6a, 0xaa, 0xa6, 0x9f, 0xff, 0xfa,
/* U+2E "." */
- 0x2, 0x24, 0xfd, 0x4f, 0xd0,
+ 0x5, 0x20, 0x5f, 0xe0, 0x3e, 0xb0,
/* U+2F "/" */
- 0x0, 0x0, 0x0, 0x5b, 0x50, 0x0, 0x0, 0xc,
- 0xf1, 0x0, 0x0, 0x2, 0xfb, 0x0, 0x0, 0x0,
- 0x8f, 0x50, 0x0, 0x0, 0xe, 0xe0, 0x0, 0x0,
- 0x5, 0xf9, 0x0, 0x0, 0x0, 0xaf, 0x20, 0x0,
- 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x7, 0xf6, 0x0,
- 0x0, 0x0, 0xdf, 0x10, 0x0, 0x0, 0x3f, 0xa0,
- 0x0, 0x0, 0xa, 0xf3, 0x0, 0x0, 0x0, 0xfe,
- 0x0, 0x0, 0x0, 0x6f, 0x70, 0x0, 0x0, 0xc,
- 0xf1, 0x0, 0x0, 0x2, 0xfb, 0x0, 0x0, 0x0,
- 0x8f, 0x50, 0x0, 0x0, 0x3, 0x40, 0x0, 0x0,
- 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0x30, 0x0, 0x0, 0xd,
+ 0xd0, 0x0, 0x0, 0x3, 0xf7, 0x0, 0x0, 0x0,
+ 0xaf, 0x10, 0x0, 0x0, 0xf, 0xb0, 0x0, 0x0,
+ 0x6, 0xf5, 0x0, 0x0, 0x0, 0xce, 0x0, 0x0,
+ 0x0, 0x2f, 0x80, 0x0, 0x0, 0x8, 0xf2, 0x0,
+ 0x0, 0x0, 0xec, 0x0, 0x0, 0x0, 0x5f, 0x60,
+ 0x0, 0x0, 0xb, 0xf0, 0x0, 0x0, 0x1, 0xfa,
+ 0x0, 0x0, 0x0, 0x7f, 0x30, 0x0, 0x0, 0xd,
+ 0xd0, 0x0, 0x0, 0x3, 0xf7, 0x0, 0x0, 0x0,
+ 0x9f, 0x10, 0x0, 0x0, 0x0,
/* U+30 "0" */
- 0x0, 0x17, 0xbb, 0x94, 0x0, 0x0, 0x3e, 0xff,
- 0xef, 0xf8, 0x0, 0xe, 0xf6, 0x0, 0x3f, 0xf4,
- 0x6, 0xfc, 0x0, 0x0, 0x6f, 0xb0, 0x9f, 0x80,
- 0x0, 0x0, 0xff, 0xc, 0xf4, 0x0, 0x0, 0xf,
- 0xf2, 0xcf, 0x40, 0x0, 0x0, 0xff, 0x4c, 0xf4,
- 0x0, 0x0, 0xf, 0xf4, 0xcf, 0x40, 0x0, 0x0,
- 0xff, 0x4c, 0xf4, 0x0, 0x0, 0xf, 0xf4, 0xcf,
- 0x40, 0x0, 0x0, 0xff, 0x3a, 0xf7, 0x0, 0x0,
- 0xf, 0xf0, 0x8f, 0x90, 0x0, 0x2, 0xfe, 0x2,
- 0xfe, 0x30, 0x0, 0xbf, 0x80, 0x8, 0xfe, 0x87,
- 0xbf, 0xd0, 0x0, 0x5, 0xef, 0xff, 0x91, 0x0,
- 0x0, 0x0, 0x13, 0x0, 0x0, 0x0,
+ 0x0, 0x4c, 0xff, 0xd7, 0x0, 0x0, 0x6f, 0xfc,
+ 0xbe, 0xfb, 0x0, 0x1f, 0xf3, 0x0, 0xc, 0xf5,
+ 0x6, 0xfa, 0x0, 0x0, 0x4f, 0xb0, 0x9f, 0x50,
+ 0x0, 0x0, 0xfe, 0xb, 0xf4, 0x0, 0x0, 0xe,
+ 0xf0, 0xcf, 0x30, 0x0, 0x0, 0xef, 0x1c, 0xf3,
+ 0x0, 0x0, 0xe, 0xf1, 0xcf, 0x30, 0x0, 0x0,
+ 0xef, 0x1b, 0xf3, 0x0, 0x0, 0xe, 0xf1, 0xbf,
+ 0x40, 0x0, 0x0, 0xef, 0x9, 0xf6, 0x0, 0x0,
+ 0xf, 0xe0, 0x5f, 0xa0, 0x0, 0x4, 0xfb, 0x0,
+ 0xff, 0x40, 0x0, 0xdf, 0x50, 0x5, 0xff, 0xba,
+ 0xef, 0xb0, 0x0, 0x4, 0xbf, 0xfd, 0x80, 0x0,
/* U+31 "1" */
- 0x47, 0x79, 0xb9, 0xff, 0xff, 0xfc, 0x44, 0x4a,
- 0xfc, 0x0, 0x8, 0xfc, 0x0, 0x8, 0xfc, 0x0,
- 0x8, 0xfc, 0x0, 0x8, 0xfc, 0x0, 0x8, 0xfc,
- 0x0, 0x8, 0xfc, 0x0, 0x8, 0xfc, 0x0, 0x8,
- 0xfc, 0x0, 0x8, 0xfc, 0x0, 0x8, 0xfc, 0x0,
- 0x8, 0xfc, 0x0, 0x8, 0xfc, 0x0, 0x8, 0xfc,
+ 0x0, 0x0, 0x39, 0xc0, 0x17, 0xdf, 0xfd, 0x2f,
+ 0xff, 0xbf, 0xd2, 0xc6, 0x2, 0xfd, 0x0, 0x0,
+ 0x2f, 0xd0, 0x0, 0x2, 0xfd, 0x0, 0x0, 0x2f,
+ 0xd0, 0x0, 0x2, 0xfd, 0x0, 0x0, 0x2f, 0xd0,
+ 0x0, 0x2, 0xfd, 0x0, 0x0, 0x2f, 0xd0, 0x0,
+ 0x2, 0xfd, 0x0, 0x0, 0x2f, 0xd0, 0x0, 0x2,
+ 0xfd, 0x0, 0x0, 0x2f, 0xd0, 0x0, 0x2, 0xfd,
/* U+32 "2" */
- 0x0, 0x17, 0xbb, 0xb5, 0x0, 0x0, 0x3e, 0xff,
- 0xdf, 0xfc, 0x0, 0x1d, 0xf9, 0x0, 0x2e, 0xf7,
- 0x5, 0xfd, 0x0, 0x0, 0x6f, 0xc0, 0x6c, 0x70,
- 0x0, 0x4, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f,
- 0xb0, 0x0, 0x0, 0x0, 0x1d, 0xf4, 0x0, 0x0,
- 0x0, 0x9, 0xfb, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0x10, 0x0, 0x0, 0x3, 0xef, 0x40, 0x0, 0x0,
- 0x1, 0xef, 0x60, 0x0, 0x0, 0x1, 0xcf, 0xa0,
- 0x0, 0x0, 0x0, 0xaf, 0xb0, 0x0, 0x0, 0x0,
- 0x8f, 0xd1, 0x0, 0x0, 0x0, 0x5f, 0xfc, 0xbb,
- 0xbb, 0xbb, 0x38, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0x0, 0x6c, 0xff, 0xd8, 0x0, 0x0, 0xbf, 0xfc,
+ 0xbf, 0xfc, 0x0, 0x6f, 0xd1, 0x0, 0x1d, 0xf7,
+ 0xc, 0xf4, 0x0, 0x0, 0x5f, 0xb0, 0xdd, 0x0,
+ 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x5f,
+ 0x90, 0x0, 0x0, 0x0, 0xc, 0xf3, 0x0, 0x0,
+ 0x0, 0x7, 0xfa, 0x0, 0x0, 0x0, 0x5, 0xfd,
+ 0x10, 0x0, 0x0, 0x3, 0xfe, 0x20, 0x0, 0x0,
+ 0x2, 0xef, 0x30, 0x0, 0x0, 0x1, 0xef, 0x50,
+ 0x0, 0x0, 0x0, 0xcf, 0x60, 0x0, 0x0, 0x0,
+ 0xbf, 0x70, 0x0, 0x0, 0x0, 0x9f, 0xfa, 0xaa,
+ 0xaa, 0xaa, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xf8,
/* U+33 "3" */
- 0x0, 0x28, 0xbb, 0xb5, 0x0, 0x0, 0x6e, 0xff,
- 0xdf, 0xfc, 0x0, 0x2e, 0xf7, 0x0, 0x2e, 0xf8,
- 0x7, 0xfa, 0x0, 0x0, 0x5f, 0xc0, 0x48, 0x40,
- 0x0, 0x4, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x5f,
- 0xb0, 0x0, 0x0, 0x0, 0x2d, 0xf5, 0x0, 0x0,
- 0x8f, 0xff, 0xf6, 0x0, 0x0, 0x6, 0xcc, 0xff,
- 0xa1, 0x0, 0x0, 0x0, 0x1, 0xbf, 0x90, 0x0,
- 0x0, 0x0, 0x2, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xf1, 0x9f, 0x80, 0x0, 0x1, 0xff, 0x7,
- 0xfd, 0x10, 0x0, 0x8f, 0xc0, 0xb, 0xfe, 0x77,
- 0xaf, 0xf3, 0x0, 0x8, 0xff, 0xff, 0xc3, 0x0,
- 0x0, 0x0, 0x14, 0x0, 0x0, 0x0,
+ 0x0, 0x6c, 0xff, 0xc7, 0x0, 0xb, 0xff, 0xbb,
+ 0xff, 0xb0, 0x6f, 0xc1, 0x0, 0x1d, 0xf5, 0xbf,
+ 0x40, 0x0, 0x6, 0xf9, 0x34, 0x0, 0x0, 0x5,
+ 0xfa, 0x0, 0x0, 0x0, 0x9, 0xf7, 0x0, 0x0,
+ 0x1, 0x8f, 0xd0, 0x0, 0xd, 0xff, 0xfb, 0x10,
+ 0x0, 0x8, 0xac, 0xff, 0x80, 0x0, 0x0, 0x0,
+ 0x1d, 0xf6, 0x0, 0x0, 0x0, 0x4, 0xfc, 0x55,
+ 0x0, 0x0, 0x1, 0xfe, 0xef, 0x20, 0x0, 0x3,
+ 0xfc, 0x9f, 0xb0, 0x0, 0x1c, 0xf7, 0x1d, 0xfe,
+ 0xbb, 0xef, 0xb0, 0x0, 0x7d, 0xff, 0xc7, 0x0,
/* U+34 "4" */
- 0x0, 0x0, 0x0, 0xa, 0xb6, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xf8, 0x0, 0x0, 0x0, 0x1, 0xdf,
- 0xf8, 0x0, 0x0, 0x0, 0x8, 0xfe, 0xf8, 0x0,
- 0x0, 0x0, 0x3f, 0xe8, 0xf8, 0x0, 0x0, 0x0,
- 0xcf, 0x48, 0xf8, 0x0, 0x0, 0x6, 0xfa, 0x8,
- 0xf8, 0x0, 0x0, 0x1e, 0xf1, 0x8, 0xf8, 0x0,
- 0x0, 0x9f, 0x70, 0x8, 0xf8, 0x0, 0x3, 0xfd,
- 0x0, 0x8, 0xf8, 0x0, 0xc, 0xf6, 0x33, 0x39,
- 0xf9, 0x33, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x28, 0x88, 0x88, 0x8c, 0xfc, 0x86, 0x0, 0x0,
- 0x0, 0x8, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x8,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x8, 0xf8, 0x0,
+ 0x0, 0x0, 0x0, 0xb, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xfb, 0x0, 0x0, 0x0, 0x0, 0xef,
+ 0xfb, 0x0, 0x0, 0x0, 0x9, 0xfa, 0xfb, 0x0,
+ 0x0, 0x0, 0x3f, 0xb5, 0xfb, 0x0, 0x0, 0x0,
+ 0xcf, 0x25, 0xfb, 0x0, 0x0, 0x6, 0xf8, 0x5,
+ 0xfb, 0x0, 0x0, 0x1e, 0xe0, 0x5, 0xfb, 0x0,
+ 0x0, 0xaf, 0x50, 0x5, 0xfb, 0x0, 0x3, 0xfb,
+ 0x0, 0x5, 0xfb, 0x0, 0xd, 0xf2, 0x0, 0x5,
+ 0xfb, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x4a, 0xaa, 0xaa, 0xac, 0xfe, 0xa9, 0x0, 0x0,
+ 0x0, 0x5, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0x5, 0xfb, 0x0,
/* U+35 "5" */
- 0x3, 0xbb, 0xbb, 0xbb, 0xb6, 0x0, 0x5f, 0xff,
- 0xff, 0xff, 0x80, 0x8, 0xfa, 0x44, 0x44, 0x42,
- 0x0, 0x8f, 0x80, 0x0, 0x0, 0x0, 0xb, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0x40, 0x10, 0x0,
- 0x0, 0xd, 0xf9, 0xef, 0xfa, 0x30, 0x0, 0xff,
- 0xfc, 0xcf, 0xfe, 0x20, 0xf, 0xf3, 0x0, 0x1d,
- 0xfa, 0x0, 0x23, 0x0, 0x0, 0x4f, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x20, 0x0, 0x0, 0x0,
- 0xf, 0xf2, 0x4f, 0xc0, 0x0, 0x2, 0xff, 0x1,
- 0xff, 0x20, 0x0, 0xbf, 0xb0, 0x8, 0xfe, 0x87,
- 0xbf, 0xf2, 0x0, 0x7, 0xff, 0xff, 0xc2, 0x0,
- 0x0, 0x0, 0x13, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, 0x2f, 0xfd,
+ 0xdd, 0xdd, 0xd0, 0x3, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0x70, 0x0, 0x0, 0x0, 0x7, 0xf6,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0x79, 0xbb, 0x71,
+ 0x0, 0xa, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x9f,
+ 0x81, 0x3, 0xdf, 0xc0, 0x0, 0x0, 0x0, 0x1,
+ 0xff, 0x20, 0x0, 0x0, 0x0, 0xa, 0xf6, 0x0,
+ 0x0, 0x0, 0x0, 0x8f, 0x72, 0x74, 0x0, 0x0,
+ 0x9, 0xf6, 0x2f, 0xc0, 0x0, 0x0, 0xdf, 0x30,
+ 0xcf, 0x70, 0x0, 0x8f, 0xd0, 0x2, 0xef, 0xda,
+ 0xdf, 0xf3, 0x0, 0x2, 0x9e, 0xfe, 0xa2, 0x0,
/* U+36 "6" */
- 0x0, 0x3, 0x8b, 0xbb, 0x61, 0x0, 0x7, 0xff,
- 0xec, 0xff, 0x0, 0x4, 0xff, 0x30, 0x0, 0x30,
- 0x0, 0xef, 0x40, 0x0, 0x0, 0x0, 0x4f, 0xd0,
- 0x0, 0x0, 0x0, 0x6, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0x84, 0xae, 0xda, 0x30, 0x8, 0xfc,
- 0xfc, 0xcd, 0xff, 0x50, 0x8f, 0xf3, 0x0, 0xa,
- 0xfd, 0x8, 0xf8, 0x0, 0x0, 0x1e, 0xf4, 0x8f,
- 0x90, 0x0, 0x0, 0xcf, 0x65, 0xfc, 0x0, 0x0,
- 0xc, 0xf5, 0x3f, 0xe1, 0x0, 0x0, 0xef, 0x40,
- 0xbf, 0x90, 0x0, 0x7f, 0xe0, 0x2, 0xff, 0xb7,
- 0x9f, 0xf4, 0x0, 0x1, 0xbf, 0xff, 0xe4, 0x0,
- 0x0, 0x0, 0x4, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5b, 0xef, 0x10, 0x0, 0x1, 0xcf,
+ 0xfd, 0xb1, 0x0, 0x0, 0xcf, 0xb2, 0x0, 0x0,
+ 0x0, 0x6f, 0xa0, 0x0, 0x0, 0x0, 0xe, 0xf1,
+ 0x0, 0x0, 0x0, 0x2, 0xfb, 0x17, 0xa9, 0x50,
+ 0x0, 0x6f, 0xcf, 0xff, 0xff, 0xb0, 0x8, 0xff,
+ 0xb3, 0x3, 0xef, 0x80, 0x9f, 0xc0, 0x0, 0x3,
+ 0xfe, 0x9, 0xf6, 0x0, 0x0, 0xd, 0xf3, 0x8f,
+ 0x70, 0x0, 0x0, 0xbf, 0x46, 0xf9, 0x0, 0x0,
+ 0xc, 0xf3, 0x2f, 0xe0, 0x0, 0x1, 0xff, 0x0,
+ 0xaf, 0x90, 0x0, 0xaf, 0xa0, 0x1, 0xdf, 0xeb,
+ 0xef, 0xd1, 0x0, 0x1, 0x9e, 0xfe, 0x81, 0x0,
/* U+37 "7" */
- 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0x6f, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x1, 0xef,
- 0x20, 0x0, 0x0, 0x0, 0xcf, 0x50, 0x0, 0x0,
- 0x0, 0x8f, 0x90, 0x0, 0x0, 0x0, 0x2f, 0xe0,
- 0x0, 0x0, 0x0, 0xb, 0xf6, 0x0, 0x0, 0x0,
- 0x4, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xaf, 0x60,
- 0x0, 0x0, 0x0, 0xf, 0xf1, 0x0, 0x0, 0x0,
- 0x5, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x90,
- 0x0, 0x0, 0x0, 0x8, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0x80, 0x0, 0x0, 0x0, 0xc, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0x80, 0x0, 0x0,
+ 0x2f, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x1a, 0xaa,
+ 0xaa, 0xaa, 0xae, 0xf3, 0x0, 0x0, 0x0, 0x0,
+ 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x50,
+ 0x0, 0x0, 0x0, 0x0, 0xee, 0x0, 0x0, 0x0,
+ 0x0, 0x6, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xd,
+ 0xf1, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x90, 0x0,
+ 0x0, 0x0, 0x0, 0xcf, 0x20, 0x0, 0x0, 0x0,
+ 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x2f, 0xd0, 0x0, 0x0,
+ 0x0, 0x0, 0x9f, 0x70, 0x0, 0x0, 0x0, 0x1,
+ 0xff, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0,
+ 0x0, 0x0, 0x0, 0xe, 0xf2, 0x0, 0x0, 0x0,
/* U+38 "8" */
- 0x0, 0x29, 0xbb, 0xa5, 0x0, 0x0, 0x6f, 0xff,
- 0xdf, 0xfb, 0x0, 0x2e, 0xf8, 0x0, 0x3f, 0xf7,
- 0x5, 0xfd, 0x0, 0x0, 0x7f, 0xb0, 0x8f, 0xc0,
- 0x0, 0x4, 0xfc, 0x3, 0xfd, 0x0, 0x0, 0x9f,
- 0xa0, 0xc, 0xf9, 0x10, 0x5e, 0xf2, 0x0, 0x18,
- 0xff, 0xff, 0xd3, 0x0, 0x3, 0xcf, 0xec, 0xfe,
- 0x70, 0x3, 0xef, 0x40, 0x1, 0xcf, 0x80, 0xbf,
- 0x80, 0x0, 0x1, 0xff, 0x1d, 0xf4, 0x0, 0x0,
- 0xe, 0xf4, 0xcf, 0x60, 0x0, 0x0, 0xff, 0x28,
- 0xfc, 0x10, 0x0, 0x8f, 0xf0, 0x1d, 0xfe, 0x77,
- 0xaf, 0xf4, 0x0, 0x18, 0xff, 0xff, 0xc4, 0x0,
- 0x0, 0x0, 0x14, 0x0, 0x0, 0x0,
+ 0x0, 0x4b, 0xff, 0xd7, 0x0, 0x0, 0x7f, 0xfc,
+ 0xbf, 0xfc, 0x0, 0x1f, 0xf4, 0x0, 0x1d, 0xf6,
+ 0x5, 0xfb, 0x0, 0x0, 0x5f, 0xb0, 0x6f, 0x90,
+ 0x0, 0x4, 0xfb, 0x3, 0xfd, 0x0, 0x0, 0x7f,
+ 0x80, 0xb, 0xf9, 0x10, 0x5f, 0xe1, 0x0, 0xa,
+ 0xff, 0xff, 0xd2, 0x0, 0x4, 0xef, 0xcb, 0xef,
+ 0x80, 0x2, 0xfe, 0x20, 0x0, 0xbf, 0x70, 0x9f,
+ 0x60, 0x0, 0x1, 0xff, 0xc, 0xf3, 0x0, 0x0,
+ 0xe, 0xf1, 0xbf, 0x50, 0x0, 0x0, 0xff, 0x6,
+ 0xfd, 0x10, 0x0, 0x9f, 0xb0, 0xb, 0xff, 0xbb,
+ 0xef, 0xe2, 0x0, 0x6, 0xcf, 0xfd, 0x81, 0x0,
/* U+39 "9" */
- 0x0, 0x39, 0xbb, 0x72, 0x0, 0x6, 0xff, 0xef,
- 0xfe, 0x60, 0x3f, 0xf5, 0x0, 0x6f, 0xe1, 0xbf,
- 0x80, 0x0, 0xa, 0xf9, 0xdf, 0x40, 0x0, 0x5,
- 0xfc, 0xff, 0x20, 0x0, 0x4, 0xfd, 0xef, 0x40,
- 0x0, 0x4, 0xff, 0xbf, 0x80, 0x0, 0x6, 0xff,
- 0x4f, 0xe6, 0x0, 0x6e, 0xff, 0x7, 0xff, 0xff,
- 0xfd, 0xff, 0x0, 0x38, 0xcb, 0x54, 0xff, 0x0,
- 0x0, 0x0, 0x5, 0xfc, 0x0, 0x0, 0x0, 0xa,
- 0xf9, 0x0, 0x0, 0x0, 0x4f, 0xf3, 0xb, 0x97,
- 0x79, 0xff, 0x70, 0xa, 0xff, 0xff, 0xe4, 0x0,
- 0x0, 0x3, 0x40, 0x0, 0x0,
+ 0x0, 0x5c, 0xfe, 0xb3, 0x0, 0x9, 0xff, 0xbc,
+ 0xff, 0x50, 0x4f, 0xe2, 0x0, 0x5f, 0xf1, 0xaf,
+ 0x60, 0x0, 0x9, 0xf7, 0xdf, 0x20, 0x0, 0x4,
+ 0xfb, 0xef, 0x10, 0x0, 0x1, 0xfd, 0xcf, 0x30,
+ 0x0, 0x1, 0xfe, 0x9f, 0x80, 0x0, 0x7, 0xfe,
+ 0x2f, 0xf7, 0x1, 0x8f, 0xfd, 0x6, 0xff, 0xff,
+ 0xf9, 0xfb, 0x0, 0x28, 0xa8, 0x24, 0xf8, 0x0,
+ 0x0, 0x0, 0x9, 0xf4, 0x0, 0x0, 0x0, 0x2f,
+ 0xd0, 0x0, 0x0, 0x5, 0xef, 0x50, 0x0, 0x8c,
+ 0xff, 0xf6, 0x0, 0x0, 0xbe, 0xc8, 0x20, 0x0,
/* U+3A ":" */
- 0x13, 0x34, 0xfc, 0x4f, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x33, 0x4f,
- 0xc4, 0xfc,
+ 0x4f, 0x97, 0xfd, 0x5, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52, 0x7f,
+ 0xd4, 0xf9,
/* U+3B ";" */
- 0x13, 0x30, 0x4f, 0xc0, 0x4f, 0xc0, 0x0, 0x0,
+ 0x8, 0xf5, 0xb, 0xf9, 0x1, 0x50, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0x32, 0xc, 0xf8, 0xc, 0xf8,
- 0xc, 0xf3, 0xc, 0xd0, 0x9, 0x50,
+ 0x0, 0x0, 0x4, 0x94, 0x8, 0xf7, 0x8, 0xf6,
+ 0xb, 0xf2, 0x3f, 0xb0, 0x3b, 0x10,
/* U+3C "<" */
- 0x0, 0x0, 0x0, 0x0, 0x66, 0x0, 0x0, 0x1,
- 0x7e, 0xf8, 0x0, 0x2, 0x8e, 0xff, 0xb3, 0x2,
- 0x9f, 0xff, 0x92, 0x0, 0x4f, 0xfc, 0x60, 0x0,
- 0x0, 0x3f, 0xfb, 0x50, 0x0, 0x0, 0x2, 0xaf,
- 0xfe, 0x82, 0x0, 0x0, 0x1, 0x8f, 0xff, 0xb4,
- 0x0, 0x0, 0x1, 0x7e, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x77, 0x0, 0x0, 0x1,
+ 0x8e, 0xf9, 0x0, 0x2, 0x9f, 0xff, 0xa2, 0x2,
+ 0xaf, 0xfd, 0x71, 0x0, 0x3f, 0xfb, 0x40, 0x0,
+ 0x0, 0x2f, 0xfb, 0x50, 0x0, 0x0, 0x1, 0x8f,
+ 0xfe, 0x81, 0x0, 0x0, 0x1, 0x8e, 0xff, 0xa3,
+ 0x0, 0x0, 0x0, 0x7e, 0xf9, 0x0, 0x0, 0x0,
0x0, 0x66,
/* U+3D "=" */
- 0x27, 0x77, 0x77, 0x77, 0x74, 0x4f, 0xff, 0xff,
- 0xff, 0xf8, 0x14, 0x44, 0x44, 0x44, 0x42, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x13, 0x33, 0x33, 0x33,
- 0x32, 0x4f, 0xff, 0xff, 0xff, 0xf8, 0x3c, 0xcc,
- 0xcc, 0xcc, 0xc6,
+ 0x5f, 0xff, 0xff, 0xff, 0xf9, 0x4c, 0xcc, 0xcc,
+ 0xcc, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4b, 0xbb, 0xbb, 0xbb,
+ 0xb6, 0x5f, 0xff, 0xff, 0xff, 0xf9,
/* U+3E ">" */
- 0x44, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xb5, 0x0,
- 0x0, 0x0, 0x4e, 0xff, 0xd6, 0x10, 0x0, 0x0,
- 0x3a, 0xff, 0xe8, 0x20, 0x0, 0x0, 0x16, 0xdf,
- 0xf8, 0x0, 0x0, 0x1, 0x6c, 0xfc, 0x0, 0x4,
- 0x9f, 0xff, 0x81, 0x16, 0xdf, 0xfe, 0x60, 0x0,
- 0x8f, 0xfc, 0x40, 0x0, 0x0, 0x8a, 0x20, 0x0,
+ 0x77, 0x10, 0x0, 0x0, 0x0, 0x9f, 0xf9, 0x20,
+ 0x0, 0x0, 0x18, 0xef, 0xfb, 0x30, 0x0, 0x0,
+ 0x5, 0xbf, 0xfc, 0x50, 0x0, 0x0, 0x1, 0x8e,
+ 0xf9, 0x0, 0x0, 0x4, 0xaf, 0xf8, 0x0, 0x17,
+ 0xdf, 0xfa, 0x30, 0x2a, 0xff, 0xf9, 0x20, 0x0,
+ 0x9f, 0xe7, 0x10, 0x0, 0x0, 0x66, 0x0, 0x0,
0x0, 0x0,
/* U+3F "?" */
- 0x0, 0x29, 0xbb, 0xa4, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0x80, 0x1e, 0xf7, 0x0, 0x6f, 0xf3, 0x4f,
- 0xc0, 0x0, 0xc, 0xf6, 0x0, 0x0, 0x0, 0xa,
- 0xf8, 0x0, 0x0, 0x0, 0xe, 0xf5, 0x0, 0x0,
- 0x0, 0x8f, 0xe0, 0x0, 0x0, 0x5, 0xff, 0x30,
- 0x0, 0x0, 0x3e, 0xf6, 0x0, 0x0, 0x0, 0xff,
- 0x70, 0x0, 0x0, 0x2, 0xff, 0x0, 0x0, 0x0,
- 0x2, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0x33, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0,
+ 0x0, 0x3b, 0xef, 0xd8, 0x0, 0x4, 0xff, 0xed,
+ 0xff, 0xb0, 0xe, 0xf6, 0x0, 0x2e, 0xf3, 0x2e,
+ 0xc0, 0x0, 0x9, 0xf7, 0x0, 0x0, 0x0, 0x8,
+ 0xf7, 0x0, 0x0, 0x0, 0xd, 0xf3, 0x0, 0x0,
+ 0x0, 0x8f, 0xb0, 0x0, 0x0, 0x7, 0xfe, 0x10,
+ 0x0, 0x0, 0x5f, 0xe2, 0x0, 0x0, 0x0, 0xdf,
+ 0x40, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0,
+ 0x1, 0x76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x2,
+ 0xff, 0x0, 0x0, 0x0, 0x1, 0xed, 0x0, 0x0,
/* U+40 "@" */
- 0x0, 0x0, 0x0, 0x0, 0x43, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xcf, 0xff, 0xff, 0xb5,
- 0x0, 0x0, 0x0, 0x1, 0xbf, 0x95, 0x10, 0x25,
- 0x9f, 0x80, 0x0, 0x0, 0x2e, 0xf3, 0x0, 0x0,
- 0x0, 0x5, 0xfa, 0x0, 0x0, 0xcf, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0x40, 0x4, 0xf6, 0x0,
- 0x2, 0x57, 0x72, 0x0, 0xc, 0xb0, 0xe, 0xe0,
- 0x0, 0x3e, 0xfe, 0xef, 0x70, 0x5, 0xf3, 0x3f,
- 0x70, 0x0, 0xef, 0x30, 0x1f, 0x80, 0x0, 0xf4,
- 0x5f, 0x40, 0x6, 0xf7, 0x0, 0x4f, 0x80, 0x0,
- 0xf7, 0x8f, 0x0, 0xc, 0xf1, 0x0, 0x4f, 0x60,
- 0x0, 0xf8, 0xce, 0x0, 0xf, 0xf0, 0x0, 0x5f,
- 0x40, 0x0, 0xc8, 0xcd, 0x0, 0x3f, 0xc0, 0x0,
- 0x8f, 0x40, 0x0, 0xf8, 0xaf, 0x0, 0x4f, 0xc0,
- 0x0, 0x8f, 0x20, 0x2, 0xf4, 0x8f, 0x0, 0x2f,
- 0xd0, 0x0, 0xbf, 0x0, 0xa, 0xe0, 0x8f, 0x20,
- 0xd, 0xf9, 0x6a, 0xdf, 0x72, 0x7f, 0x50, 0x2f,
- 0xa0, 0x3, 0xff, 0xf9, 0x1d, 0xff, 0xe4, 0x0,
- 0xa, 0xf2, 0x0, 0x4, 0x10, 0x0, 0x31, 0x0,
- 0x0, 0x2, 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xc3, 0x0, 0x0, 0x0,
- 0x10, 0x0, 0x0, 0x0, 0x3, 0xdf, 0xc9, 0x77,
- 0x9e, 0x70, 0x0, 0x0, 0x0, 0x0, 0x14, 0x8b,
- 0xcc, 0xb6, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x7c, 0xef, 0xec, 0x71, 0x0,
+ 0x0, 0x0, 0x0, 0x6f, 0xfb, 0x87, 0x8b, 0xfe,
+ 0x50, 0x0, 0x0, 0x8, 0xf9, 0x10, 0x0, 0x0,
+ 0x19, 0xf6, 0x0, 0x0, 0x6f, 0x70, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0x20, 0x2, 0xfa, 0x0, 0x0,
+ 0x1, 0x0, 0x0, 0xc, 0xa0, 0x9, 0xf1, 0x0,
+ 0x5, 0xdf, 0xfa, 0x10, 0x5, 0xf1, 0xf, 0x90,
+ 0x0, 0x5f, 0xb5, 0x6f, 0x90, 0x0, 0xf4, 0x4f,
+ 0x40, 0x1, 0xfb, 0x0, 0x1f, 0x80, 0x0, 0xe7,
+ 0x8f, 0x0, 0x7, 0xf3, 0x0, 0x2f, 0x60, 0x0,
+ 0xc9, 0xae, 0x0, 0xc, 0xe0, 0x0, 0x3f, 0x50,
+ 0x0, 0xc9, 0xbd, 0x0, 0xf, 0xb0, 0x0, 0x5f,
+ 0x30, 0x0, 0xc9, 0xbc, 0x0, 0x1f, 0x90, 0x0,
+ 0x6f, 0x20, 0x0, 0xe7, 0xbd, 0x0, 0x1f, 0xa0,
+ 0x0, 0xaf, 0x10, 0x2, 0xf4, 0x9f, 0x0, 0xf,
+ 0xe0, 0x3, 0xff, 0x20, 0xa, 0xd0, 0x6f, 0x20,
+ 0x9, 0xfd, 0xaf, 0x9f, 0xb5, 0x9f, 0x40, 0x2f,
+ 0x70, 0x0, 0xaf, 0xd6, 0x6, 0xef, 0xc4, 0x0,
+ 0xb, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0xb1, 0x0, 0x0, 0x0,
+ 0x10, 0x0, 0x0, 0x0, 0x6, 0xef, 0xb7, 0x67,
+ 0xae, 0x60, 0x0, 0x0, 0x0, 0x0, 0x17, 0xce,
+ 0xff, 0xc7, 0x10, 0x0, 0x0,
/* U+41 "A" */
- 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x1f,
- 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xaa,
- 0xf6, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x55, 0xfb,
- 0x0, 0x0, 0x0, 0x2, 0xfe, 0x0, 0xff, 0x20,
- 0x0, 0x0, 0x7, 0xf9, 0x0, 0xaf, 0x70, 0x0,
- 0x0, 0xd, 0xf3, 0x0, 0x5f, 0xc0, 0x0, 0x0,
- 0x3f, 0xe0, 0x0, 0xf, 0xf2, 0x0, 0x0, 0x9f,
- 0xeb, 0xbb, 0xbe, 0xf8, 0x0, 0x0, 0xef, 0xff,
- 0xff, 0xff, 0xfd, 0x0, 0x5, 0xfd, 0x0, 0x0,
- 0x0, 0xef, 0x30, 0xa, 0xf7, 0x0, 0x0, 0x0,
- 0x9f, 0x90, 0x1e, 0xf2, 0x0, 0x0, 0x0, 0x3f,
- 0xd0, 0x6f, 0xd0, 0x0, 0x0, 0x0, 0xe, 0xf5,
+ 0x0, 0x0, 0x0, 0xef, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4f, 0xfa, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xa, 0xfe, 0xf0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xfd, 0x7f, 0x60, 0x0, 0x0, 0x0, 0x0,
+ 0x6f, 0x72, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xc,
+ 0xf2, 0xc, 0xf2, 0x0, 0x0, 0x0, 0x2, 0xfc,
+ 0x0, 0x6f, 0x80, 0x0, 0x0, 0x0, 0x8f, 0x60,
+ 0x1, 0xfe, 0x0, 0x0, 0x0, 0xe, 0xf1, 0x0,
+ 0xb, 0xf4, 0x0, 0x0, 0x4, 0xfb, 0x0, 0x0,
+ 0x5f, 0xa0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0x0, 0xf, 0xfb, 0xbb, 0xbb, 0xbd,
+ 0xf6, 0x0, 0x6, 0xfa, 0x0, 0x0, 0x0, 0x4f,
+ 0xc0, 0x0, 0xcf, 0x40, 0x0, 0x0, 0x0, 0xef,
+ 0x20, 0x2f, 0xe0, 0x0, 0x0, 0x0, 0x9, 0xf8,
+ 0x8, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xd0,
/* U+42 "B" */
- 0x3b, 0xbb, 0xbb, 0x77, 0x20, 0x0, 0x4f, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x4f, 0xf0, 0x0, 0x16,
- 0xff, 0x90, 0x4f, 0xf0, 0x0, 0x0, 0x5f, 0xd0,
- 0x4f, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x4f, 0xf0,
- 0x0, 0x0, 0x5f, 0xf0, 0x4f, 0xf0, 0x0, 0x4,
- 0xcf, 0x50, 0x4f, 0xff, 0xff, 0xff, 0xe6, 0x0,
- 0x4f, 0xfc, 0xcc, 0xcc, 0xff, 0x91, 0x4f, 0xf0,
- 0x0, 0x0, 0x2d, 0xf8, 0x4f, 0xf0, 0x0, 0x0,
- 0x5, 0xff, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0xff,
- 0x4f, 0xf0, 0x0, 0x0, 0x3, 0xff, 0x4f, 0xf0,
- 0x0, 0x0, 0x1a, 0xfb, 0x4f, 0xfb, 0xbb, 0xbb,
- 0xef, 0xf1, 0x4f, 0xff, 0xff, 0xff, 0xc8, 0x10,
+ 0x3f, 0xff, 0xff, 0xfd, 0x91, 0x0, 0x3f, 0xfb,
+ 0xbb, 0xcf, 0xfe, 0x20, 0x3f, 0xe0, 0x0, 0x0,
+ 0xbf, 0xb0, 0x3f, 0xe0, 0x0, 0x0, 0x2f, 0xf0,
+ 0x3f, 0xe0, 0x0, 0x0, 0x1f, 0xf0, 0x3f, 0xe0,
+ 0x0, 0x0, 0x5f, 0xd0, 0x3f, 0xe0, 0x0, 0x15,
+ 0xef, 0x40, 0x3f, 0xff, 0xff, 0xff, 0xf4, 0x0,
+ 0x3f, 0xfb, 0xbb, 0xbd, 0xfd, 0x20, 0x3f, 0xe0,
+ 0x0, 0x0, 0x6f, 0xe0, 0x3f, 0xe0, 0x0, 0x0,
+ 0xc, 0xf4, 0x3f, 0xe0, 0x0, 0x0, 0xa, 0xf7,
+ 0x3f, 0xe0, 0x0, 0x0, 0xd, 0xf5, 0x3f, 0xe0,
+ 0x0, 0x0, 0x8f, 0xf1, 0x3f, 0xfb, 0xbb, 0xbe,
+ 0xff, 0x50, 0x3f, 0xff, 0xff, 0xfe, 0xa3, 0x0,
/* U+43 "C" */
- 0x0, 0x3, 0x7b, 0xba, 0x71, 0x0, 0x0, 0x6e,
- 0xff, 0xdf, 0xfe, 0x60, 0x5, 0xff, 0x50, 0x0,
- 0x7f, 0xf3, 0x1d, 0xf4, 0x0, 0x0, 0x8, 0xfb,
- 0x6f, 0xd0, 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80,
- 0x0, 0x0, 0x0, 0x44, 0xcf, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0x80, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x9f, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x7f, 0xb0, 0x0, 0x0, 0x2, 0xff,
- 0x2f, 0xf2, 0x0, 0x0, 0x5, 0xfc, 0x9, 0xfc,
- 0x10, 0x0, 0x2d, 0xf5, 0x1, 0xcf, 0xd8, 0x79,
- 0xef, 0xa0, 0x0, 0x8, 0xef, 0xff, 0xe5, 0x0,
- 0x0, 0x0, 0x1, 0x30, 0x0, 0x0,
+ 0x0, 0x3, 0xae, 0xfe, 0xb5, 0x0, 0x0, 0x8,
+ 0xff, 0xdc, 0xdf, 0xf9, 0x0, 0x6, 0xfe, 0x40,
+ 0x0, 0x3e, 0xf6, 0x0, 0xef, 0x40, 0x0, 0x0,
+ 0x4f, 0xe0, 0x5f, 0xc0, 0x0, 0x0, 0x0, 0xef,
+ 0x38, 0xf8, 0x0, 0x0, 0x0, 0x2, 0x31, 0xaf,
+ 0x60, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xbf, 0x50, 0x0, 0x0,
+ 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x9f, 0x80, 0x0, 0x0, 0x0, 0x22, 0x5,
+ 0xfc, 0x0, 0x0, 0x0, 0xe, 0xf3, 0xe, 0xf4,
+ 0x0, 0x0, 0x4, 0xfe, 0x0, 0x6f, 0xe3, 0x0,
+ 0x3, 0xdf, 0x60, 0x0, 0x8f, 0xfd, 0xbd, 0xff,
+ 0x90, 0x0, 0x0, 0x4b, 0xef, 0xeb, 0x40, 0x0,
/* U+44 "D" */
- 0x3b, 0xbb, 0xba, 0x74, 0x20, 0x0, 0x4, 0xff,
- 0xff, 0xff, 0xff, 0x70, 0x0, 0x4f, 0xf0, 0x0,
- 0x36, 0xff, 0xc0, 0x4, 0xff, 0x0, 0x0, 0x1,
- 0xdf, 0x80, 0x4f, 0xf0, 0x0, 0x0, 0x4, 0xff,
- 0x14, 0xff, 0x0, 0x0, 0x0, 0xd, 0xf4, 0x4f,
- 0xf0, 0x0, 0x0, 0x0, 0xcf, 0x74, 0xff, 0x0,
- 0x0, 0x0, 0x8, 0xf8, 0x4f, 0xf0, 0x0, 0x0,
- 0x0, 0x8f, 0x84, 0xff, 0x0, 0x0, 0x0, 0xa,
- 0xf8, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0xcf, 0x54,
- 0xff, 0x0, 0x0, 0x0, 0x1f, 0xf2, 0x4f, 0xf0,
- 0x0, 0x0, 0xa, 0xfc, 0x4, 0xff, 0x0, 0x0,
- 0x19, 0xff, 0x20, 0x4f, 0xfb, 0xbb, 0xbf, 0xfe,
- 0x40, 0x4, 0xff, 0xff, 0xfe, 0xc7, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0xea, 0x30, 0x0, 0x3, 0xff,
+ 0xbb, 0xbe, 0xff, 0x90, 0x0, 0x3f, 0xe0, 0x0,
+ 0x3, 0xdf, 0x80, 0x3, 0xfe, 0x0, 0x0, 0x1,
+ 0xef, 0x30, 0x3f, 0xe0, 0x0, 0x0, 0x7, 0xf9,
+ 0x3, 0xfe, 0x0, 0x0, 0x0, 0x2f, 0xe0, 0x3f,
+ 0xe0, 0x0, 0x0, 0x0, 0xff, 0x3, 0xfe, 0x0,
+ 0x0, 0x0, 0xe, 0xf1, 0x3f, 0xe0, 0x0, 0x0,
+ 0x0, 0xef, 0x13, 0xfe, 0x0, 0x0, 0x0, 0xf,
+ 0xf0, 0x3f, 0xe0, 0x0, 0x0, 0x2, 0xfe, 0x3,
+ 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xa0, 0x3f, 0xe0,
+ 0x0, 0x0, 0x2f, 0xf3, 0x3, 0xfe, 0x0, 0x0,
+ 0x4e, 0xf9, 0x0, 0x3f, 0xfb, 0xbb, 0xef, 0xf9,
+ 0x0, 0x3, 0xff, 0xff, 0xfd, 0x93, 0x0, 0x0,
/* U+45 "E" */
- 0x3b, 0xbb, 0xbb, 0xbb, 0xbb, 0x34, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0x4f, 0xf0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xff, 0xff, 0xff, 0x40, 0x4f, 0xfc, 0xcc, 0xcc,
- 0xc3, 0x4, 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xf0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xfb, 0xbb,
- 0xbb, 0xbb, 0x64, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0x3f, 0xff, 0xff, 0xff, 0xff, 0xa3, 0xff, 0xbb,
+ 0xbb, 0xbb, 0xb7, 0x3f, 0xe0, 0x0, 0x0, 0x0,
+ 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0,
+ 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff,
+ 0xff, 0xff, 0xff, 0xa0, 0x3f, 0xfb, 0xbb, 0xbb,
+ 0xb7, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f,
+ 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3,
+ 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfb, 0xbb,
+ 0xbb, 0xbb, 0x83, 0xff, 0xff, 0xff, 0xff, 0xfc,
/* U+46 "F" */
- 0x3b, 0xbb, 0xbb, 0xbb, 0xbb, 0x64, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x4f, 0xf0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0x77, 0x77, 0x77, 0x40, 0x4f, 0xff, 0xff, 0xff,
- 0xf8, 0x4, 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xf0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xbb,
+ 0xbb, 0xbb, 0xb5, 0x3f, 0xe0, 0x0, 0x0, 0x0,
+ 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0,
+ 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff,
+ 0xbb, 0xbb, 0xbb, 0x40, 0x3f, 0xff, 0xff, 0xff,
+ 0xf7, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f,
+ 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3,
+ 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0,
+ 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0,
/* U+47 "G" */
- 0x0, 0x2, 0x7b, 0xbb, 0x72, 0x0, 0x0, 0x7e,
- 0xff, 0xcf, 0xfe, 0x60, 0x5, 0xff, 0x60, 0x0,
- 0x7f, 0xf4, 0x1e, 0xf5, 0x0, 0x0, 0x8, 0xfc,
- 0x6f, 0xd0, 0x0, 0x0, 0x3, 0xfe, 0x8f, 0x90,
- 0x0, 0x0, 0x0, 0x44, 0xcf, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0x80, 0x0, 0x6b, 0xbb, 0xbb, 0xcf, 0x80,
- 0x0, 0x6c, 0xcc, 0xff, 0x9f, 0x80, 0x0, 0x0,
- 0x0, 0xff, 0x7f, 0xb0, 0x0, 0x0, 0x0, 0xff,
- 0x2f, 0xf3, 0x0, 0x0, 0x0, 0xff, 0x8, 0xfc,
- 0x20, 0x0, 0x4, 0xff, 0x1, 0xcf, 0xe9, 0x77,
- 0xaf, 0xf8, 0x0, 0x7, 0xdf, 0xff, 0xfb, 0x40,
- 0x0, 0x0, 0x0, 0x42, 0x0, 0x0,
+ 0x0, 0x4, 0xae, 0xfe, 0xb6, 0x0, 0x0, 0x9,
+ 0xff, 0xdb, 0xdf, 0xfb, 0x0, 0x6, 0xfe, 0x40,
+ 0x0, 0x3d, 0xf9, 0x0, 0xef, 0x40, 0x0, 0x0,
+ 0x2f, 0xf1, 0x5f, 0xd0, 0x0, 0x0, 0x0, 0xac,
+ 0x38, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
+ 0x60, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf6, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xaf, 0x60, 0x0, 0x5f,
+ 0xff, 0xff, 0x59, 0xf7, 0x0, 0x3, 0xbb, 0xbe,
+ 0xf5, 0x8f, 0x90, 0x0, 0x0, 0x0, 0xbf, 0x54,
+ 0xfe, 0x0, 0x0, 0x0, 0xb, 0xf5, 0xd, 0xf7,
+ 0x0, 0x0, 0x0, 0xbf, 0x50, 0x4f, 0xf6, 0x0,
+ 0x0, 0x3e, 0xf5, 0x0, 0x5f, 0xfe, 0xbb, 0xef,
+ 0xfa, 0x0, 0x0, 0x29, 0xdf, 0xfd, 0xa4, 0x0,
/* U+48 "H" */
- 0x3b, 0xb0, 0x0, 0x0, 0x0, 0x6b, 0x94, 0xff,
- 0x0, 0x0, 0x0, 0x8, 0xfc, 0x4f, 0xf0, 0x0,
- 0x0, 0x0, 0x8f, 0xc4, 0xff, 0x0, 0x0, 0x0,
- 0x8, 0xfc, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x8f,
- 0xc4, 0xff, 0x0, 0x0, 0x0, 0x8, 0xfc, 0x4f,
- 0xf0, 0x0, 0x0, 0x0, 0x8f, 0xc4, 0xff, 0x77,
- 0x77, 0x77, 0x7b, 0xfc, 0x4f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xc4, 0xff, 0x0, 0x0, 0x0, 0x8,
- 0xfc, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x8f, 0xc4,
- 0xff, 0x0, 0x0, 0x0, 0x8, 0xfc, 0x4f, 0xf0,
- 0x0, 0x0, 0x0, 0x8f, 0xc4, 0xff, 0x0, 0x0,
- 0x0, 0x8, 0xfc, 0x4f, 0xf0, 0x0, 0x0, 0x0,
- 0x8f, 0xc4, 0xff, 0x0, 0x0, 0x0, 0x8, 0xfc,
+ 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3f, 0xd3, 0xfe,
+ 0x0, 0x0, 0x0, 0x3, 0xfd, 0x3f, 0xe0, 0x0,
+ 0x0, 0x0, 0x3f, 0xd3, 0xfe, 0x0, 0x0, 0x0,
+ 0x3, 0xfd, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3f,
+ 0xd3, 0xfe, 0x0, 0x0, 0x0, 0x3, 0xfd, 0x3f,
+ 0xe0, 0x0, 0x0, 0x0, 0x3f, 0xd3, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfd, 0x3f, 0xfb, 0xbb, 0xbb,
+ 0xbb, 0xcf, 0xd3, 0xfe, 0x0, 0x0, 0x0, 0x3,
+ 0xfd, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3f, 0xd3,
+ 0xfe, 0x0, 0x0, 0x0, 0x3, 0xfd, 0x3f, 0xe0,
+ 0x0, 0x0, 0x0, 0x3f, 0xd3, 0xfe, 0x0, 0x0,
+ 0x0, 0x3, 0xfd, 0x3f, 0xe0, 0x0, 0x0, 0x0,
+ 0x3f, 0xd3, 0xfe, 0x0, 0x0, 0x0, 0x3, 0xfd,
/* U+49 "I" */
- 0x9a, 0x1f, 0xf2, 0xff, 0x2f, 0xf2, 0xff, 0x2f,
- 0xf2, 0xff, 0x2f, 0xf2, 0xff, 0x2f, 0xf2, 0xff,
- 0x2f, 0xf2, 0xff, 0x2f, 0xf2, 0xff, 0x2f, 0xf2,
+ 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0,
+ 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0,
+ 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0,
+ 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0,
/* U+4A "J" */
- 0x0, 0x0, 0x0, 0x0, 0x9b, 0x30, 0x0, 0x0,
- 0x0, 0xc, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0x40, 0x0, 0x0, 0x0, 0xc, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0x40, 0x0, 0x0, 0x0, 0xc,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x40, 0x0,
- 0x0, 0x0, 0xc, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0x40, 0x0, 0x0, 0x0, 0xc, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0x41, 0x33, 0x0, 0x0,
- 0xd, 0xf4, 0xf, 0xf0, 0x0, 0x0, 0xff, 0x10,
- 0xff, 0x60, 0x0, 0x8f, 0xe0, 0x5, 0xff, 0x87,
- 0x9f, 0xf4, 0x0, 0x5, 0xef, 0xff, 0xd4, 0x0,
- 0x0, 0x0, 0x14, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xaf, 0x70, 0x0, 0x0,
+ 0x0, 0xa, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xaf,
+ 0x70, 0x0, 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0,
+ 0x0, 0x0, 0xaf, 0x70, 0x0, 0x0, 0x0, 0xa,
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0xaf, 0x70, 0x0,
+ 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0, 0x0, 0x0,
+ 0xaf, 0x70, 0x0, 0x0, 0x0, 0xa, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0xaf, 0x73, 0x96, 0x0, 0x0,
+ 0xa, 0xf6, 0x5f, 0xd0, 0x0, 0x0, 0xef, 0x41,
+ 0xff, 0x70, 0x0, 0x8f, 0xe0, 0x6, 0xff, 0xdb,
+ 0xef, 0xf4, 0x0, 0x3, 0xbe, 0xfe, 0xa2, 0x0,
/* U+4B "K" */
- 0x3b, 0xb0, 0x0, 0x0, 0x5, 0xbb, 0x14, 0xff,
- 0x0, 0x0, 0x3, 0xef, 0x60, 0x4f, 0xf0, 0x0,
- 0x1, 0xcf, 0x80, 0x4, 0xff, 0x0, 0x0, 0xbf,
- 0xa0, 0x0, 0x4f, 0xf0, 0x0, 0x8f, 0xd1, 0x0,
- 0x4, 0xff, 0x0, 0x5f, 0xf1, 0x0, 0x0, 0x4f,
- 0xf0, 0x3e, 0xf3, 0x0, 0x0, 0x4, 0xff, 0xbe,
- 0xf7, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0x90,
- 0x0, 0x0, 0x4, 0xff, 0x3, 0xff, 0x70, 0x0,
- 0x0, 0x4f, 0xf0, 0x5, 0xff, 0x50, 0x0, 0x4,
- 0xff, 0x0, 0x8, 0xfe, 0x30, 0x0, 0x4f, 0xf0,
- 0x0, 0xb, 0xfc, 0x10, 0x4, 0xff, 0x0, 0x0,
- 0x1d, 0xfa, 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x3f,
- 0xf9, 0x4, 0xff, 0x0, 0x0, 0x0, 0x5f, 0xf6,
+ 0x3f, 0xe0, 0x0, 0x0, 0x9, 0xfd, 0x3, 0xfe,
+ 0x0, 0x0, 0x7, 0xfe, 0x10, 0x3f, 0xe0, 0x0,
+ 0x5, 0xff, 0x30, 0x3, 0xfe, 0x0, 0x4, 0xff,
+ 0x40, 0x0, 0x3f, 0xe0, 0x2, 0xff, 0x60, 0x0,
+ 0x3, 0xfe, 0x1, 0xef, 0x80, 0x0, 0x0, 0x3f,
+ 0xe0, 0xdf, 0xa0, 0x0, 0x0, 0x3, 0xfe, 0xbf,
+ 0xf7, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xdf, 0xf3,
+ 0x0, 0x0, 0x3, 0xff, 0xd1, 0x8f, 0xe1, 0x0,
+ 0x0, 0x3f, 0xf1, 0x0, 0xcf, 0xb0, 0x0, 0x3,
+ 0xfe, 0x0, 0x1, 0xef, 0x70, 0x0, 0x3f, 0xe0,
+ 0x0, 0x4, 0xff, 0x30, 0x3, 0xfe, 0x0, 0x0,
+ 0x8, 0xfd, 0x10, 0x3f, 0xe0, 0x0, 0x0, 0xc,
+ 0xfa, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x1e, 0xf6,
/* U+4C "L" */
- 0x3b, 0xb0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xf0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xfb, 0xbb,
- 0xbb, 0xbb, 0x64, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0,
+ 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0,
+ 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0,
+ 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe,
+ 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0,
+ 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f,
+ 0xe0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x3,
+ 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfb, 0xbb,
+ 0xbb, 0xbb, 0x33, 0xff, 0xff, 0xff, 0xff, 0xf4,
/* U+4D "M" */
- 0x3b, 0xb8, 0x0, 0x0, 0x0, 0x0, 0x7, 0xbb,
- 0x34, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0xf4, 0x4f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x5f,
- 0xff, 0x44, 0xff, 0xfb, 0x0, 0x0, 0x0, 0xa,
- 0xff, 0xf4, 0x4f, 0xfd, 0xf2, 0x0, 0x0, 0x1,
- 0xfe, 0xff, 0x44, 0xff, 0x6f, 0x90, 0x0, 0x0,
- 0x7f, 0x8f, 0xf4, 0x4f, 0xf1, 0xfe, 0x0, 0x0,
- 0xe, 0xf2, 0xff, 0x44, 0xff, 0xa, 0xf5, 0x0,
- 0x4, 0xfb, 0xf, 0xf4, 0x4f, 0xf0, 0x3f, 0xb0,
- 0x0, 0xaf, 0x50, 0xff, 0x44, 0xff, 0x0, 0xdf,
- 0x20, 0x1f, 0xe0, 0xf, 0xf4, 0x4f, 0xf0, 0x6,
- 0xf8, 0x6, 0xf8, 0x0, 0xff, 0x44, 0xff, 0x0,
- 0x1f, 0xd0, 0xdf, 0x20, 0xf, 0xf4, 0x4f, 0xf0,
- 0x0, 0xaf, 0x8f, 0xb0, 0x0, 0xff, 0x44, 0xff,
- 0x0, 0x3, 0xff, 0xf5, 0x0, 0xf, 0xf4, 0x4f,
- 0xf0, 0x0, 0xd, 0xfe, 0x0, 0x0, 0xff, 0x44,
- 0xff, 0x0, 0x0, 0x6f, 0x80, 0x0, 0xf, 0xf4,
+ 0x3f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
+ 0x63, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xef,
+ 0xf6, 0x3f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x4f,
+ 0xff, 0x63, 0xfd, 0xfd, 0x0, 0x0, 0x0, 0xa,
+ 0xfd, 0xf6, 0x3f, 0xbc, 0xf3, 0x0, 0x0, 0x1,
+ 0xfe, 0x8f, 0x63, 0xfb, 0x5f, 0xa0, 0x0, 0x0,
+ 0x7f, 0x88, 0xf6, 0x3f, 0xc0, 0xef, 0x0, 0x0,
+ 0xd, 0xf2, 0x9f, 0x63, 0xfc, 0x9, 0xf6, 0x0,
+ 0x3, 0xfb, 0x9, 0xf6, 0x3f, 0xd0, 0x2f, 0xc0,
+ 0x0, 0xaf, 0x50, 0xaf, 0x63, 0xfd, 0x0, 0xcf,
+ 0x30, 0xf, 0xe0, 0xa, 0xf6, 0x3f, 0xe0, 0x6,
+ 0xf9, 0x6, 0xf8, 0x0, 0xbf, 0x63, 0xfe, 0x0,
+ 0xf, 0xf0, 0xcf, 0x20, 0xb, 0xf6, 0x3f, 0xe0,
+ 0x0, 0x9f, 0x8f, 0xc0, 0x0, 0xbf, 0x63, 0xfe,
+ 0x0, 0x3, 0xff, 0xf5, 0x0, 0xb, 0xf6, 0x3f,
+ 0xe0, 0x0, 0xc, 0xfe, 0x0, 0x0, 0xbf, 0x63,
+ 0xfe, 0x0, 0x0, 0x6f, 0x90, 0x0, 0xb, 0xf6,
/* U+4E "N" */
- 0x3b, 0xb1, 0x0, 0x0, 0x0, 0x6b, 0x94, 0xff,
- 0xa0, 0x0, 0x0, 0x8, 0xfc, 0x4f, 0xff, 0x40,
- 0x0, 0x0, 0x8f, 0xc4, 0xff, 0xfd, 0x10, 0x0,
- 0x8, 0xfc, 0x4f, 0xfc, 0xf9, 0x0, 0x0, 0x8f,
- 0xc4, 0xff, 0x2f, 0xf3, 0x0, 0x8, 0xfc, 0x4f,
- 0xf0, 0x8f, 0xc0, 0x0, 0x8f, 0xc4, 0xff, 0x0,
- 0xdf, 0x70, 0x8, 0xfc, 0x4f, 0xf0, 0x3, 0xfe,
- 0x20, 0x8f, 0xc4, 0xff, 0x0, 0x9, 0xfa, 0x8,
- 0xfc, 0x4f, 0xf0, 0x0, 0x1e, 0xf5, 0x8f, 0xc4,
- 0xff, 0x0, 0x0, 0x5f, 0xe9, 0xfc, 0x4f, 0xf0,
- 0x0, 0x0, 0xbf, 0xef, 0xc4, 0xff, 0x0, 0x0,
- 0x2, 0xff, 0xfc, 0x4f, 0xf0, 0x0, 0x0, 0x7,
- 0xff, 0xc4, 0xff, 0x0, 0x0, 0x0, 0xc, 0xfc,
+ 0x3f, 0xf3, 0x0, 0x0, 0x0, 0x3f, 0xd3, 0xff,
+ 0xd0, 0x0, 0x0, 0x3, 0xfd, 0x3f, 0xff, 0x70,
+ 0x0, 0x0, 0x3f, 0xd3, 0xff, 0xff, 0x20, 0x0,
+ 0x3, 0xfd, 0x3f, 0xe9, 0xfc, 0x0, 0x0, 0x3f,
+ 0xd3, 0xfe, 0xe, 0xf6, 0x0, 0x3, 0xfd, 0x3f,
+ 0xe0, 0x4f, 0xe1, 0x0, 0x3f, 0xd3, 0xfe, 0x0,
+ 0xaf, 0xa0, 0x3, 0xfd, 0x3f, 0xe0, 0x1, 0xef,
+ 0x40, 0x3f, 0xd3, 0xfe, 0x0, 0x6, 0xfe, 0x3,
+ 0xfd, 0x3f, 0xe0, 0x0, 0xb, 0xf9, 0x3f, 0xd3,
+ 0xfe, 0x0, 0x0, 0x2f, 0xf7, 0xfd, 0x3f, 0xe0,
+ 0x0, 0x0, 0x7f, 0xff, 0xd3, 0xfe, 0x0, 0x0,
+ 0x0, 0xdf, 0xfd, 0x3f, 0xe0, 0x0, 0x0, 0x3,
+ 0xff, 0xd3, 0xfe, 0x0, 0x0, 0x0, 0x8, 0xfd,
/* U+4F "O" */
- 0x0, 0x2, 0x7a, 0xba, 0x71, 0x0, 0x0, 0x6,
- 0xef, 0xff, 0xff, 0xe5, 0x0, 0x5, 0xff, 0x71,
- 0x1, 0x8f, 0xf4, 0x1, 0xef, 0x40, 0x0, 0x0,
- 0x7f, 0xd1, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0xef,
- 0x69, 0xf8, 0x0, 0x0, 0x0, 0x8, 0xf8, 0xcf,
- 0x60, 0x0, 0x0, 0x0, 0x6f, 0xcc, 0xf4, 0x0,
- 0x0, 0x0, 0x4, 0xfc, 0xcf, 0x40, 0x0, 0x0,
- 0x0, 0x4f, 0xcc, 0xf4, 0x0, 0x0, 0x0, 0x5,
- 0xfc, 0xaf, 0x80, 0x0, 0x0, 0x0, 0x8f, 0xa8,
- 0xfa, 0x0, 0x0, 0x0, 0xa, 0xf7, 0x2f, 0xf2,
- 0x0, 0x0, 0x2, 0xff, 0x20, 0x9f, 0xc1, 0x0,
- 0x3, 0xcf, 0x80, 0x1, 0xcf, 0xea, 0x7b, 0xef,
- 0xb0, 0x0, 0x0, 0x7e, 0xff, 0xfd, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xae, 0xfe, 0xa4, 0x0, 0x0, 0x7,
+ 0xff, 0xed, 0xef, 0xf9, 0x0, 0x5, 0xff, 0x60,
+ 0x0, 0x4e, 0xf7, 0x0, 0xef, 0x50, 0x0, 0x0,
+ 0x3f, 0xf0, 0x4f, 0xd0, 0x0, 0x0, 0x0, 0xbf,
+ 0x68, 0xf8, 0x0, 0x0, 0x0, 0x6, 0xfa, 0xaf,
+ 0x50, 0x0, 0x0, 0x0, 0x4f, 0xcb, 0xf5, 0x0,
+ 0x0, 0x0, 0x3, 0xfd, 0xbf, 0x50, 0x0, 0x0,
+ 0x0, 0x3f, 0xda, 0xf5, 0x0, 0x0, 0x0, 0x4,
+ 0xfc, 0x8f, 0x80, 0x0, 0x0, 0x0, 0x6f, 0xa4,
+ 0xfd, 0x0, 0x0, 0x0, 0xa, 0xf6, 0xe, 0xf5,
+ 0x0, 0x0, 0x3, 0xff, 0x10, 0x5f, 0xf5, 0x0,
+ 0x3, 0xef, 0x70, 0x0, 0x6f, 0xfe, 0xce, 0xff,
+ 0x90, 0x0, 0x0, 0x3a, 0xef, 0xeb, 0x40, 0x0,
/* U+50 "P" */
- 0x3b, 0xbb, 0xbb, 0xa7, 0x51, 0x0, 0x4f, 0xff,
- 0xff, 0xff, 0xfe, 0x60, 0x4f, 0xf0, 0x0, 0x3,
- 0x8f, 0xf4, 0x4f, 0xf0, 0x0, 0x0, 0x8, 0xfc,
- 0x4f, 0xf0, 0x0, 0x0, 0x4, 0xfe, 0x4f, 0xf0,
- 0x0, 0x0, 0x3, 0xff, 0x4f, 0xf0, 0x0, 0x0,
- 0x8, 0xfc, 0x4f, 0xf0, 0x0, 0x0, 0x7e, 0xf4,
- 0x4f, 0xff, 0xff, 0xff, 0xff, 0x70, 0x4f, 0xfc,
- 0xcc, 0xca, 0x82, 0x0, 0x4f, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0xfe, 0xb6, 0x0, 0x3, 0xff,
+ 0xbb, 0xbb, 0xdf, 0xfb, 0x0, 0x3f, 0xe0, 0x0,
+ 0x0, 0x3e, 0xf7, 0x3, 0xfe, 0x0, 0x0, 0x0,
+ 0x5f, 0xd0, 0x3f, 0xe0, 0x0, 0x0, 0x1, 0xff,
+ 0x3, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x3f,
+ 0xe0, 0x0, 0x0, 0x6, 0xfd, 0x3, 0xfe, 0x0,
+ 0x0, 0x17, 0xff, 0x60, 0x3f, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x3, 0xff, 0xbb, 0xbb, 0xa7, 0x20,
+ 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+51 "Q" */
- 0x0, 0x2, 0x7a, 0xba, 0x71, 0x0, 0x0, 0x0,
- 0x6e, 0xff, 0xff, 0xfe, 0x50, 0x0, 0x5, 0xff,
- 0x71, 0x1, 0x8f, 0xf4, 0x0, 0x1e, 0xf4, 0x0,
- 0x0, 0x7, 0xfd, 0x10, 0x7f, 0xc0, 0x0, 0x0,
- 0x0, 0xef, 0x60, 0x9f, 0x80, 0x0, 0x0, 0x0,
- 0x8f, 0x80, 0xcf, 0x60, 0x0, 0x0, 0x0, 0x6f,
- 0xc0, 0xcf, 0x40, 0x0, 0x0, 0x0, 0x4f, 0xc0,
- 0xcf, 0x40, 0x0, 0x0, 0x0, 0x4f, 0xc0, 0xcf,
- 0x40, 0x0, 0x0, 0x0, 0x5f, 0xc0, 0xaf, 0x80,
- 0x0, 0x0, 0x0, 0x8f, 0xc0, 0x8f, 0xa0, 0x0,
- 0x0, 0x0, 0xaf, 0x80, 0x2f, 0xf2, 0x0, 0x0,
- 0x2, 0xff, 0x20, 0x9, 0xfc, 0x10, 0x0, 0x3c,
- 0xfa, 0x0, 0x1, 0xcf, 0xea, 0x7b, 0xef, 0xfe,
- 0x30, 0x0, 0x7, 0xef, 0xff, 0xe8, 0xdf, 0xe3,
- 0x0, 0x0, 0x0, 0x42, 0x0, 0x1d, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x50,
+ 0x0, 0x3, 0xae, 0xfe, 0xa3, 0x0, 0x0, 0x8,
+ 0xff, 0xed, 0xef, 0xf8, 0x0, 0x6, 0xfe, 0x50,
+ 0x0, 0x5f, 0xf6, 0x0, 0xff, 0x40, 0x0, 0x0,
+ 0x4f, 0xe0, 0x6f, 0xb0, 0x0, 0x0, 0x0, 0xcf,
+ 0x5a, 0xf7, 0x0, 0x0, 0x0, 0x8, 0xf9, 0xcf,
+ 0x40, 0x0, 0x0, 0x0, 0x5f, 0xbd, 0xf3, 0x0,
+ 0x0, 0x0, 0x4, 0xfc, 0xdf, 0x30, 0x0, 0x0,
+ 0x0, 0x4f, 0xcc, 0xf4, 0x0, 0x0, 0x0, 0x5,
+ 0xfa, 0xaf, 0x70, 0x0, 0x0, 0x0, 0x7f, 0x96,
+ 0xfb, 0x0, 0x0, 0x0, 0xc, 0xf4, 0xf, 0xf4,
+ 0x0, 0x0, 0x4, 0xfe, 0x0, 0x6f, 0xe4, 0x0,
+ 0x4, 0xef, 0x50, 0x0, 0x8f, 0xfe, 0xce, 0xff,
+ 0x70, 0x0, 0x0, 0x3a, 0xef, 0xef, 0xfa, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2d, 0xfd, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x1b, 0xf6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3, 0x0,
/* U+52 "R" */
- 0x27, 0x77, 0x77, 0x77, 0x40, 0x0, 0x4, 0xff,
- 0xff, 0xff, 0xff, 0xd3, 0x0, 0x4f, 0xf0, 0x0,
- 0x4, 0xbf, 0xe1, 0x4, 0xff, 0x0, 0x0, 0x0,
- 0xdf, 0x60, 0x4f, 0xf0, 0x0, 0x0, 0x8, 0xf8,
- 0x4, 0xff, 0x0, 0x0, 0x0, 0xaf, 0x80, 0x4f,
- 0xf0, 0x0, 0x0, 0x1e, 0xf2, 0x4, 0xff, 0x77,
- 0x77, 0x8e, 0xf6, 0x0, 0x4f, 0xff, 0xff, 0xff,
- 0xf9, 0x10, 0x4, 0xff, 0x44, 0x44, 0x5d, 0xfc,
- 0x0, 0x4f, 0xf0, 0x0, 0x0, 0x1f, 0xf6, 0x4,
- 0xff, 0x0, 0x0, 0x0, 0xaf, 0x80, 0x4f, 0xf0,
- 0x0, 0x0, 0x8, 0xf8, 0x4, 0xff, 0x0, 0x0,
- 0x0, 0x8f, 0x80, 0x4f, 0xf0, 0x0, 0x0, 0x8,
- 0xfb, 0x4, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xe2,
+ 0x3f, 0xff, 0xff, 0xfd, 0x92, 0x0, 0x3, 0xff,
+ 0xbb, 0xbc, 0xff, 0xf4, 0x0, 0x3f, 0xe0, 0x0,
+ 0x0, 0x9f, 0xe0, 0x3, 0xfe, 0x0, 0x0, 0x0,
+ 0xef, 0x40, 0x3f, 0xe0, 0x0, 0x0, 0xa, 0xf6,
+ 0x3, 0xfe, 0x0, 0x0, 0x0, 0xbf, 0x60, 0x3f,
+ 0xe0, 0x0, 0x0, 0x1f, 0xf2, 0x3, 0xfe, 0x0,
+ 0x1, 0x4d, 0xfa, 0x0, 0x3f, 0xff, 0xff, 0xff,
+ 0xfa, 0x0, 0x3, 0xff, 0xbb, 0xbd, 0xfb, 0x0,
+ 0x0, 0x3f, 0xe0, 0x0, 0x1f, 0xf2, 0x0, 0x3,
+ 0xfe, 0x0, 0x0, 0x7f, 0xb0, 0x0, 0x3f, 0xe0,
+ 0x0, 0x0, 0xef, 0x30, 0x3, 0xfe, 0x0, 0x0,
+ 0x6, 0xfc, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0xd,
+ 0xf5, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x5f, 0xd0,
/* U+53 "S" */
- 0x0, 0x6, 0xab, 0xb8, 0x40, 0x0, 0x1, 0xcf,
- 0xfd, 0xff, 0xf8, 0x0, 0xb, 0xfc, 0x10, 0x4,
- 0xdf, 0x80, 0xf, 0xf1, 0x0, 0x0, 0x3f, 0xf0,
- 0x4f, 0xf0, 0x0, 0x0, 0xf, 0xf3, 0xf, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x9, 0xfe, 0x71, 0x0,
- 0x0, 0x0, 0x0, 0x9f, 0xff, 0xa5, 0x10, 0x0,
- 0x0, 0x4, 0xaf, 0xff, 0xe6, 0x0, 0x0, 0x0,
- 0x0, 0x5a, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xf2, 0x57, 0x40, 0x0, 0x0, 0xc, 0xf5,
- 0x8f, 0xa0, 0x0, 0x0, 0xd, 0xf4, 0x2f, 0xf6,
- 0x0, 0x0, 0x6f, 0xf1, 0x6, 0xff, 0xb7, 0x7a,
- 0xff, 0x50, 0x0, 0x4c, 0xff, 0xff, 0xc4, 0x0,
- 0x0, 0x0, 0x2, 0x30, 0x0, 0x0,
+ 0x0, 0x3, 0xae, 0xfe, 0xb6, 0x0, 0x0, 0x7,
+ 0xff, 0xec, 0xdf, 0xfb, 0x0, 0x3, 0xff, 0x50,
+ 0x0, 0x2c, 0xf9, 0x0, 0x8f, 0x90, 0x0, 0x0,
+ 0x2f, 0xf0, 0x9, 0xf8, 0x0, 0x0, 0x0, 0xbb,
+ 0x10, 0x6f, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xcf, 0xe7, 0x10, 0x0, 0x0, 0x0, 0x1, 0x9f,
+ 0xff, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x27, 0xdf,
+ 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x29, 0xff,
+ 0x70, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0x0,
+ 0xcb, 0x0, 0x0, 0x0, 0xe, 0xf2, 0xe, 0xf3,
+ 0x0, 0x0, 0x0, 0xff, 0x20, 0x7f, 0xe4, 0x0,
+ 0x0, 0xaf, 0xd0, 0x0, 0x9f, 0xfd, 0xbc, 0xff,
+ 0xe3, 0x0, 0x0, 0x3a, 0xef, 0xfd, 0x81, 0x0,
/* U+54 "T" */
- 0x6b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x98, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x8,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x80, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x8, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0x80, 0x0, 0x0,
+ 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0xbb,
+ 0xbb, 0xdf, 0xeb, 0xbb, 0xb7, 0x0, 0x0, 0x7,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x90,
+ 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0x90, 0x0, 0x0, 0x0,
+ 0x0, 0x7, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0x90, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x90, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x7f, 0x90, 0x0, 0x0, 0x0, 0x0,
+ 0x7, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f,
+ 0x90, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7f, 0x90, 0x0, 0x0,
/* U+55 "U" */
- 0x6b, 0x90, 0x0, 0x0, 0x0, 0x9b, 0x38, 0xfc,
- 0x0, 0x0, 0x0, 0xc, 0xf4, 0x8f, 0xc0, 0x0,
- 0x0, 0x0, 0xcf, 0x48, 0xfc, 0x0, 0x0, 0x0,
- 0xc, 0xf4, 0x8f, 0xc0, 0x0, 0x0, 0x0, 0xcf,
- 0x48, 0xfc, 0x0, 0x0, 0x0, 0xc, 0xf4, 0x8f,
- 0xc0, 0x0, 0x0, 0x0, 0xcf, 0x48, 0xfc, 0x0,
- 0x0, 0x0, 0xc, 0xf4, 0x8f, 0xc0, 0x0, 0x0,
- 0x0, 0xcf, 0x48, 0xfc, 0x0, 0x0, 0x0, 0xc,
- 0xf4, 0x8f, 0xc0, 0x0, 0x0, 0x0, 0xcf, 0x44,
- 0xfc, 0x0, 0x0, 0x0, 0xe, 0xf4, 0x2f, 0xf2,
- 0x0, 0x0, 0x2, 0xff, 0x0, 0xbf, 0xa1, 0x0,
- 0x1, 0xcf, 0xa0, 0x1, 0xef, 0xd8, 0x79, 0xef,
- 0xd1, 0x0, 0x1, 0x8f, 0xff, 0xff, 0x70, 0x0,
- 0x0, 0x0, 0x1, 0x40, 0x0, 0x0, 0x0,
+ 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80,
+ 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80, 0x0, 0x0,
+ 0x4, 0xfd, 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd,
+ 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80,
+ 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80, 0x0, 0x0,
+ 0x4, 0xfd, 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd,
+ 0x8f, 0x80, 0x0, 0x0, 0x4, 0xfd, 0x8f, 0x80,
+ 0x0, 0x0, 0x4, 0xfd, 0x7f, 0x80, 0x0, 0x0,
+ 0x4, 0xfd, 0x6f, 0xa0, 0x0, 0x0, 0x5, 0xfc,
+ 0x3f, 0xe0, 0x0, 0x0, 0xa, 0xf8, 0xc, 0xfb,
+ 0x10, 0x0, 0x7f, 0xf1, 0x2, 0xdf, 0xfc, 0xce,
+ 0xff, 0x40, 0x0, 0x7, 0xcf, 0xfd, 0x92, 0x0,
/* U+56 "V" */
- 0x8b, 0x70, 0x0, 0x0, 0x0, 0x8, 0xb7, 0x6f,
- 0xe0, 0x0, 0x0, 0x0, 0x1f, 0xf4, 0xf, 0xf5,
- 0x0, 0x0, 0x0, 0x6f, 0xe0, 0xa, 0xfa, 0x0,
- 0x0, 0x0, 0xbf, 0x80, 0x3, 0xfe, 0x0, 0x0,
- 0x1, 0xff, 0x20, 0x0, 0xef, 0x60, 0x0, 0x6,
- 0xfc, 0x0, 0x0, 0x7f, 0xb0, 0x0, 0xd, 0xf6,
- 0x0, 0x0, 0x2f, 0xf1, 0x0, 0x2f, 0xf1, 0x0,
- 0x0, 0xc, 0xf6, 0x0, 0x7f, 0xa0, 0x0, 0x0,
- 0x6, 0xfb, 0x0, 0xdf, 0x50, 0x0, 0x0, 0x1,
- 0xff, 0x23, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0x79, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xcd,
- 0xf2, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xd0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0xff, 0x10, 0x0, 0x0,
+ 0x8f, 0xb0, 0x0, 0x0, 0x0, 0xb, 0xf8, 0x2f,
+ 0xf1, 0x0, 0x0, 0x0, 0x1f, 0xf2, 0xc, 0xf6,
+ 0x0, 0x0, 0x0, 0x6f, 0xc0, 0x6, 0xfb, 0x0,
+ 0x0, 0x0, 0xbf, 0x70, 0x1, 0xff, 0x10, 0x0,
+ 0x1, 0xff, 0x10, 0x0, 0xbf, 0x60, 0x0, 0x6,
+ 0xfb, 0x0, 0x0, 0x5f, 0xc0, 0x0, 0xc, 0xf5,
+ 0x0, 0x0, 0xf, 0xf1, 0x0, 0x1f, 0xf0, 0x0,
+ 0x0, 0xa, 0xf7, 0x0, 0x7f, 0xa0, 0x0, 0x0,
+ 0x4, 0xfc, 0x0, 0xcf, 0x40, 0x0, 0x0, 0x0,
+ 0xef, 0x22, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x8f,
+ 0x77, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xcc,
+ 0xf3, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xd0,
+ 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x70, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xff, 0x10, 0x0, 0x0,
/* U+57 "W" */
- 0x6b, 0x90, 0x0, 0x0, 0x8b, 0x70, 0x0, 0x0,
- 0x9b, 0x65, 0xfe, 0x0, 0x0, 0xe, 0xfc, 0x0,
- 0x0, 0xf, 0xf4, 0x2f, 0xf3, 0x0, 0x2, 0xff,
- 0xf1, 0x0, 0x4, 0xff, 0x0, 0xef, 0x60, 0x0,
- 0x7f, 0xff, 0x60, 0x0, 0x7f, 0xd0, 0xa, 0xfa,
- 0x0, 0xb, 0xfb, 0xfa, 0x0, 0xb, 0xf9, 0x0,
- 0x6f, 0xc0, 0x0, 0xff, 0x4f, 0xd0, 0x0, 0xef,
- 0x50, 0x2, 0xff, 0x10, 0x4f, 0xe0, 0xef, 0x30,
- 0x1f, 0xf1, 0x0, 0xe, 0xf4, 0x8, 0xf9, 0x9,
- 0xf7, 0x5, 0xfd, 0x0, 0x0, 0xaf, 0x80, 0xdf,
- 0x40, 0x5f, 0xc0, 0x8f, 0x90, 0x0, 0x6, 0xfc,
- 0x1f, 0xf0, 0x0, 0xff, 0xc, 0xf5, 0x0, 0x0,
- 0x3f, 0xe5, 0xfb, 0x0, 0xb, 0xf4, 0xff, 0x20,
- 0x0, 0x0, 0xff, 0x9f, 0x60, 0x0, 0x7f, 0xaf,
- 0xe0, 0x0, 0x0, 0xb, 0xfe, 0xf1, 0x0, 0x2,
- 0xfd, 0xfa, 0x0, 0x0, 0x0, 0x7f, 0xfd, 0x0,
- 0x0, 0xe, 0xff, 0x60, 0x0, 0x0, 0x3, 0xff,
- 0x80, 0x0, 0x0, 0x9f, 0xf2, 0x0, 0x0, 0x0,
- 0xf, 0xf3, 0x0, 0x0, 0x5, 0xfe, 0x0, 0x0,
+ 0x3f, 0xd0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0,
+ 0x2f, 0xe0, 0xf, 0xf0, 0x0, 0x0, 0x6f, 0xf2,
+ 0x0, 0x0, 0x5f, 0xb0, 0xc, 0xf4, 0x0, 0x0,
+ 0xaf, 0xf7, 0x0, 0x0, 0x9f, 0x70, 0x8, 0xf8,
+ 0x0, 0x0, 0xed, 0xfb, 0x0, 0x0, 0xcf, 0x30,
+ 0x4, 0xfb, 0x0, 0x3, 0xf9, 0xcf, 0x0, 0x0,
+ 0xff, 0x0, 0x0, 0xff, 0x0, 0x7, 0xf5, 0x8f,
+ 0x30, 0x4, 0xfb, 0x0, 0x0, 0xcf, 0x20, 0xc,
+ 0xf0, 0x4f, 0x80, 0x7, 0xf8, 0x0, 0x0, 0x9f,
+ 0x60, 0x1f, 0xb0, 0xf, 0xc0, 0xb, 0xf4, 0x0,
+ 0x0, 0x5f, 0xa0, 0x5f, 0x70, 0xb, 0xf1, 0xe,
+ 0xf0, 0x0, 0x0, 0x1f, 0xd0, 0x9f, 0x20, 0x6,
+ 0xf5, 0x2f, 0xc0, 0x0, 0x0, 0xd, 0xf1, 0xee,
+ 0x0, 0x2, 0xf9, 0x5f, 0x80, 0x0, 0x0, 0xa,
+ 0xf6, 0xf9, 0x0, 0x0, 0xdd, 0x8f, 0x50, 0x0,
+ 0x0, 0x6, 0xfc, 0xf5, 0x0, 0x0, 0x9f, 0xcf,
+ 0x10, 0x0, 0x0, 0x2, 0xff, 0xf0, 0x0, 0x0,
+ 0x5f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xef, 0xb0,
+ 0x0, 0x0, 0xf, 0xf9, 0x0, 0x0, 0x0, 0x0,
+ 0xaf, 0x70, 0x0, 0x0, 0xc, 0xf5, 0x0, 0x0,
/* U+58 "X" */
- 0x1b, 0xb6, 0x0, 0x0, 0x0, 0x6b, 0xb1, 0x8,
- 0xfe, 0x10, 0x0, 0x1, 0xef, 0x80, 0x0, 0xdf,
- 0xa0, 0x0, 0xa, 0xfd, 0x0, 0x0, 0x3f, 0xf4,
- 0x0, 0x4f, 0xf3, 0x0, 0x0, 0x8, 0xfc, 0x0,
- 0xdf, 0x80, 0x0, 0x0, 0x1, 0xef, 0x77, 0xfe,
- 0x10, 0x0, 0x0, 0x0, 0x4f, 0xee, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x9, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x2e, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0x98, 0xfb, 0x0, 0x0, 0x0, 0x7, 0xff,
- 0x11, 0xef, 0x70, 0x0, 0x0, 0x2e, 0xf6, 0x0,
- 0x5f, 0xe2, 0x0, 0x0, 0xbf, 0xc0, 0x0, 0xc,
- 0xfa, 0x0, 0x5, 0xff, 0x30, 0x0, 0x2, 0xff,
- 0x50, 0x1e, 0xf9, 0x0, 0x0, 0x0, 0x8f, 0xe1,
+ 0xe, 0xf7, 0x0, 0x0, 0x0, 0xaf, 0xc0, 0x5,
+ 0xff, 0x10, 0x0, 0x4, 0xff, 0x20, 0x0, 0xbf,
+ 0xb0, 0x0, 0xd, 0xf8, 0x0, 0x0, 0x2f, 0xf5,
+ 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x7, 0xfe, 0x2,
+ 0xff, 0x40, 0x0, 0x0, 0x0, 0xdf, 0x9b, 0xfa,
+ 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf1, 0x0,
+ 0x0, 0x0, 0x0, 0x9, 0xff, 0x60, 0x0, 0x0,
+ 0x0, 0x0, 0xa, 0xff, 0x80, 0x0, 0x0, 0x0,
+ 0x0, 0x4f, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0x7a, 0xfc, 0x0, 0x0, 0x0, 0x8, 0xfd,
+ 0x1, 0xef, 0x60, 0x0, 0x0, 0x3f, 0xf3, 0x0,
+ 0x6f, 0xe1, 0x0, 0x0, 0xcf, 0x90, 0x0, 0xc,
+ 0xfa, 0x0, 0x7, 0xfe, 0x10, 0x0, 0x2, 0xff,
+ 0x40, 0x1f, 0xf5, 0x0, 0x0, 0x0, 0x8f, 0xd0,
/* U+59 "Y" */
- 0x5b, 0xa0, 0x0, 0x0, 0x0, 0x1b, 0xb4, 0x1f,
- 0xf6, 0x0, 0x0, 0x0, 0xaf, 0xc0, 0x6, 0xfe,
- 0x10, 0x0, 0x2, 0xff, 0x40, 0x0, 0xef, 0x80,
- 0x0, 0xa, 0xfc, 0x0, 0x0, 0x6f, 0xe1, 0x0,
- 0x2f, 0xf3, 0x0, 0x0, 0xc, 0xf8, 0x0, 0xaf,
- 0xa0, 0x0, 0x0, 0x4, 0xfe, 0x12, 0xff, 0x20,
- 0x0, 0x0, 0x0, 0xcf, 0x8a, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x2f, 0xef, 0xf1, 0x0, 0x0, 0x0,
- 0x0, 0xa, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0, 0x0,
+ 0x9f, 0xc0, 0x0, 0x0, 0x0, 0x9f, 0xb0, 0x1f,
+ 0xf4, 0x0, 0x0, 0x1, 0xff, 0x30, 0x8, 0xfc,
+ 0x0, 0x0, 0x9, 0xfa, 0x0, 0x0, 0xef, 0x40,
+ 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x6f, 0xd0, 0x0,
+ 0xaf, 0x90, 0x0, 0x0, 0xd, 0xf5, 0x2, 0xff,
+ 0x10, 0x0, 0x0, 0x5, 0xfd, 0xa, 0xf8, 0x0,
+ 0x0, 0x0, 0x0, 0xcf, 0x8f, 0xe0, 0x0, 0x0,
+ 0x0, 0x0, 0x4f, 0xff, 0x60, 0x0, 0x0, 0x0,
+ 0x0, 0xb, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x7, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xf9, 0x0, 0x0, 0x0,
/* U+5A "Z" */
- 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0x90, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1,
- 0xdf, 0x70, 0x0, 0x0, 0x0, 0x9, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xf2, 0x0, 0x0, 0x0,
- 0x1, 0xdf, 0x50, 0x0, 0x0, 0x0, 0x9, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf1, 0x0, 0x0,
- 0x0, 0x1, 0xdf, 0x50, 0x0, 0x0, 0x0, 0xb,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf1, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0x50, 0x0, 0x0, 0x0,
- 0xb, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf1,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xdb, 0xbb, 0xbb,
- 0xbb, 0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xab,
+ 0xbb, 0xbb, 0xbb, 0xef, 0xe0, 0x0, 0x0, 0x0,
+ 0x0, 0x1e, 0xf5, 0x0, 0x0, 0x0, 0x0, 0xb,
+ 0xfa, 0x0, 0x0, 0x0, 0x0, 0x6, 0xfe, 0x10,
+ 0x0, 0x0, 0x0, 0x1, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0,
+ 0x6f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf4,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x6, 0xfd, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0xcf,
+ 0x90, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xd0, 0x0,
+ 0x0, 0x0, 0x0, 0xf, 0xfd, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0x31, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5,
/* U+5B "[" */
- 0x6b, 0xbb, 0x98, 0xff, 0xc9, 0x8f, 0xc0, 0x8,
- 0xfc, 0x0, 0x8f, 0xc0, 0x8, 0xfc, 0x0, 0x8f,
- 0xc0, 0x8, 0xfc, 0x0, 0x8f, 0xc0, 0x8, 0xfc,
- 0x0, 0x8f, 0xc0, 0x8, 0xfc, 0x0, 0x8f, 0xc0,
- 0x8, 0xfc, 0x0, 0x8f, 0xc0, 0x8, 0xfc, 0x0,
- 0x8f, 0xc0, 0x8, 0xfc, 0x0, 0x8f, 0xc0, 0x8,
- 0xfc, 0x33, 0x8f, 0xff, 0xc2, 0x44, 0x43,
+ 0x4a, 0xaa, 0x67, 0xff, 0xfa, 0x7f, 0x90, 0x7,
+ 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f,
+ 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9,
+ 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90,
+ 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0,
+ 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7,
+ 0xf9, 0x0, 0x7f, 0xda, 0x67, 0xff, 0xfa,
/* U+5C "\\" */
- 0x6b, 0x60, 0x0, 0x0, 0x2, 0xfd, 0x0, 0x0,
- 0x0, 0xc, 0xf4, 0x0, 0x0, 0x0, 0x6f, 0xa0,
- 0x0, 0x0, 0x1, 0xfe, 0x10, 0x0, 0x0, 0xa,
- 0xf6, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0,
- 0x0, 0xef, 0x20, 0x0, 0x0, 0x7, 0xf9, 0x0,
- 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0xbf,
- 0x50, 0x0, 0x0, 0x5, 0xfb, 0x0, 0x0, 0x0,
- 0xe, 0xf2, 0x0, 0x0, 0x0, 0x9f, 0x70, 0x0,
- 0x0, 0x2, 0xfd, 0x0, 0x0, 0x0, 0xc, 0xf4,
- 0x0, 0x0, 0x0, 0x6f, 0xa0, 0x0, 0x0, 0x1,
- 0x43,
+ 0x5f, 0x80, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0,
+ 0x0, 0x9, 0xf4, 0x0, 0x0, 0x0, 0x3f, 0xa0,
+ 0x0, 0x0, 0x0, 0xdf, 0x10, 0x0, 0x0, 0x7,
+ 0xf7, 0x0, 0x0, 0x0, 0x1f, 0xd0, 0x0, 0x0,
+ 0x0, 0xaf, 0x30, 0x0, 0x0, 0x4, 0xf9, 0x0,
+ 0x0, 0x0, 0xe, 0xf0, 0x0, 0x0, 0x0, 0x8f,
+ 0x50, 0x0, 0x0, 0x2, 0xfb, 0x0, 0x0, 0x0,
+ 0xc, 0xf2, 0x0, 0x0, 0x0, 0x6f, 0x80, 0x0,
+ 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x9, 0xf4,
+ 0x0, 0x0, 0x0, 0x3f, 0xa0,
/* U+5D "]" */
- 0x9b, 0xbb, 0x39, 0xcf, 0xf4, 0x0, 0xcf, 0x40,
- 0xc, 0xf4, 0x0, 0xcf, 0x40, 0xc, 0xf4, 0x0,
- 0xcf, 0x40, 0xc, 0xf4, 0x0, 0xcf, 0x40, 0xc,
- 0xf4, 0x0, 0xcf, 0x40, 0xc, 0xf4, 0x0, 0xcf,
- 0x40, 0xc, 0xf4, 0x0, 0xcf, 0x40, 0xc, 0xf4,
- 0x0, 0xcf, 0x40, 0xc, 0xf4, 0x0, 0xcf, 0x43,
- 0x3c, 0xf4, 0xcf, 0xff, 0x43, 0x44, 0x41,
+ 0x9a, 0xaa, 0x1e, 0xff, 0xf2, 0x0, 0xdf, 0x20,
+ 0xd, 0xf2, 0x0, 0xdf, 0x20, 0xd, 0xf2, 0x0,
+ 0xdf, 0x20, 0xd, 0xf2, 0x0, 0xdf, 0x20, 0xd,
+ 0xf2, 0x0, 0xdf, 0x20, 0xd, 0xf2, 0x0, 0xdf,
+ 0x20, 0xd, 0xf2, 0x0, 0xdf, 0x20, 0xd, 0xf2,
+ 0x0, 0xdf, 0x20, 0xd, 0xf2, 0x0, 0xdf, 0x20,
+ 0xd, 0xf2, 0x9a, 0xff, 0x2e, 0xff, 0xf2,
/* U+5E "^" */
- 0x0, 0x3, 0xb5, 0x0, 0x0, 0x0, 0xaf, 0xb0,
- 0x0, 0x0, 0x1e, 0xff, 0x30, 0x0, 0x6, 0xfb,
- 0xfa, 0x0, 0x0, 0xef, 0x1e, 0xe1, 0x0, 0x4f,
- 0xa0, 0x8f, 0x60, 0xa, 0xf5, 0x2, 0xfd, 0x1,
- 0xfe, 0x0, 0xb, 0xf4, 0x14, 0x30, 0x0, 0x24,
- 0x20,
+ 0x0, 0x4, 0xf7, 0x0, 0x0, 0x0, 0xbf, 0xd0,
+ 0x0, 0x0, 0x1f, 0xff, 0x40, 0x0, 0x8, 0xf6,
+ 0xfa, 0x0, 0x0, 0xee, 0xb, 0xf1, 0x0, 0x4f,
+ 0x80, 0x5f, 0x70, 0xb, 0xf1, 0x0, 0xed, 0x1,
+ 0xfb, 0x0, 0x9, 0xf4,
/* U+5F "_" */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xaa, 0xaa,
- 0xaa, 0xa9,
+ 0x9a, 0xaa, 0xaa, 0xaa, 0xa9, 0xff, 0xff, 0xff,
+ 0xff, 0xfe,
/* U+60 "`" */
- 0x43, 0x20, 0x6, 0xfd, 0x10, 0x6, 0xf9, 0x0,
- 0x5, 0x81,
+ 0x1d, 0xf5, 0x0, 0x1, 0xef, 0x10, 0x0, 0x2e,
+ 0xb0,
/* U+61 "a" */
- 0x0, 0x28, 0xbb, 0xa4, 0x0, 0x6, 0xff, 0xfe,
- 0xff, 0x90, 0x1e, 0xf5, 0x0, 0x4f, 0xf3, 0x28,
- 0x60, 0x0, 0xb, 0xf8, 0x0, 0x0, 0x0, 0x8,
- 0xf8, 0x0, 0x69, 0xbb, 0xbd, 0xf8, 0x1c, 0xff,
- 0xcc, 0xce, 0xf8, 0x9f, 0xd1, 0x0, 0x8, 0xf8,
- 0xcf, 0x50, 0x0, 0xa, 0xf8, 0xcf, 0x70, 0x0,
- 0x6f, 0xf8, 0x7f, 0xf9, 0x8c, 0xfb, 0xf9, 0x8,
- 0xff, 0xfe, 0x47, 0xfc, 0x0, 0x3, 0x20, 0x0,
- 0x0,
+ 0x0, 0x5c, 0xfe, 0xc5, 0x0, 0xa, 0xfe, 0xbb,
+ 0xff, 0x90, 0x5f, 0xc0, 0x0, 0x2f, 0xf2, 0x48,
+ 0x30, 0x0, 0xb, 0xf5, 0x0, 0x0, 0x1, 0x1a,
+ 0xf5, 0x1, 0x9e, 0xff, 0xff, 0xf5, 0x2e, 0xfa,
+ 0x65, 0x4b, 0xf5, 0xaf, 0x70, 0x0, 0xa, 0xf5,
+ 0xcf, 0x30, 0x0, 0xb, 0xf5, 0xaf, 0x90, 0x0,
+ 0x7f, 0xf6, 0x2f, 0xfe, 0xce, 0xfd, 0xf7, 0x2,
+ 0xbf, 0xfc, 0x45, 0xc8,
/* U+62 "b" */
- 0x6b, 0x90, 0x0, 0x0, 0x0, 0x8, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x0, 0x0,
- 0x8, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xc0,
- 0x0, 0x0, 0x0, 0x8, 0xfc, 0x29, 0xbb, 0x61,
- 0x0, 0x8f, 0xde, 0xff, 0xff, 0xc1, 0x8, 0xff,
- 0xa1, 0x3, 0xff, 0x90, 0x8f, 0xd0, 0x0, 0x4,
- 0xfe, 0x18, 0xfc, 0x0, 0x0, 0xe, 0xf4, 0x8f,
- 0xc0, 0x0, 0x0, 0xcf, 0x68, 0xfc, 0x0, 0x0,
- 0xc, 0xf8, 0x8f, 0xc0, 0x0, 0x0, 0xcf, 0x58,
- 0xfc, 0x0, 0x0, 0x1e, 0xf4, 0x8f, 0xf3, 0x0,
- 0x8, 0xfe, 0x8, 0xfe, 0xf9, 0x7c, 0xff, 0x50,
- 0x8f, 0x48, 0xff, 0xfe, 0x50, 0x0, 0x0, 0x0,
- 0x42, 0x0, 0x0,
+ 0x8f, 0x70, 0x0, 0x0, 0x0, 0x8, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x8f, 0x70, 0x0, 0x0, 0x0,
+ 0x8, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x75,
+ 0xcf, 0xea, 0x10, 0x8, 0xfd, 0xfd, 0xce, 0xfe,
+ 0x10, 0x8f, 0xf5, 0x0, 0xc, 0xfa, 0x8, 0xf9,
+ 0x0, 0x0, 0x2f, 0xf0, 0x8f, 0x70, 0x0, 0x0,
+ 0xcf, 0x38, 0xf7, 0x0, 0x0, 0xa, 0xf5, 0x8f,
+ 0x70, 0x0, 0x0, 0xaf, 0x58, 0xf7, 0x0, 0x0,
+ 0xc, 0xf3, 0x8f, 0x90, 0x0, 0x2, 0xff, 0x8,
+ 0xff, 0x50, 0x0, 0xcf, 0xa0, 0x8f, 0xdf, 0xdb,
+ 0xef, 0xe1, 0x8, 0xf5, 0x5c, 0xfe, 0xa1, 0x0,
/* U+63 "c" */
- 0x0, 0x27, 0xbb, 0x93, 0x0, 0x4, 0xef, 0xfe,
- 0xff, 0x60, 0x1e, 0xf6, 0x0, 0x5f, 0xe2, 0x8f,
- 0xb0, 0x0, 0x9, 0xf6, 0xcf, 0x50, 0x0, 0x4,
- 0x84, 0xef, 0x40, 0x0, 0x0, 0x0, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0xcf, 0x40, 0x0, 0x0, 0x0,
- 0xbf, 0x90, 0x0, 0x6, 0xb6, 0x3f, 0xd3, 0x0,
- 0xd, 0xf5, 0x9, 0xfe, 0x87, 0xcf, 0xb0, 0x0,
- 0x7f, 0xff, 0xf8, 0x10, 0x0, 0x0, 0x13, 0x0,
- 0x0,
+ 0x0, 0x4, 0xbe, 0xfc, 0x50, 0x0, 0x7, 0xff,
+ 0xbb, 0xff, 0xa0, 0x3, 0xfe, 0x30, 0x1, 0xdf,
+ 0x50, 0xaf, 0x70, 0x0, 0x4, 0xfa, 0xe, 0xf1,
+ 0x0, 0x0, 0x3, 0x20, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xef,
+ 0x10, 0x0, 0x0, 0x0, 0xa, 0xf6, 0x0, 0x0,
+ 0x3e, 0x90, 0x3f, 0xe2, 0x0, 0x1c, 0xf5, 0x0,
+ 0x7f, 0xfb, 0xbe, 0xf9, 0x0, 0x0, 0x4b, 0xff,
+ 0xc5, 0x0,
/* U+64 "d" */
- 0x0, 0x0, 0x0, 0x3, 0xbb, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0x0, 0x0, 0x0, 0x4, 0xff, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0x0, 0x48, 0xbb, 0x54, 0xff, 0x6, 0xff,
- 0xff, 0xfc, 0xff, 0x1e, 0xfa, 0x0, 0x4f, 0xff,
- 0x8f, 0xc0, 0x0, 0x5, 0xff, 0xcf, 0x60, 0x0,
- 0x4, 0xff, 0xdf, 0x40, 0x0, 0x4, 0xff, 0xff,
- 0x40, 0x0, 0x4, 0xff, 0xdf, 0x40, 0x0, 0x4,
- 0xff, 0xcf, 0x80, 0x0, 0x4, 0xff, 0x6f, 0xd2,
- 0x0, 0xb, 0xff, 0xd, 0xfe, 0x97, 0xde, 0xff,
- 0x1, 0xaf, 0xff, 0xc3, 0xef, 0x0, 0x0, 0x32,
- 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0xfd, 0x0, 0x0, 0x0,
+ 0x2, 0xfd, 0x0, 0x0, 0x0, 0x2, 0xfd, 0x0,
+ 0x0, 0x0, 0x2, 0xfd, 0x0, 0x6d, 0xfe, 0x93,
+ 0xfd, 0x9, 0xff, 0xcc, 0xfe, 0xfd, 0x3f, 0xf4,
+ 0x0, 0x1c, 0xfd, 0xaf, 0x80, 0x0, 0x3, 0xfd,
+ 0xdf, 0x30, 0x0, 0x2, 0xfd, 0xff, 0x10, 0x0,
+ 0x2, 0xfd, 0xff, 0x0, 0x0, 0x2, 0xfd, 0xdf,
+ 0x20, 0x0, 0x2, 0xfd, 0xaf, 0x60, 0x0, 0x2,
+ 0xfd, 0x3f, 0xe1, 0x0, 0xa, 0xfd, 0x9, 0xfe,
+ 0x98, 0xdf, 0xfd, 0x0, 0x6d, 0xfe, 0xa2, 0xfd,
/* U+65 "e" */
- 0x0, 0x17, 0xbb, 0x83, 0x0, 0x3, 0xef, 0xff,
- 0xfe, 0x60, 0x1d, 0xf7, 0x0, 0x5f, 0xe1, 0x8f,
- 0xb0, 0x0, 0xa, 0xf7, 0xcf, 0x60, 0x0, 0x8,
- 0xf8, 0xef, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xa8,
- 0x88, 0x88, 0x86, 0xcf, 0x50, 0x0, 0x0, 0x0,
- 0xaf, 0xa0, 0x0, 0x0, 0x0, 0x3f, 0xe3, 0x0,
- 0x0, 0x20, 0x8, 0xfe, 0x97, 0x7b, 0xf1, 0x0,
- 0x5e, 0xff, 0xff, 0xa1, 0x0, 0x0, 0x4, 0x40,
- 0x0,
+ 0x0, 0x3b, 0xef, 0xc5, 0x0, 0x5, 0xff, 0xcb,
+ 0xff, 0x80, 0x2f, 0xf3, 0x0, 0x2e, 0xf3, 0x9f,
+ 0x70, 0x0, 0x6, 0xf8, 0xdf, 0x20, 0x0, 0x2,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xaa,
+ 0xaa, 0xaa, 0xa9, 0xef, 0x20, 0x0, 0x0, 0x0,
+ 0xaf, 0x70, 0x0, 0x0, 0x0, 0x3f, 0xf4, 0x0,
+ 0x4, 0xe5, 0x7, 0xff, 0xca, 0xcf, 0xe2, 0x0,
+ 0x4b, 0xef, 0xd9, 0x10,
/* U+66 "f" */
- 0x0, 0x4, 0xbe, 0xe3, 0x0, 0x3f, 0xfd, 0xc3,
- 0x0, 0xbf, 0xb0, 0x0, 0x0, 0xcf, 0x40, 0x0,
- 0x0, 0xcf, 0x40, 0x0, 0x67, 0xdf, 0x97, 0x20,
- 0xcf, 0xff, 0xff, 0x40, 0x0, 0xcf, 0x40, 0x0,
- 0x0, 0xcf, 0x40, 0x0, 0x0, 0xcf, 0x40, 0x0,
- 0x0, 0xcf, 0x40, 0x0, 0x0, 0xcf, 0x40, 0x0,
- 0x0, 0xcf, 0x40, 0x0, 0x0, 0xcf, 0x40, 0x0,
- 0x0, 0xcf, 0x40, 0x0, 0x0, 0xcf, 0x40, 0x0,
- 0x0, 0xcf, 0x40, 0x0,
+ 0x0, 0x1, 0x9d, 0xf8, 0x0, 0xc, 0xfe, 0xc7,
+ 0x0, 0x5f, 0xd0, 0x0, 0x0, 0x7f, 0x80, 0x0,
+ 0x0, 0x8f, 0x70, 0x0, 0x5f, 0xff, 0xff, 0xf0,
+ 0x39, 0xcf, 0xc9, 0x80, 0x0, 0x8f, 0x70, 0x0,
+ 0x0, 0x8f, 0x70, 0x0, 0x0, 0x8f, 0x70, 0x0,
+ 0x0, 0x8f, 0x70, 0x0, 0x0, 0x8f, 0x70, 0x0,
+ 0x0, 0x8f, 0x70, 0x0, 0x0, 0x8f, 0x70, 0x0,
+ 0x0, 0x8f, 0x70, 0x0, 0x0, 0x8f, 0x70, 0x0,
+ 0x0, 0x8f, 0x70, 0x0,
/* U+67 "g" */
- 0x0, 0x38, 0xbb, 0x60, 0x67, 0x4, 0xef, 0xff,
- 0xfa, 0xef, 0xe, 0xfa, 0x10, 0x2d, 0xff, 0x6f,
- 0xe0, 0x0, 0x2, 0xff, 0xaf, 0x90, 0x0, 0x0,
- 0xff, 0xcf, 0x60, 0x0, 0x0, 0xff, 0xcf, 0x40,
- 0x0, 0x0, 0xff, 0xcf, 0x60, 0x0, 0x0, 0xff,
- 0x9f, 0xa0, 0x0, 0x1, 0xff, 0x4f, 0xe3, 0x0,
- 0xa, 0xff, 0xc, 0xfe, 0x97, 0xbf, 0xff, 0x0,
- 0x9f, 0xff, 0xd3, 0xff, 0x0, 0x0, 0x33, 0x3,
- 0xff, 0x0, 0x0, 0x0, 0x6, 0xfc, 0x4, 0x83,
- 0x23, 0x5e, 0xf5, 0x8, 0xff, 0xff, 0xff, 0x90,
- 0x0, 0x58, 0xca, 0x83, 0x0,
+ 0x0, 0x6d, 0xfe, 0x91, 0xfd, 0x9, 0xff, 0xcc,
+ 0xfd, 0xfd, 0x3f, 0xf4, 0x0, 0x1c, 0xfd, 0xaf,
+ 0x80, 0x0, 0x3, 0xfd, 0xdf, 0x30, 0x0, 0x2,
+ 0xfd, 0xff, 0x10, 0x0, 0x2, 0xfd, 0xff, 0x10,
+ 0x0, 0x2, 0xfd, 0xdf, 0x20, 0x0, 0x2, 0xfd,
+ 0xaf, 0x80, 0x0, 0x3, 0xfd, 0x3f, 0xf4, 0x0,
+ 0x1c, 0xfd, 0x9, 0xff, 0xcc, 0xfe, 0xfd, 0x0,
+ 0x6d, 0xfe, 0x93, 0xfd, 0x0, 0x0, 0x0, 0x3,
+ 0xfc, 0x3, 0x0, 0x0, 0x7, 0xfa, 0x2f, 0x90,
+ 0x0, 0x3f, 0xf4, 0xc, 0xfe, 0xac, 0xff, 0x90,
+ 0x0, 0x6c, 0xff, 0xc5, 0x0,
/* U+68 "h" */
- 0x6b, 0x90, 0x0, 0x0, 0x0, 0x8f, 0xc0, 0x0,
- 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x0, 0x0, 0x8f,
- 0xc0, 0x0, 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x0,
- 0x0, 0x8f, 0xc1, 0x8b, 0xb8, 0x10, 0x8f, 0xdc,
- 0xff, 0xff, 0xe2, 0x8f, 0xf7, 0x0, 0x2d, 0xfa,
- 0x8f, 0xc0, 0x0, 0x5, 0xfc, 0x8f, 0xc0, 0x0,
- 0x2, 0xff, 0x8f, 0xc0, 0x0, 0x0, 0xff, 0x8f,
- 0xc0, 0x0, 0x0, 0xff, 0x8f, 0xc0, 0x0, 0x0,
- 0xff, 0x8f, 0xc0, 0x0, 0x0, 0xff, 0x8f, 0xc0,
- 0x0, 0x0, 0xff, 0x8f, 0xc0, 0x0, 0x0, 0xff,
- 0x8f, 0xc0, 0x0, 0x0, 0xff,
+ 0x8f, 0x70, 0x0, 0x0, 0x0, 0x8f, 0x70, 0x0,
+ 0x0, 0x0, 0x8f, 0x70, 0x0, 0x0, 0x0, 0x8f,
+ 0x70, 0x0, 0x0, 0x0, 0x8f, 0x74, 0xbf, 0xeb,
+ 0x20, 0x8f, 0xcf, 0xdc, 0xef, 0xe1, 0x8f, 0xf6,
+ 0x0, 0xd, 0xf6, 0x8f, 0x90, 0x0, 0x7, 0xf9,
+ 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0,
+ 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f,
+ 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5,
+ 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70,
+ 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa,
/* U+69 "i" */
- 0x3b, 0x94, 0xfc, 0x28, 0x60, 0x0, 0x0, 0x2,
- 0x76, 0x4f, 0xc4, 0xfc, 0x4f, 0xc4, 0xfc, 0x4f,
- 0xc4, 0xfc, 0x4f, 0xc4, 0xfc, 0x4f, 0xc4, 0xfc,
- 0x4f, 0xc0,
+ 0x3f, 0x96, 0xfc, 0x4, 0x10, 0x0, 0x5f, 0xa5,
+ 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f,
+ 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa,
/* U+6A "j" */
- 0x0, 0x3b, 0xb0, 0x4, 0xff, 0x0, 0x14, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x77, 0x0,
- 0x4f, 0xf0, 0x4, 0xff, 0x0, 0x4f, 0xf0, 0x4,
- 0xff, 0x0, 0x4f, 0xf0, 0x4, 0xff, 0x0, 0x4f,
- 0xf0, 0x4, 0xff, 0x0, 0x4f, 0xf0, 0x4, 0xff,
- 0x0, 0x4f, 0xf0, 0x4, 0xff, 0x0, 0x4f, 0xe0,
- 0x19, 0xfb, 0xaf, 0xff, 0x37, 0xb8, 0x20,
+ 0x0, 0x6f, 0x60, 0x8, 0xf9, 0x0, 0x4, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0,
+ 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7,
+ 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9, 0x0, 0x7f,
+ 0x90, 0x7, 0xf9, 0x0, 0x7f, 0x90, 0x7, 0xf9,
+ 0x0, 0x7f, 0x90, 0x7, 0xf8, 0x0, 0x9f, 0x78,
+ 0xcf, 0xf2, 0xaf, 0xd5, 0x0,
/* U+6B "k" */
- 0x6b, 0x90, 0x0, 0x0, 0x0, 0x8f, 0xc0, 0x0,
- 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x0, 0x0, 0x8f,
- 0xc0, 0x0, 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x0,
- 0x0, 0x8f, 0xc0, 0x0, 0x17, 0x73, 0x8f, 0xc0,
- 0x0, 0x9f, 0xd1, 0x8f, 0xc0, 0x5, 0xff, 0x30,
- 0x8f, 0xc0, 0x1e, 0xf6, 0x0, 0x8f, 0xc0, 0xcf,
- 0xa0, 0x0, 0x8f, 0xff, 0xfe, 0x10, 0x0, 0x8f,
- 0xfc, 0xff, 0x40, 0x0, 0x8f, 0xc0, 0x7f, 0xe1,
- 0x0, 0x8f, 0xc0, 0xc, 0xfa, 0x0, 0x8f, 0xc0,
- 0x2, 0xff, 0x60, 0x8f, 0xc0, 0x0, 0x7f, 0xe2,
- 0x8f, 0xc0, 0x0, 0xc, 0xfb,
+ 0x7f, 0x80, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0,
+ 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80,
+ 0x0, 0x4f, 0xf3, 0x7, 0xf8, 0x0, 0x3f, 0xf4,
+ 0x0, 0x7f, 0x80, 0x2e, 0xf5, 0x0, 0x7, 0xf8,
+ 0x2e, 0xf7, 0x0, 0x0, 0x7f, 0x8d, 0xf8, 0x0,
+ 0x0, 0x7, 0xff, 0xff, 0x60, 0x0, 0x0, 0x7f,
+ 0xfc, 0xff, 0x20, 0x0, 0x7, 0xfc, 0x7, 0xfd,
+ 0x0, 0x0, 0x7f, 0x80, 0xc, 0xf9, 0x0, 0x7,
+ 0xf8, 0x0, 0x1e, 0xf5, 0x0, 0x7f, 0x80, 0x0,
+ 0x4f, 0xe1, 0x7, 0xf8, 0x0, 0x0, 0x9f, 0xc0,
/* U+6C "l" */
- 0x3c, 0xa4, 0xfd, 0x4f, 0xd4, 0xfd, 0x4f, 0xd4,
- 0xfd, 0x4f, 0xd4, 0xfd, 0x4f, 0xd4, 0xfd, 0x4f,
- 0xd4, 0xfd, 0x4f, 0xd4, 0xfd, 0x4f, 0xd4, 0xfd,
- 0x4f, 0xd0,
+ 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5,
+ 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f,
+ 0xa5, 0xfa, 0x5f, 0xa5, 0xfa, 0x5f, 0xa5, 0xfa,
/* U+6D "m" */
- 0x47, 0x41, 0x8b, 0xb8, 0x10, 0x29, 0xbb, 0x60,
- 0x8, 0xfb, 0xef, 0xff, 0xfc, 0x3e, 0xff, 0xff,
- 0xa0, 0x8f, 0xf7, 0x0, 0x5f, 0xfe, 0xa1, 0x4,
- 0xff, 0x48, 0xfc, 0x0, 0x0, 0xaf, 0xf1, 0x0,
- 0xa, 0xf8, 0x8f, 0xc0, 0x0, 0x8, 0xfc, 0x0,
- 0x0, 0x8f, 0xa8, 0xfc, 0x0, 0x0, 0x8f, 0xc0,
- 0x0, 0x8, 0xfc, 0x8f, 0xc0, 0x0, 0x8, 0xfc,
- 0x0, 0x0, 0x8f, 0xc8, 0xfc, 0x0, 0x0, 0x8f,
- 0xc0, 0x0, 0x8, 0xfc, 0x8f, 0xc0, 0x0, 0x8,
- 0xfc, 0x0, 0x0, 0x8f, 0xc8, 0xfc, 0x0, 0x0,
- 0x8f, 0xc0, 0x0, 0x8, 0xfc, 0x8f, 0xc0, 0x0,
- 0x8, 0xfc, 0x0, 0x0, 0x8f, 0xc8, 0xfc, 0x0,
- 0x0, 0x8f, 0xc0, 0x0, 0x8, 0xfc,
+ 0x8f, 0x65, 0xcf, 0xea, 0x10, 0x4c, 0xfe, 0xb3,
+ 0x8, 0xfd, 0xfc, 0xcf, 0xfe, 0x7f, 0xec, 0xef,
+ 0xf2, 0x8f, 0xf3, 0x0, 0x1e, 0xff, 0x70, 0x0,
+ 0xbf, 0x88, 0xf8, 0x0, 0x0, 0x7f, 0xd0, 0x0,
+ 0x4, 0xfb, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x0,
+ 0x0, 0x3f, 0xc8, 0xf7, 0x0, 0x0, 0x5f, 0xa0,
+ 0x0, 0x3, 0xfc, 0x8f, 0x70, 0x0, 0x5, 0xfa,
+ 0x0, 0x0, 0x3f, 0xc8, 0xf7, 0x0, 0x0, 0x5f,
+ 0xa0, 0x0, 0x3, 0xfc, 0x8f, 0x70, 0x0, 0x5,
+ 0xfa, 0x0, 0x0, 0x3f, 0xc8, 0xf7, 0x0, 0x0,
+ 0x5f, 0xa0, 0x0, 0x3, 0xfc, 0x8f, 0x70, 0x0,
+ 0x5, 0xfa, 0x0, 0x0, 0x3f, 0xc8, 0xf7, 0x0,
+ 0x0, 0x5f, 0xa0, 0x0, 0x3, 0xfc,
/* U+6E "n" */
- 0x47, 0x41, 0x7b, 0xb8, 0x10, 0x8f, 0x9c, 0xff,
- 0xff, 0xe2, 0x8f, 0xf7, 0x0, 0x2d, 0xfa, 0x8f,
- 0xc0, 0x0, 0x5, 0xfc, 0x8f, 0xc0, 0x0, 0x4,
- 0xff, 0x8f, 0xc0, 0x0, 0x4, 0xff, 0x8f, 0xc0,
- 0x0, 0x4, 0xff, 0x8f, 0xc0, 0x0, 0x4, 0xff,
- 0x8f, 0xc0, 0x0, 0x4, 0xff, 0x8f, 0xc0, 0x0,
- 0x4, 0xff, 0x8f, 0xc0, 0x0, 0x4, 0xff, 0x8f,
- 0xc0, 0x0, 0x4, 0xff,
+ 0x8f, 0x64, 0xbf, 0xeb, 0x20, 0x8f, 0xcf, 0xdc,
+ 0xef, 0xe1, 0x8f, 0xf6, 0x0, 0xd, 0xf6, 0x8f,
+ 0x90, 0x0, 0x7, 0xf9, 0x8f, 0x70, 0x0, 0x5,
+ 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70,
+ 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa,
+ 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f, 0x70, 0x0,
+ 0x5, 0xfa, 0x8f, 0x70, 0x0, 0x5, 0xfa, 0x8f,
+ 0x70, 0x0, 0x5, 0xfa,
/* U+6F "o" */
- 0x0, 0x17, 0xbb, 0x85, 0x0, 0x0, 0x3e, 0xff,
- 0xef, 0xf8, 0x0, 0x1d, 0xf9, 0x0, 0x3f, 0xf7,
- 0x8, 0xfc, 0x0, 0x0, 0x4f, 0xe1, 0xcf, 0x50,
- 0x0, 0x0, 0xef, 0x4e, 0xf4, 0x0, 0x0, 0xc,
- 0xf6, 0xff, 0x40, 0x0, 0x0, 0xcf, 0x7c, 0xf4,
- 0x0, 0x0, 0xc, 0xf4, 0xaf, 0x90, 0x0, 0x2,
- 0xff, 0x22, 0xfe, 0x30, 0x0, 0xaf, 0xa0, 0x9,
- 0xfe, 0x87, 0xbf, 0xf2, 0x0, 0x6, 0xef, 0xff,
- 0xb1, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xbe, 0xfd, 0x70, 0x0, 0x0, 0x6f,
+ 0xfc, 0xbe, 0xfd, 0x10, 0x2, 0xff, 0x50, 0x0,
+ 0xbf, 0xa0, 0x9, 0xf8, 0x0, 0x0, 0xf, 0xf2,
+ 0xd, 0xf2, 0x0, 0x0, 0x9, 0xf6, 0xf, 0xf0,
+ 0x0, 0x0, 0x7, 0xf8, 0xf, 0xf0, 0x0, 0x0,
+ 0x7, 0xf8, 0xe, 0xf2, 0x0, 0x0, 0x9, 0xf6,
+ 0x9, 0xf8, 0x0, 0x0, 0xe, 0xf2, 0x2, 0xff,
+ 0x40, 0x0, 0xaf, 0xb0, 0x0, 0x6f, 0xfc, 0xae,
+ 0xfd, 0x10, 0x0, 0x3, 0xbe, 0xfd, 0x80, 0x0,
/* U+70 "p" */
- 0x47, 0x22, 0x9b, 0xa6, 0x10, 0x8, 0xf9, 0xef,
- 0xff, 0xfc, 0x10, 0x8f, 0xf7, 0x0, 0x4f, 0xf8,
- 0x8, 0xfc, 0x0, 0x0, 0x5f, 0xe1, 0x8f, 0xc0,
- 0x0, 0x0, 0xef, 0x48, 0xfc, 0x0, 0x0, 0xc,
- 0xf4, 0x8f, 0xc0, 0x0, 0x0, 0xcf, 0x88, 0xfc,
- 0x0, 0x0, 0xc, 0xf4, 0x8f, 0xc0, 0x0, 0x1,
- 0xef, 0x48, 0xfe, 0x10, 0x0, 0x9f, 0xe0, 0x8f,
- 0xfe, 0x87, 0xbf, 0xf5, 0x8, 0xfc, 0x8f, 0xff,
- 0xe4, 0x0, 0x8f, 0xc0, 0x4, 0x20, 0x0, 0x8,
- 0xfc, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xc0, 0x0,
- 0x0, 0x0, 0x8, 0xfc, 0x0, 0x0, 0x0, 0x0,
- 0x48, 0x60, 0x0, 0x0, 0x0, 0x0,
+ 0x8f, 0x57, 0xdf, 0xea, 0x10, 0x8, 0xff, 0xe9,
+ 0x8d, 0xfe, 0x10, 0x8f, 0xd1, 0x0, 0xb, 0xfa,
+ 0x8, 0xf7, 0x0, 0x0, 0x2f, 0xf0, 0x8f, 0x70,
+ 0x0, 0x0, 0xdf, 0x38, 0xf7, 0x0, 0x0, 0xb,
+ 0xf4, 0x8f, 0x70, 0x0, 0x0, 0xbf, 0x48, 0xf7,
+ 0x0, 0x0, 0xd, 0xf3, 0x8f, 0x80, 0x0, 0x3,
+ 0xff, 0x8, 0xfe, 0x20, 0x1, 0xcf, 0x90, 0x8f,
+ 0xef, 0xba, 0xef, 0xe1, 0x8, 0xf7, 0x6d, 0xfe,
+ 0xa1, 0x0, 0x8f, 0x70, 0x0, 0x0, 0x0, 0x8,
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x70, 0x0,
+ 0x0, 0x0, 0x8, 0xf7, 0x0, 0x0, 0x0, 0x0,
+ 0x8f, 0x70, 0x0, 0x0, 0x0, 0x0,
/* U+71 "q" */
- 0x0, 0x48, 0xbb, 0x50, 0x86, 0x6, 0xff, 0xfe,
- 0xfa, 0xfc, 0x1e, 0xf7, 0x0, 0x3e, 0xfc, 0x8f,
- 0xc0, 0x0, 0x5, 0xfc, 0xcf, 0x60, 0x0, 0x4,
- 0xfc, 0xdf, 0x40, 0x0, 0x4, 0xfc, 0xff, 0x40,
- 0x0, 0x4, 0xfc, 0xdf, 0x40, 0x0, 0x4, 0xfc,
- 0xcf, 0x80, 0x0, 0x4, 0xfc, 0x6f, 0xd1, 0x0,
- 0xb, 0xfc, 0xd, 0xfd, 0x87, 0xbf, 0xfc, 0x1,
- 0xaf, 0xff, 0xc7, 0xfc, 0x0, 0x0, 0x32, 0x4,
- 0xfc, 0x0, 0x0, 0x0, 0x4, 0xfc, 0x0, 0x0,
- 0x0, 0x4, 0xfc, 0x0, 0x0, 0x0, 0x4, 0xfc,
- 0x0, 0x0, 0x0, 0x2, 0x86,
+ 0x0, 0x6d, 0xfe, 0x92, 0xfd, 0x9, 0xff, 0xcb,
+ 0xfe, 0xfd, 0x4f, 0xf4, 0x0, 0xb, 0xfd, 0xaf,
+ 0x80, 0x0, 0x2, 0xfd, 0xdf, 0x20, 0x0, 0x2,
+ 0xfd, 0xff, 0x0, 0x0, 0x2, 0xfd, 0xff, 0x0,
+ 0x0, 0x2, 0xfd, 0xdf, 0x20, 0x0, 0x2, 0xfd,
+ 0xaf, 0x70, 0x0, 0x3, 0xfd, 0x3f, 0xf3, 0x0,
+ 0xc, 0xfd, 0x9, 0xff, 0xba, 0xef, 0xfd, 0x0,
+ 0x6d, 0xfe, 0x94, 0xfd, 0x0, 0x0, 0x0, 0x2,
+ 0xfd, 0x0, 0x0, 0x0, 0x2, 0xfd, 0x0, 0x0,
+ 0x0, 0x2, 0xfd, 0x0, 0x0, 0x0, 0x2, 0xfd,
+ 0x0, 0x0, 0x0, 0x2, 0xfd,
/* U+72 "r" */
- 0x47, 0x42, 0x9b, 0x38, 0xf9, 0xef, 0xf2, 0x8f,
- 0xfb, 0x44, 0x8, 0xfd, 0x0, 0x0, 0x8f, 0xc0,
- 0x0, 0x8, 0xfc, 0x0, 0x0, 0x8f, 0xc0, 0x0,
- 0x8, 0xfc, 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x8,
- 0xfc, 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x8, 0xfc,
+ 0x8f, 0x78, 0xef, 0x18, 0xff, 0xfd, 0xc1, 0x8f,
+ 0xf3, 0x0, 0x8, 0xf8, 0x0, 0x0, 0x8f, 0x70,
+ 0x0, 0x8, 0xf7, 0x0, 0x0, 0x8f, 0x70, 0x0,
+ 0x8, 0xf7, 0x0, 0x0, 0x8f, 0x70, 0x0, 0x8,
+ 0xf7, 0x0, 0x0, 0x8f, 0x70, 0x0, 0x8, 0xf7,
0x0, 0x0,
/* U+73 "s" */
- 0x0, 0x4a, 0xbb, 0x82, 0x0, 0x9, 0xff, 0xef,
- 0xfe, 0x40, 0x3f, 0xf3, 0x0, 0x8f, 0xe0, 0x8f,
- 0xc0, 0x0, 0xb, 0xc2, 0x5f, 0xe4, 0x0, 0x0,
- 0x0, 0x9, 0xff, 0xd9, 0x40, 0x0, 0x0, 0x4a,
- 0xef, 0xfd, 0x30, 0x0, 0x0, 0x3, 0xaf, 0xe2,
- 0x67, 0x20, 0x0, 0xd, 0xf5, 0xaf, 0xa0, 0x0,
- 0x1d, 0xf4, 0x2f, 0xfb, 0x77, 0xdf, 0xd0, 0x2,
- 0xcf, 0xff, 0xfa, 0x10, 0x0, 0x0, 0x32, 0x0,
- 0x0,
+ 0x0, 0x7d, 0xfe, 0xb3, 0x0, 0xc, 0xfe, 0xbc,
+ 0xff, 0x50, 0x6f, 0xb0, 0x0, 0x6f, 0xe0, 0x8f,
+ 0x70, 0x0, 0x9, 0xa1, 0x5f, 0xe5, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xfc, 0x71, 0x0, 0x0, 0x16,
+ 0xae, 0xff, 0x50, 0x0, 0x0, 0x0, 0x6f, 0xf1,
+ 0xbc, 0x10, 0x0, 0xc, 0xf3, 0xbf, 0x90, 0x0,
+ 0x2f, 0xf1, 0x2e, 0xfe, 0xab, 0xff, 0x80, 0x1,
+ 0x9d, 0xfe, 0xb5, 0x0,
/* U+74 "t" */
- 0x0, 0x87, 0x20, 0x0, 0xf, 0xf4, 0x0, 0x0,
- 0xff, 0x40, 0x6, 0x7f, 0xf9, 0x74, 0xcf, 0xff,
- 0xff, 0x80, 0xf, 0xf4, 0x0, 0x0, 0xff, 0x40,
- 0x0, 0xf, 0xf4, 0x0, 0x0, 0xff, 0x40, 0x0,
- 0xf, 0xf4, 0x0, 0x0, 0xff, 0x40, 0x0, 0xf,
- 0xf4, 0x0, 0x0, 0xcf, 0x50, 0x0, 0xa, 0xfd,
- 0x72, 0x0, 0x2d, 0xff, 0x80, 0x0, 0x2, 0x30,
+ 0x0, 0xcf, 0x30, 0x0, 0xc, 0xf3, 0x0, 0x0,
+ 0xcf, 0x30, 0xe, 0xff, 0xff, 0xf6, 0x89, 0xef,
+ 0xa9, 0x30, 0xc, 0xf3, 0x0, 0x0, 0xcf, 0x30,
+ 0x0, 0xc, 0xf3, 0x0, 0x0, 0xcf, 0x30, 0x0,
+ 0xc, 0xf3, 0x0, 0x0, 0xcf, 0x30, 0x0, 0xc,
+ 0xf3, 0x0, 0x0, 0xbf, 0x50, 0x0, 0x7, 0xff,
+ 0xb5, 0x0, 0x9, 0xff, 0x50,
/* U+75 "u" */
- 0x47, 0x40, 0x0, 0x2, 0x77, 0x8f, 0x80, 0x0,
- 0x4, 0xff, 0x8f, 0x80, 0x0, 0x4, 0xff, 0x8f,
- 0x80, 0x0, 0x4, 0xff, 0x8f, 0x80, 0x0, 0x4,
- 0xff, 0x8f, 0x80, 0x0, 0x4, 0xff, 0x8f, 0x80,
- 0x0, 0x4, 0xff, 0x8f, 0xa0, 0x0, 0x4, 0xff,
- 0x5f, 0xc0, 0x0, 0x4, 0xff, 0x3f, 0xe1, 0x0,
- 0xb, 0xff, 0xc, 0xfd, 0x87, 0xdc, 0xff, 0x1,
- 0xbf, 0xff, 0xa1, 0xff, 0x0, 0x0, 0x41, 0x0,
- 0x0,
+ 0x8f, 0x70, 0x0, 0x6, 0xf9, 0x8f, 0x70, 0x0,
+ 0x6, 0xf9, 0x8f, 0x70, 0x0, 0x6, 0xf9, 0x8f,
+ 0x70, 0x0, 0x6, 0xf9, 0x8f, 0x70, 0x0, 0x6,
+ 0xf9, 0x8f, 0x70, 0x0, 0x6, 0xf9, 0x8f, 0x70,
+ 0x0, 0x6, 0xf9, 0x8f, 0x70, 0x0, 0x6, 0xf9,
+ 0x7f, 0x90, 0x0, 0x6, 0xf9, 0x4f, 0xe1, 0x0,
+ 0x3e, 0xf9, 0xc, 0xfe, 0xbd, 0xfe, 0xf9, 0x1,
+ 0xae, 0xfd, 0x85, 0xf9,
/* U+76 "v" */
- 0x37, 0x60, 0x0, 0x0, 0x47, 0x42, 0xff, 0x10,
- 0x0, 0xd, 0xf5, 0xb, 0xf6, 0x0, 0x2, 0xfe,
- 0x0, 0x6f, 0xb0, 0x0, 0x7f, 0x90, 0x0, 0xff,
- 0x10, 0xd, 0xf3, 0x0, 0xa, 0xf6, 0x2, 0xfd,
- 0x0, 0x0, 0x3f, 0xb0, 0x7f, 0x70, 0x0, 0x0,
- 0xef, 0x1d, 0xf1, 0x0, 0x0, 0x7, 0xf8, 0xfb,
- 0x0, 0x0, 0x0, 0x2f, 0xdf, 0x60, 0x0, 0x0,
- 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x6, 0xfa,
+ 0x7f, 0x80, 0x0, 0x0, 0xef, 0x11, 0xfe, 0x0,
+ 0x0, 0x4f, 0xb0, 0xc, 0xf3, 0x0, 0x9, 0xf6,
+ 0x0, 0x6f, 0x80, 0x0, 0xef, 0x0, 0x1, 0xfd,
+ 0x0, 0x3f, 0xa0, 0x0, 0xb, 0xf2, 0x8, 0xf5,
+ 0x0, 0x0, 0x5f, 0x80, 0xdf, 0x0, 0x0, 0x0,
+ 0xfd, 0x2f, 0xa0, 0x0, 0x0, 0xa, 0xfa, 0xf4,
+ 0x0, 0x0, 0x0, 0x5f, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0xef, 0x90, 0x0, 0x0, 0x0, 0x9, 0xf4,
0x0, 0x0,
/* U+77 "w" */
- 0x37, 0x60, 0x0, 0x6, 0x72, 0x0, 0x2, 0x77,
- 0x3f, 0xe0, 0x0, 0xf, 0xf8, 0x0, 0x6, 0xfd,
- 0xe, 0xf3, 0x0, 0x3f, 0xfc, 0x0, 0x9, 0xf8,
- 0xa, 0xf7, 0x0, 0x9f, 0xcf, 0x20, 0xd, 0xf3,
- 0x5, 0xfb, 0x0, 0xef, 0x6f, 0x70, 0x1f, 0xe0,
- 0x1, 0xfe, 0x3, 0xfa, 0x1f, 0xc0, 0x4f, 0xa0,
- 0x0, 0xcf, 0x37, 0xf5, 0xd, 0xf1, 0x8f, 0x50,
- 0x0, 0x7f, 0x7d, 0xf0, 0x7, 0xf6, 0xcf, 0x10,
- 0x0, 0x2f, 0xaf, 0xb0, 0x2, 0xfa, 0xfc, 0x0,
- 0x0, 0xe, 0xff, 0x60, 0x0, 0xde, 0xf7, 0x0,
- 0x0, 0x9, 0xff, 0x10, 0x0, 0x7f, 0xf3, 0x0,
- 0x0, 0x5, 0xfb, 0x0, 0x0, 0x2f, 0xe0, 0x0,
+ 0x6f, 0x90, 0x0, 0xb, 0xf2, 0x0, 0x1, 0xfd,
+ 0x1, 0xfd, 0x0, 0x0, 0xff, 0x70, 0x0, 0x5f,
+ 0x90, 0xd, 0xf1, 0x0, 0x5f, 0xfc, 0x0, 0x9,
+ 0xf5, 0x0, 0x8f, 0x50, 0x9, 0xfa, 0xf1, 0x0,
+ 0xdf, 0x0, 0x4, 0xf9, 0x0, 0xeb, 0x4f, 0x60,
+ 0x1f, 0xc0, 0x0, 0xf, 0xd0, 0x3f, 0x60, 0xfb,
+ 0x5, 0xf7, 0x0, 0x0, 0xbf, 0x18, 0xf1, 0xb,
+ 0xf0, 0x9f, 0x30, 0x0, 0x6, 0xf5, 0xdd, 0x0,
+ 0x6f, 0x5d, 0xe0, 0x0, 0x0, 0x2f, 0xbf, 0x80,
+ 0x1, 0xfb, 0xfa, 0x0, 0x0, 0x0, 0xdf, 0xf3,
+ 0x0, 0xc, 0xff, 0x50, 0x0, 0x0, 0x9, 0xfe,
+ 0x0, 0x0, 0x7f, 0xf1, 0x0, 0x0, 0x0, 0x5f,
+ 0x90, 0x0, 0x2, 0xfc, 0x0, 0x0,
/* U+78 "x" */
- 0x18, 0x72, 0x0, 0x2, 0x77, 0x10, 0xbf, 0xa0,
- 0x0, 0xbf, 0xb0, 0x1, 0xff, 0x40, 0x4f, 0xf1,
- 0x0, 0x5, 0xfc, 0xe, 0xf6, 0x0, 0x0, 0xb,
- 0xfb, 0xfc, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x20,
- 0x0, 0x0, 0x0, 0xef, 0xd1, 0x0, 0x0, 0x0,
- 0x8f, 0xef, 0x90, 0x0, 0x0, 0x3f, 0xf2, 0xff,
- 0x40, 0x0, 0xd, 0xf6, 0x6, 0xfd, 0x10, 0x8,
- 0xfd, 0x0, 0xc, 0xf8, 0x3, 0xff, 0x40, 0x0,
- 0x4f, 0xf3,
+ 0x2f, 0xf2, 0x0, 0x5, 0xfe, 0x10, 0x7f, 0xb0,
+ 0x0, 0xef, 0x50, 0x0, 0xdf, 0x50, 0x8f, 0xb0,
+ 0x0, 0x3, 0xfe, 0x3f, 0xf1, 0x0, 0x0, 0x9,
+ 0xff, 0xf6, 0x0, 0x0, 0x0, 0xe, 0xfc, 0x0,
+ 0x0, 0x0, 0x1, 0xef, 0xd0, 0x0, 0x0, 0x0,
+ 0xaf, 0xdf, 0x80, 0x0, 0x0, 0x4f, 0xd1, 0xef,
+ 0x20, 0x0, 0xe, 0xf3, 0x6, 0xfc, 0x0, 0x9,
+ 0xfa, 0x0, 0xc, 0xf7, 0x3, 0xff, 0x10, 0x0,
+ 0x3f, 0xf2,
/* U+79 "y" */
- 0x47, 0x60, 0x0, 0x0, 0x67, 0x55, 0xff, 0x10,
- 0x0, 0xf, 0xf6, 0xe, 0xf6, 0x0, 0x5, 0xff,
- 0x0, 0x9f, 0xb0, 0x0, 0xaf, 0xa0, 0x2, 0xff,
- 0x10, 0xf, 0xf4, 0x0, 0xd, 0xf6, 0x5, 0xfe,
- 0x0, 0x0, 0x6f, 0xb0, 0xaf, 0x90, 0x0, 0x1,
- 0xff, 0x1f, 0xf2, 0x0, 0x0, 0xa, 0xfa, 0xfd,
- 0x0, 0x0, 0x0, 0x4f, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0xef, 0xf1, 0x0, 0x0, 0x0, 0x9, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0xbf, 0x50, 0x0, 0x0,
- 0x0, 0x2f, 0xf0, 0x0, 0x0, 0x2, 0x2c, 0xf8,
- 0x0, 0x0, 0x0, 0xcf, 0xfd, 0x10, 0x0, 0x0,
- 0x7, 0xb7, 0x10, 0x0, 0x0, 0x0,
+ 0x9f, 0x90, 0x0, 0x2, 0xff, 0x3, 0xfe, 0x0,
+ 0x0, 0x7f, 0xa0, 0xe, 0xf3, 0x0, 0xc, 0xf4,
+ 0x0, 0x8f, 0x80, 0x1, 0xff, 0x0, 0x3, 0xfe,
+ 0x0, 0x5f, 0xa0, 0x0, 0xd, 0xf3, 0xa, 0xf4,
+ 0x0, 0x0, 0x8f, 0x80, 0xff, 0x0, 0x0, 0x2,
+ 0xfd, 0x4f, 0xa0, 0x0, 0x0, 0xd, 0xfc, 0xf4,
+ 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0,
+ 0x2, 0xff, 0xa0, 0x0, 0x0, 0x0, 0xc, 0xf4,
+ 0x0, 0x0, 0x0, 0x0, 0xcf, 0x0, 0x0, 0x0,
+ 0x0, 0x3f, 0xa0, 0x0, 0x0, 0x0, 0xb, 0xf3,
+ 0x0, 0x0, 0x1, 0xdf, 0xfa, 0x0, 0x0, 0x0,
+ 0x1f, 0xf9, 0x0, 0x0, 0x0, 0x0,
/* U+7A "z" */
- 0x87, 0x77, 0x77, 0x77, 0x70, 0xff, 0xff, 0xff,
- 0xff, 0xf0, 0x0, 0x0, 0x2, 0xef, 0x60, 0x0,
- 0x0, 0xc, 0xfa, 0x0, 0x0, 0x0, 0x8f, 0xd1,
- 0x0, 0x0, 0x4, 0xff, 0x30, 0x0, 0x0, 0x1e,
- 0xf6, 0x0, 0x0, 0x0, 0xcf, 0xa0, 0x0, 0x0,
- 0x8, 0xfe, 0x10, 0x0, 0x0, 0x4f, 0xf3, 0x0,
- 0x0, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xb3, 0xff,
- 0xff, 0xff, 0xff, 0xf4,
+ 0xf, 0xff, 0xff, 0xff, 0xfd, 0x0, 0xaa, 0xaa,
+ 0xaa, 0xef, 0xb0, 0x0, 0x0, 0x0, 0x4f, 0xf2,
+ 0x0, 0x0, 0x0, 0x1e, 0xf5, 0x0, 0x0, 0x0,
+ 0xb, 0xf9, 0x0, 0x0, 0x0, 0x6, 0xfd, 0x0,
+ 0x0, 0x0, 0x2, 0xff, 0x30, 0x0, 0x0, 0x0,
+ 0xdf, 0x70, 0x0, 0x0, 0x0, 0x9f, 0xb0, 0x0,
+ 0x0, 0x0, 0x5f, 0xe1, 0x0, 0x0, 0x0, 0xe,
+ 0xfd, 0xaa, 0xaa, 0xaa, 0x10, 0xff, 0xff, 0xff,
+ 0xff, 0xf2,
/* U+7B "{" */
- 0x0, 0x0, 0x19, 0xe1, 0x0, 0x1, 0xcf, 0x81,
- 0x0, 0x9, 0xf9, 0x0, 0x0, 0xf, 0xf3, 0x0,
+ 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x4e, 0xf1,
+ 0x0, 0x2, 0xfe, 0x20, 0x0, 0xa, 0xf5, 0x0,
+ 0x0, 0xe, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0,
0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0,
- 0x0, 0xf, 0xf0, 0x0, 0x0, 0x2f, 0xf0, 0x0,
- 0x0, 0x6f, 0xd0, 0x0, 0x28, 0xff, 0x40, 0x0,
- 0x4f, 0xf8, 0x0, 0x0, 0x15, 0xef, 0x70, 0x0,
- 0x0, 0x5f, 0xd0, 0x0, 0x0, 0x2f, 0xf0, 0x0,
+ 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x7f, 0xa0, 0x0,
+ 0x3b, 0xfe, 0x10, 0x0, 0x5f, 0xf9, 0x0, 0x0,
+ 0x2, 0xcf, 0x60, 0x0, 0x0, 0x3f, 0xc0, 0x0,
+ 0x0, 0xf, 0xe0, 0x0, 0x0, 0xf, 0xf0, 0x0,
0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0,
- 0x0, 0xf, 0xf0, 0x0, 0x0, 0xe, 0xf5, 0x0,
- 0x0, 0x7, 0xfa, 0x0, 0x0, 0x0, 0xaf, 0xb2,
- 0x0, 0x0, 0x6, 0xb0,
+ 0x0, 0xc, 0xf3, 0x0, 0x0, 0x6, 0xfa, 0x0,
+ 0x0, 0x0, 0xaf, 0xb1, 0x0, 0x0, 0x5, 0xb0,
/* U+7C "|" */
- 0x4a, 0x66, 0xfa, 0x6f, 0xa6, 0xfa, 0x6f, 0xa6,
- 0xfa, 0x6f, 0xa6, 0xfa, 0x6f, 0xa6, 0xfa, 0x6f,
- 0xa6, 0xfa, 0x6f, 0xa6, 0xfa, 0x6f, 0xa6, 0xfa,
- 0x6f, 0xa6, 0xfa, 0x6e, 0x90,
+ 0x2f, 0x72, 0xf7, 0x2f, 0x72, 0xf7, 0x2f, 0x72,
+ 0xf7, 0x2f, 0x72, 0xf7, 0x2f, 0x72, 0xf7, 0x2f,
+ 0x72, 0xf7, 0x2f, 0x72, 0xf7, 0x2f, 0x72, 0xf7,
+ 0x2f, 0x72, 0xf7, 0x2f, 0x70,
/* U+7D "}" */
- 0x9c, 0x50, 0x0, 0x4, 0xdf, 0x60, 0x0, 0x2,
- 0xfe, 0x10, 0x0, 0xc, 0xf5, 0x0, 0x0, 0xaf,
- 0x80, 0x0, 0x8, 0xf8, 0x0, 0x0, 0x8f, 0x80,
- 0x0, 0x8, 0xf8, 0x0, 0x0, 0x6f, 0xd0, 0x0,
- 0x0, 0xcf, 0xb6, 0x0, 0x2, 0xdf, 0xc0, 0x1,
- 0xdf, 0x83, 0x0, 0x6f, 0xc0, 0x0, 0x8, 0xf8,
- 0x0, 0x0, 0x8f, 0x80, 0x0, 0x8, 0xf8, 0x0,
- 0x0, 0xbf, 0x80, 0x0, 0xd, 0xf4, 0x0, 0x5,
- 0xfe, 0x0, 0x7, 0xef, 0x30, 0x0, 0x69, 0x20,
- 0x0, 0x0,
+ 0x22, 0x0, 0x0, 0xa, 0xf9, 0x0, 0x0, 0xa,
+ 0xf9, 0x0, 0x0, 0xe, 0xf1, 0x0, 0x0, 0xaf,
+ 0x50, 0x0, 0x8, 0xf6, 0x0, 0x0, 0x8f, 0x70,
+ 0x0, 0x8, 0xf7, 0x0, 0x0, 0x7f, 0x80, 0x0,
+ 0x3, 0xfd, 0x0, 0x0, 0x8, 0xfd, 0x70, 0x0,
+ 0x2e, 0xfb, 0x0, 0x1e, 0xf5, 0x0, 0x6, 0xfa,
+ 0x0, 0x0, 0x8f, 0x70, 0x0, 0x8, 0xf7, 0x0,
+ 0x0, 0x8f, 0x70, 0x0, 0x9, 0xf5, 0x0, 0x0,
+ 0xcf, 0x30, 0x0, 0x4f, 0xd0, 0x0, 0x6f, 0xe2,
+ 0x0, 0x7, 0x81, 0x0, 0x0,
/* U+7E "~" */
- 0x0, 0x67, 0x72, 0x0, 0x0, 0x1, 0x0, 0xbf,
- 0xff, 0xf8, 0x0, 0x1, 0xf8, 0x6f, 0xa4, 0x6e,
- 0xfc, 0x42, 0x9f, 0x48, 0xf1, 0x0, 0x1b, 0xff,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0x4, 0x9a, 0x70,
- 0x0,
+ 0x1, 0xaf, 0xea, 0x20, 0x0, 0x1b, 0x60, 0xdf,
+ 0xde, 0xff, 0x60, 0x8, 0xf5, 0x6f, 0x70, 0x7,
+ 0xff, 0xed, 0xfc, 0x5, 0xa1, 0x0, 0x2, 0xaf,
+ 0xfa, 0x10,
/* U+F001 "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x15, 0xae, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x26, 0xbf, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0,
- 0x38, 0xcf, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
- 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xb6, 0xdc, 0x0, 0x0, 0x0, 0xcf,
- 0xff, 0xff, 0xa6, 0x10, 0xc, 0xc0, 0x0, 0x0,
- 0xc, 0xfe, 0x95, 0x0, 0x0, 0x0, 0xcc, 0x0,
- 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0xc0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0xcc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0xc, 0xc0,
- 0x0, 0x3, 0x7b, 0xb6, 0xcc, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0x8, 0xff, 0xff, 0xff, 0xc0, 0x0,
- 0x0, 0xc, 0xc0, 0x0, 0xff, 0xff, 0xff, 0xfc,
- 0x1, 0x57, 0x75, 0xdc, 0x0, 0xc, 0xff, 0xff,
- 0xff, 0x96, 0xef, 0xff, 0xff, 0xc0, 0x0, 0x17,
- 0xdf, 0xfc, 0x60, 0xff, 0xff, 0xff, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xff,
- 0xff, 0x91, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0x9e, 0xf8, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xbf,
+ 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x48, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0,
+ 0x0, 0x1, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xd0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x94, 0xe, 0xfd, 0x0, 0x0, 0x0, 0xaf,
+ 0xff, 0xff, 0xfc, 0x72, 0x0, 0x0, 0xef, 0xd0,
+ 0x0, 0x0, 0xa, 0xff, 0xea, 0x50, 0x0, 0x0,
+ 0x0, 0xe, 0xfd, 0x0, 0x0, 0x0, 0xaf, 0xf1,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0, 0x0,
+ 0x0, 0xa, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0xe, 0xfd, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0, 0x0, 0x0,
+ 0xa, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xe,
+ 0xfd, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0,
+ 0x0, 0x3, 0x54, 0xff, 0xd0, 0x0, 0x0, 0xa,
+ 0xff, 0x10, 0x0, 0x0, 0x5e, 0xff, 0xff, 0xfd,
+ 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0, 0x3f,
+ 0xff, 0xff, 0xff, 0xd0, 0x1, 0x69, 0x9d, 0xff,
+ 0x10, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfc, 0x6,
+ 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x1e, 0xff,
+ 0xff, 0xff, 0x61, 0xff, 0xff, 0xff, 0xff, 0x10,
+ 0x0, 0x0, 0x2a, 0xff, 0xfc, 0x50, 0x1f, 0xff,
+ 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x10,
+ 0x0, 0x0, 0x9f, 0xff, 0xff, 0xf7, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0xcc,
+ 0xa3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0,
/* U+F008 "" */
- 0x3, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x20, 0x9f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3,
- 0xfd, 0x44, 0xaf, 0xa4, 0x44, 0x44, 0x44, 0x44,
- 0x5f, 0xf5, 0x47, 0xf8, 0xf8, 0x0, 0x4f, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0xf8,
- 0xf8, 0x0, 0x4f, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xc0, 0x0, 0xf8, 0xfe, 0x77, 0xcf, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xf9, 0x7a, 0xf8,
- 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xf8, 0xfb, 0x0, 0x7f, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xf1, 0x3, 0xf8,
- 0xf8, 0x0, 0x4f, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xc0, 0x0, 0xf8, 0xf9, 0x0, 0x5f, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0xd, 0xd0, 0x1, 0xf8,
- 0xff, 0xcb, 0xff, 0xfb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xdf, 0xfd, 0xbe, 0xf8, 0xff, 0xcc, 0xff, 0xfc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0xfd, 0xcd, 0xf8,
- 0xf9, 0x0, 0x5f, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xe0, 0x0, 0xf8, 0xf8, 0x0, 0x4f, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0xf8,
- 0xfb, 0x33, 0x7f, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xe3, 0x34, 0xf8, 0xff, 0xff, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xf8,
- 0xfe, 0x88, 0xbf, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xf9, 0x89, 0xf8, 0xf8, 0x0, 0x4f, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xd0, 0x0, 0xf8,
- 0xf8, 0x0, 0x4f, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xc0, 0x0, 0xf8, 0xfd, 0x77, 0xaf, 0xa7,
- 0x77, 0x77, 0x77, 0x77, 0x7e, 0xf8, 0x78, 0xf8,
- 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe2, 0x0, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x0,
+ 0x42, 0x0, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x87, 0x0, 0x24, 0xf8, 0x22, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x22, 0x8f, 0xff, 0xff,
+ 0xff, 0xb9, 0x99, 0x99, 0x99, 0x9b, 0xff, 0xff,
+ 0xff, 0xf9, 0x44, 0xff, 0x30, 0x0, 0x0, 0x0,
+ 0x3, 0xff, 0x44, 0x9f, 0xf6, 0x0, 0xef, 0x30,
+ 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x6f, 0xf7,
+ 0x0, 0xef, 0x30, 0x0, 0x0, 0x0, 0x3, 0xfe,
+ 0x0, 0x7f, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0,
+ 0x0, 0x3, 0xff, 0xff, 0xff, 0xfa, 0x66, 0xff,
+ 0x74, 0x44, 0x44, 0x44, 0x47, 0xff, 0x66, 0xaf,
+ 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0x0, 0x6f, 0xf6, 0x0, 0xef, 0xdc, 0xcc,
+ 0xcc, 0xcc, 0xcd, 0xfe, 0x0, 0x6f, 0xff, 0xee,
+ 0xff, 0x30, 0x0, 0x0, 0x0, 0x3, 0xff, 0xee,
+ 0xff, 0xfc, 0x88, 0xff, 0x30, 0x0, 0x0, 0x0,
+ 0x3, 0xff, 0x88, 0xcf, 0xf6, 0x0, 0xef, 0x30,
+ 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x6f, 0xf6,
+ 0x0, 0xef, 0x30, 0x0, 0x0, 0x0, 0x3, 0xfe,
+ 0x0, 0x6f, 0xfe, 0xcc, 0xff, 0x41, 0x11, 0x11,
+ 0x11, 0x14, 0xff, 0xcc, 0xef, 0xfd, 0xaa, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xdf,
+ 0xc6, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0x0, 0x6c,
/* U+F00B "" */
- 0x23, 0x33, 0x33, 0x0, 0x23, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x32, 0xef, 0xff, 0xff, 0x31, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
- 0xff, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x44, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x31,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28,
- 0x88, 0x84, 0x0, 0x48, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xfd,
- 0x20, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
- 0xff, 0xff, 0xff, 0x44, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x44, 0xff,
+ 0xbf, 0xff, 0xfe, 0x31, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x63, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x42, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7c, 0xcc, 0xca, 0x0, 0x9c, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xc7, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b,
- 0xbb, 0xb9, 0x0, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xb7, 0xff, 0xff, 0xff, 0x42, 0xff, 0xff,
+ 0xff, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x63, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x58,
+ 0x88, 0x87, 0x0, 0x78, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x85, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
+ 0x31, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
+ 0xff, 0xff, 0xff, 0x63, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x44, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0x20, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+ 0xff, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x53, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x47, 0x88, 0x87, 0x0,
+ 0x68, 0x88, 0x88, 0x88, 0x88, 0x88, 0x74, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xcf, 0xff, 0xff, 0x31, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
+ 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x63, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x52, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x37, 0x77, 0x76, 0x0, 0x57, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x74,
/* U+F00C "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xa6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3e, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0xef, 0xff, 0xf5, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xff, 0xf6,
- 0x0, 0x13, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff,
- 0xff, 0xa0, 0x1, 0xcf, 0x90, 0x0, 0x0, 0x3e,
- 0xff, 0xff, 0xfa, 0x0, 0x1c, 0xff, 0xf9, 0x0,
- 0x3, 0xef, 0xff, 0xff, 0xa0, 0x0, 0x8f, 0xff,
- 0xff, 0x90, 0x3e, 0xff, 0xff, 0xfa, 0x0, 0x0,
- 0x2f, 0xff, 0xff, 0xfa, 0xef, 0xff, 0xff, 0xa0,
- 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0xef, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff,
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xef, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xf3, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff,
+ 0xff, 0x30, 0x4, 0xe8, 0x0, 0x0, 0x0, 0x0,
+ 0x2e, 0xff, 0xff, 0xf3, 0x0, 0x4f, 0xff, 0x80,
+ 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0x30, 0x0,
+ 0xef, 0xff, 0xf8, 0x0, 0x0, 0x2e, 0xff, 0xff,
+ 0xf3, 0x0, 0x0, 0xaf, 0xff, 0xff, 0x80, 0x2,
+ 0xef, 0xff, 0xff, 0x30, 0x0, 0x0, 0xa, 0xff,
+ 0xff, 0xf8, 0x2e, 0xff, 0xff, 0xf3, 0x0, 0x0,
+ 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff,
+ 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xaf, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xf3,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xaf, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x9, 0xd3, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0,
/* U+F00D "" */
- 0x0, 0x23, 0x0, 0x0, 0x0, 0x2, 0x30, 0x0,
- 0x3e, 0xf9, 0x0, 0x0, 0x6, 0xff, 0x60, 0x3e,
- 0xff, 0xf9, 0x0, 0x6, 0xff, 0xff, 0x6a, 0xff,
- 0xff, 0xf9, 0x6, 0xff, 0xff, 0xfe, 0x3f, 0xff,
- 0xff, 0xfb, 0xff, 0xff, 0xff, 0x60, 0x3f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x60, 0x0, 0x3f, 0xff,
- 0xff, 0xff, 0xff, 0x60, 0x0, 0x0, 0x3f, 0xff,
- 0xff, 0xff, 0x60, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf9, 0x5, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xf9, 0x9f, 0xff, 0xff, 0x60, 0x3f, 0xff,
- 0xff, 0xf2, 0xff, 0xff, 0x60, 0x0, 0x3f, 0xff,
- 0xf6, 0x3, 0xff, 0x60, 0x0, 0x0, 0x3f, 0xf6,
- 0x0, 0x1, 0x30, 0x0, 0x0, 0x0, 0x22, 0x0,
+ 0x8, 0xc4, 0x0, 0x0, 0x0, 0x2, 0xc9, 0x0,
+ 0x9f, 0xff, 0x40, 0x0, 0x0, 0x2e, 0xff, 0xb0,
+ 0xff, 0xff, 0xf4, 0x0, 0x2, 0xef, 0xff, 0xf1,
+ 0x7f, 0xff, 0xff, 0x40, 0x2e, 0xff, 0xff, 0x90,
+ 0x8, 0xff, 0xff, 0xf6, 0xef, 0xff, 0xfa, 0x0,
+ 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0,
+ 0x0, 0x0, 0x9f, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x2, 0xef, 0xff, 0xff, 0xf4, 0x0, 0x0,
+ 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0,
+ 0x2, 0xef, 0xff, 0xfd, 0xff, 0xff, 0xf4, 0x0,
+ 0x2e, 0xff, 0xff, 0xa0, 0x8f, 0xff, 0xff, 0x40,
+ 0xdf, 0xff, 0xfa, 0x0, 0x8, 0xff, 0xff, 0xf0,
+ 0xdf, 0xff, 0xa0, 0x0, 0x0, 0x8f, 0xff, 0xe0,
+ 0x2e, 0xfa, 0x0, 0x0, 0x0, 0x8, 0xff, 0x30,
+ 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0,
/* U+F011 "" */
- 0x0, 0x0, 0x0, 0x0, 0x7b, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a, 0x70,
- 0x4f, 0xff, 0x0, 0x8a, 0x10, 0x0, 0x0, 0x3e,
- 0xff, 0x34, 0xff, 0xf0, 0x6f, 0xfe, 0x30, 0x0,
- 0x2e, 0xff, 0xf2, 0x4f, 0xff, 0x4, 0xff, 0xfd,
- 0x10, 0xc, 0xff, 0xf6, 0x4, 0xff, 0xf0, 0x6,
- 0xff, 0xf9, 0x3, 0xff, 0xf5, 0x0, 0x4f, 0xff,
- 0x0, 0x8, 0xff, 0xf1, 0xaf, 0xfc, 0x0, 0x4,
- 0xff, 0xf0, 0x0, 0xe, 0xff, 0x7c, 0xff, 0x60,
- 0x0, 0x3f, 0xff, 0x0, 0x0, 0x9f, 0xfc, 0xff,
- 0xf4, 0x0, 0x0, 0xdf, 0xa0, 0x0, 0x5, 0xff,
- 0xcf, 0xff, 0x40, 0x0, 0x0, 0x10, 0x0, 0x0,
- 0x4f, 0xfc, 0xef, 0xf5, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xca, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xdf, 0xf9, 0x6f, 0xff, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x30, 0xef,
- 0xfc, 0x10, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xc0,
- 0x5, 0xff, 0xfe, 0x50, 0x0, 0x0, 0x6e, 0xff,
- 0xf3, 0x0, 0x8, 0xff, 0xff, 0xeb, 0x7b, 0xef,
- 0xff, 0xf6, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x2, 0xaf,
- 0xff, 0xff, 0xff, 0xa2, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x16, 0x88, 0x85, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x33, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd,
+ 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xe, 0xff, 0x80, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xaf, 0x50, 0xe, 0xff, 0x80,
+ 0xb, 0xf4, 0x0, 0x0, 0x0, 0xb, 0xff, 0xe0,
+ 0xe, 0xff, 0x80, 0x4f, 0xff, 0x50, 0x0, 0x0,
+ 0x9f, 0xff, 0xe0, 0xe, 0xff, 0x80, 0x5f, 0xff,
+ 0xf2, 0x0, 0x3, 0xff, 0xfe, 0x30, 0xe, 0xff,
+ 0x80, 0x8, 0xff, 0xfc, 0x0, 0xb, 0xff, 0xf3,
+ 0x0, 0xe, 0xff, 0x80, 0x0, 0xaf, 0xff, 0x50,
+ 0x1f, 0xff, 0x90, 0x0, 0xe, 0xff, 0x80, 0x0,
+ 0x1f, 0xff, 0xb0, 0x6f, 0xff, 0x30, 0x0, 0xe,
+ 0xff, 0x80, 0x0, 0x9, 0xff, 0xf0, 0x8f, 0xff,
+ 0x0, 0x0, 0xe, 0xff, 0x80, 0x0, 0x5, 0xff,
+ 0xf2, 0xaf, 0xfd, 0x0, 0x0, 0xe, 0xff, 0x80,
+ 0x0, 0x3, 0xff, 0xf3, 0x9f, 0xfd, 0x0, 0x0,
+ 0xc, 0xff, 0x50, 0x0, 0x4, 0xff, 0xf2, 0x8f,
+ 0xff, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x6,
+ 0xff, 0xf1, 0x4f, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xb, 0xff, 0xe0, 0xf, 0xff, 0xc0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x90,
+ 0x8, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xef, 0xff, 0x20, 0x1, 0xef, 0xff, 0x90, 0x0,
+ 0x0, 0x0, 0x2d, 0xff, 0xf9, 0x0, 0x0, 0x4f,
+ 0xff, 0xfd, 0x62, 0x1, 0x49, 0xff, 0xff, 0xc0,
+ 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x4e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x7d, 0xff, 0xff, 0xff, 0xb4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x65,
+ 0x30, 0x0, 0x0, 0x0, 0x0,
/* U+F013 "" */
- 0x0, 0x0, 0x0, 0x1, 0x33, 0x31, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0x50, 0xa, 0xff,
- 0xf8, 0x0, 0x73, 0x0, 0x0, 0x6, 0xff, 0xa5,
- 0xdf, 0xff, 0xc4, 0xcf, 0xe3, 0x0, 0x2, 0xef,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0x0,
- 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x10, 0x0, 0x3, 0xff, 0xff, 0xc3, 0x5,
- 0xdf, 0xff, 0xf1, 0x0, 0xbd, 0xff, 0xff, 0xd0,
- 0x0, 0x1, 0xef, 0xff, 0xfb, 0x8f, 0xff, 0xff,
- 0xf7, 0x0, 0x0, 0x8, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0x50, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xcf, 0xff, 0xff, 0xfa, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0xfc, 0x1, 0x7f, 0xff, 0xf6, 0x0, 0x9,
- 0xff, 0xff, 0x62, 0x0, 0x1, 0xff, 0xff, 0xfd,
- 0xbe, 0xff, 0xff, 0xe0, 0x0, 0x0, 0xbf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x3f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20,
- 0x0, 0x7f, 0xff, 0xaf, 0xff, 0xff, 0xaf, 0xff,
- 0x60, 0x0, 0x0, 0x6c, 0x10, 0xaf, 0xff, 0x80,
- 0x3c, 0x60, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x38, 0x88, 0x20, 0x0, 0x0, 0x0,
-
- /* U+F014 "" */
- 0x0, 0x0, 0x0, 0x43, 0x33, 0x31, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xfe, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0x94, 0x44, 0x5f,
- 0x80, 0x0, 0x0, 0x33, 0x33, 0xaf, 0x43, 0x33,
- 0x3d, 0xe3, 0x33, 0x30, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf4, 0x7c, 0xfa, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0xee, 0x81, 0x8, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x8,
- 0xf4, 0x13, 0x10, 0x41, 0x3, 0x20, 0xcc, 0x0,
- 0x8, 0xf4, 0x4f, 0x44, 0xf8, 0xf, 0x80, 0xcc,
- 0x0, 0x8, 0xf4, 0x4f, 0x44, 0xf8, 0xf, 0x80,
- 0xcc, 0x0, 0x8, 0xf4, 0x4f, 0x44, 0xf8, 0xf,
- 0x80, 0xcc, 0x0, 0x8, 0xf4, 0x4f, 0x44, 0xf8,
- 0xf, 0x80, 0xcc, 0x0, 0x8, 0xf4, 0x4f, 0x44,
- 0xf8, 0xf, 0x80, 0xcc, 0x0, 0x8, 0xf4, 0x4f,
- 0x44, 0xf8, 0xf, 0x80, 0xcc, 0x0, 0x8, 0xf4,
- 0x4f, 0x44, 0xf8, 0xf, 0x80, 0xcc, 0x0, 0x8,
- 0xf4, 0x2c, 0x21, 0xb4, 0xb, 0x50, 0xcc, 0x0,
- 0x8, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc,
- 0x0, 0x6, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xfb, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0x0, 0x0, 0x38, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c,
+ 0xee, 0xc7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xff, 0xfc, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xfc,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x30, 0x2a,
+ 0xff, 0xff, 0xff, 0xb2, 0x3, 0x80, 0x0, 0x0,
+ 0x8f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
+ 0xf8, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x40, 0xb, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0,
+ 0x1f, 0xff, 0xff, 0xff, 0xfa, 0x55, 0xaf, 0xff,
+ 0xff, 0xff, 0xf2, 0x6, 0xef, 0xff, 0xff, 0x70,
+ 0x0, 0x7, 0xff, 0xff, 0xff, 0x60, 0x0, 0x2f,
+ 0xff, 0xfd, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xf3,
+ 0x0, 0x0, 0x3f, 0xff, 0xfa, 0x0, 0x0, 0x0,
+ 0x9f, 0xff, 0xf3, 0x0, 0x0, 0x2f, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0xaf, 0xff, 0xf3, 0x0, 0x0,
+ 0x8f, 0xff, 0xff, 0x20, 0x0, 0x1, 0xff, 0xff,
+ 0xf9, 0x0, 0x1e, 0xff, 0xff, 0xff, 0xd3, 0x0,
+ 0x3d, 0xff, 0xff, 0xff, 0xe1, 0xe, 0xff, 0xff,
+ 0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0xe0,
+ 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x2f,
+ 0xb2, 0x9f, 0xff, 0xff, 0xff, 0xfa, 0x2a, 0xf3,
+ 0x0, 0x0, 0x1, 0x0, 0x2, 0xdf, 0xff, 0xfe,
+ 0x30, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xff, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x66,
+ 0x41, 0x0, 0x0, 0x0, 0x0,
/* U+F015 "" */
- 0x0, 0x0, 0x0, 0x0, 0x9, 0xa3, 0x0, 0x9b,
- 0xb3, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xfe,
- 0x50, 0xcf, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x3d,
- 0xfe, 0xbf, 0xf6, 0xcf, 0xf4, 0x0, 0x0, 0x0,
- 0x5, 0xef, 0xd2, 0x56, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x7f, 0xfa, 0x3e, 0xf7, 0x4f, 0xff,
- 0xf4, 0x0, 0x0, 0xa, 0xff, 0x76, 0xef, 0xff,
- 0xa4, 0xdf, 0xf5, 0x0, 0x1, 0xcf, 0xf5, 0x8f,
- 0xff, 0xff, 0xfc, 0x3c, 0xfe, 0x50, 0x3d, 0xfe,
- 0x4a, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xaf, 0xf6,
- 0x9f, 0xd3, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x66, 0xff, 0x6, 0xc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0x43, 0x0, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0xc,
- 0xff, 0xff, 0xd4, 0x47, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0xc, 0xff, 0xff, 0xc0, 0x4, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x4,
- 0xff, 0xff, 0xf4, 0x0, 0x0, 0xc, 0xff, 0xff,
- 0xc0, 0x4, 0xff, 0xff, 0xf4, 0x0, 0x0, 0xb,
- 0xff, 0xff, 0xc0, 0x4, 0xff, 0xff, 0xf3, 0x0,
-
- /* U+F019 "" */
- 0x0, 0x0, 0x0, 0x1, 0xbb, 0xbb, 0x50, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xff, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x77, 0x79, 0xff, 0xff, 0xb7, 0x77, 0x30,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
- 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3f, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x23, 0x33,
- 0x33, 0x30, 0x3f, 0xfa, 0x2, 0x33, 0x33, 0x33,
- 0xe, 0xff, 0xff, 0xff, 0x90, 0x36, 0x3, 0xef,
- 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xa1,
- 0x5, 0xef, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x45,
- 0xf5, 0x4f, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfb, 0xcf, 0xcb, 0xf8, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20,
-
- /* U+F01C "" */
- 0x0, 0x5, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb3,
- 0x0, 0x0, 0x1, 0xef, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xd0, 0x0, 0x0, 0x6f, 0xfc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xff, 0x40, 0x0, 0xe, 0xfb, 0x0,
- 0x0, 0x0, 0x0, 0xe, 0xfb, 0x0, 0x4, 0xff,
- 0x50, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf2, 0x0,
- 0xbf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff,
- 0x90, 0x2f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xa, 0xfe, 0x19, 0xff, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2f, 0xf6, 0xef, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xcf, 0xff, 0xff,
- 0xfa, 0x0, 0x0, 0xc, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0xf2, 0x0, 0x4, 0xff, 0xff, 0xff,
- 0xcf, 0xff, 0xff, 0xff, 0xdb, 0xbb, 0xdf, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcd, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
-
- /* U+F021 "" */
- 0x0, 0x0, 0x0, 0x0, 0x23, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6b, 0xff, 0xff, 0xfa,
- 0x40, 0x0, 0x45, 0x0, 0x3, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0xb1, 0x6f, 0xc0, 0x3, 0xef, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xef, 0xfc, 0x2, 0xef,
- 0xff, 0xa3, 0x0, 0x4, 0xcf, 0xff, 0xff, 0xc0,
- 0xbf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x9f, 0xff,
- 0xfc, 0x2f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x3e,
- 0xff, 0xff, 0xc9, 0xff, 0xc0, 0x0, 0x0, 0x0,
- 0x2e, 0xff, 0xff, 0xfc, 0x68, 0x83, 0x0, 0x0,
- 0x0, 0x1, 0x88, 0x88, 0x88, 0x50, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0x33, 0x33, 0x33, 0x0, 0x0, 0x0, 0x0,
- 0x23, 0x32, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0x6f, 0xff, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0xf1, 0xff, 0xff, 0xf7,
- 0x0, 0x0, 0x0, 0x3, 0xef, 0xfa, 0xf, 0xff,
- 0xff, 0xe5, 0x0, 0x0, 0x7, 0xef, 0xff, 0x20,
- 0xff, 0xff, 0xff, 0xfd, 0xb8, 0xbe, 0xff, 0xff,
- 0x30, 0xf, 0xf6, 0x7f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x40, 0x0, 0xb6, 0x0, 0x2b, 0xff, 0xff,
- 0xff, 0xf8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0x68, 0x87, 0x41, 0x0, 0x0, 0x0,
-
- /* U+F026 "" */
- 0x0, 0x0, 0x0, 0x0, 0x31, 0x0, 0x0, 0x0,
- 0x6, 0xf7, 0x0, 0x0, 0x0, 0x6f, 0xf8, 0x0,
- 0x0, 0x6, 0xff, 0xf8, 0x0, 0x0, 0x6f, 0xff,
- 0xf8, 0xdf, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x34,
- 0x44, 0xdf, 0xff, 0xf8, 0x0, 0x0, 0x1d, 0xff,
- 0xf8, 0x0, 0x0, 0x1, 0xdf, 0xf8, 0x0, 0x0,
- 0x0, 0x1d, 0xf8, 0x0, 0x0, 0x0, 0x1, 0x82,
-
- /* U+F027 "" */
- 0x0, 0x0, 0x0, 0x0, 0x31, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0x70, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xf8, 0x0, 0x0, 0xd, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x88, 0x10, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0x8, 0xf9, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0x9, 0xf0, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0x0, 0x8f, 0x1f, 0xff, 0xff, 0xff, 0xff,
- 0x80, 0x5e, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xb, 0xe3, 0x3, 0x44, 0x4d, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0x80, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1d, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x18, 0x20, 0x0, 0x0,
-
- /* U+F028 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x72,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x10,
- 0x0, 0x4f, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xf7, 0x0, 0x0, 0x2b, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0x80, 0x5, 0x91, 0xa,
- 0xf7, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf8, 0x0,
- 0x5f, 0xe3, 0xc, 0xf2, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0x80, 0x0, 0x3f, 0xe2, 0x2f, 0xa0, 0xdf,
- 0xff, 0xff, 0xff, 0xf8, 0x8, 0x81, 0x3f, 0xa0,
- 0xaf, 0xf, 0xff, 0xff, 0xff, 0xff, 0x80, 0x8f,
- 0x90, 0xaf, 0x5, 0xf4, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0x0, 0x9f, 0x5, 0xf4, 0x4f, 0x5f, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0x8, 0xf1, 0x4f, 0x44,
- 0xf6, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x5, 0xec,
- 0x9, 0xf1, 0x4f, 0x4f, 0xff, 0xff, 0xff, 0xff,
- 0x80, 0xbe, 0x31, 0xdc, 0x9, 0xf1, 0x34, 0x44,
- 0xdf, 0xff, 0xf8, 0x0, 0x1, 0xaf, 0x40, 0xfc,
- 0x0, 0x0, 0x1, 0xdf, 0xff, 0x80, 0x3, 0xdf,
- 0x70, 0x8f, 0x40, 0x0, 0x0, 0x1, 0xdf, 0xf8,
- 0x0, 0x7e, 0x50, 0x6f, 0xb0, 0x0, 0x0, 0x0,
- 0x1, 0xdf, 0x80, 0x0, 0x0, 0x7f, 0xd1, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x82, 0x0, 0x2, 0xdf,
- 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4c, 0x50, 0x0, 0x0,
-
- /* U+F03E "" */
- 0x3, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x20, 0x9f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3,
- 0xfb, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x45, 0xf8, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8,
- 0xf8, 0x3, 0xdf, 0xd3, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xf8, 0xf8, 0xb, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xf8,
- 0xf8, 0xc, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x6e,
- 0x30, 0x0, 0x0, 0xf8, 0xf8, 0x7, 0xff, 0xf7,
- 0x0, 0x0, 0x6, 0xff, 0xe3, 0x0, 0x0, 0xf8,
- 0xf8, 0x0, 0x58, 0x50, 0x0, 0x0, 0x6f, 0xff,
- 0xfe, 0x30, 0x0, 0xf8, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xff, 0xe3, 0x0, 0xf8,
- 0xf8, 0x0, 0x0, 0x66, 0x0, 0x6f, 0xff, 0xff,
- 0xff, 0xfe, 0x30, 0xf8, 0xf8, 0x0, 0x6, 0xff,
- 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xf8,
- 0xf8, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0xf8, 0xf8, 0x6, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xf8,
- 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0xf8, 0xf8, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xf8,
- 0xf8, 0x6, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x40, 0xf8, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf5, 0x18, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x50,
-
- /* U+F040 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3d, 0xe6,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x36, 0x1d, 0xff, 0xff, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x3e, 0xf6, 0x1d, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x3e, 0xfa, 0xf6, 0x1d, 0xff,
- 0xf3, 0x0, 0x0, 0x0, 0x3e, 0xf7, 0xcf, 0xf6,
- 0x1d, 0xf3, 0x0, 0x0, 0x0, 0x3e, 0xf7, 0xcf,
- 0xff, 0xf6, 0x13, 0x0, 0x0, 0x0, 0x3e, 0xf7,
- 0xcf, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x3e,
- 0xf7, 0xcf, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0,
- 0x3e, 0xf7, 0xcf, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x3e, 0xf7, 0xcf, 0xff, 0xff, 0xf3, 0x0,
- 0x0, 0x0, 0x3e, 0xfd, 0xcf, 0xff, 0xff, 0xf3,
- 0x0, 0x0, 0x0, 0xf, 0xf4, 0xdf, 0xff, 0xff,
- 0xf3, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x1, 0xdf,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xf, 0xb7,
- 0x21, 0xdf, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xf4, 0x3e, 0xf3, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x88, 0x88, 0x83, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F048 "" */
- 0x33, 0x30, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff,
- 0x20, 0x0, 0x0, 0x0, 0xa8, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0xaf, 0x8f, 0xff, 0x40, 0x0, 0x0,
- 0xaf, 0xf8, 0xff, 0xf4, 0x0, 0x0, 0xaf, 0xff,
- 0x8f, 0xff, 0x40, 0x0, 0xaf, 0xff, 0xf8, 0xff,
- 0xf4, 0x0, 0xaf, 0xff, 0xff, 0x8f, 0xff, 0x40,
- 0xaf, 0xff, 0xff, 0xf8, 0xff, 0xf4, 0xaf, 0xff,
- 0xff, 0xff, 0x8f, 0xff, 0xcf, 0xff, 0xff, 0xff,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
- 0xff, 0x5d, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xf4,
- 0x1d, 0xff, 0xff, 0xff, 0x8f, 0xff, 0x40, 0x1d,
- 0xff, 0xff, 0xf8, 0xff, 0xf4, 0x0, 0x1d, 0xff,
- 0xff, 0x8f, 0xff, 0x40, 0x0, 0x1d, 0xff, 0xf8,
- 0xff, 0xf4, 0x0, 0x0, 0x1d, 0xff, 0x8f, 0xff,
- 0x40, 0x0, 0x0, 0x1d, 0xf8, 0xff, 0xf3, 0x0,
- 0x0, 0x0, 0x1d, 0x87, 0x87, 0x0, 0x0, 0x0,
- 0x0, 0x14,
-
- /* U+F04B "" */
- 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xfd, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xfb, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xf9, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xe7,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xd4, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x71, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xc2, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xe6, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf9, 0x10, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xfc, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xfe, 0x60, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0x91, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x92, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
-
- /* U+F04C "" */
- 0x33, 0x33, 0x33, 0x32, 0x0, 0x3, 0x33, 0x33,
- 0x33, 0x2f, 0xff, 0xff, 0xff, 0xc0, 0x0, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff,
- 0xc0, 0x0, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xfc, 0x0, 0xf, 0xff, 0xff, 0xff, 0xcf,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0xff, 0xff, 0xff,
- 0xfc, 0xff, 0xff, 0xff, 0xfc, 0x0, 0xf, 0xff,
- 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xc0, 0x0,
- 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff,
- 0xff, 0xc0, 0x0, 0xff, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0xfc, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xcf, 0xff, 0xff, 0xff, 0xc0, 0x0, 0xff, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xc0,
- 0x0, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xfc, 0x0, 0xf, 0xff, 0xff, 0xff, 0xcf, 0xff,
- 0xff, 0xff, 0xc0, 0x0, 0xff, 0xff, 0xff, 0xfc,
- 0xff, 0xff, 0xff, 0xfc, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0xcf, 0xff, 0xff, 0xff, 0xc0, 0x0, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0x0,
- 0xf, 0xff, 0xff, 0xff, 0xc7, 0x88, 0x88, 0x88,
- 0x50, 0x0, 0x78, 0x88, 0x88, 0x85,
-
- /* U+F04D "" */
- 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xc7, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x85,
-
- /* U+F051 "" */
- 0x20, 0x0, 0x0, 0x0, 0x1, 0x33, 0x1f, 0x30,
- 0x0, 0x0, 0x0, 0x8f, 0xf8, 0xfe, 0x30, 0x0,
- 0x0, 0x8, 0xff, 0x8f, 0xfe, 0x30, 0x0, 0x0,
- 0x8f, 0xf8, 0xff, 0xfe, 0x30, 0x0, 0x8, 0xff,
- 0x8f, 0xff, 0xfe, 0x30, 0x0, 0x8f, 0xf8, 0xff,
- 0xff, 0xfe, 0x30, 0x8, 0xff, 0x8f, 0xff, 0xff,
- 0xfe, 0x30, 0x8f, 0xf8, 0xff, 0xff, 0xff, 0xfe,
- 0x38, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0xaf,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x8f,
- 0xff, 0xff, 0xff, 0xf6, 0x8f, 0xf8, 0xff, 0xff,
- 0xff, 0xf6, 0x8, 0xff, 0x8f, 0xff, 0xff, 0xf6,
- 0x0, 0x8f, 0xf8, 0xff, 0xff, 0xf6, 0x0, 0x8,
- 0xff, 0x8f, 0xff, 0xf6, 0x0, 0x0, 0x8f, 0xf8,
- 0xff, 0xf6, 0x0, 0x0, 0x8, 0xff, 0x8f, 0xf6,
- 0x0, 0x0, 0x0, 0x8f, 0xf8, 0xf6, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0x85, 0x0, 0x0, 0x0, 0x0,
- 0x38, 0x83,
-
- /* U+F052 "" */
- 0x0, 0x0, 0x0, 0x0, 0x3b, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0xfe, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0xff,
- 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e,
- 0xff, 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x3e, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x0, 0x0,
- 0x0, 0x3e, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x30,
- 0x0, 0x0, 0x3e, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x30, 0x0, 0x3e, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x30, 0x3e, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3b, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc9, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x9, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
-
- /* U+F053 "" */
- 0x0, 0x0, 0x0, 0x0, 0x7, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xfe, 0x30, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xfe, 0x30, 0x0, 0x0, 0xa, 0xff,
- 0xff, 0xf7, 0x0, 0x0, 0xa, 0xff, 0xff, 0xfa,
- 0x0, 0x0, 0xa, 0xff, 0xff, 0xfa, 0x0, 0x0,
- 0xa, 0xff, 0xff, 0xfa, 0x0, 0x0, 0xa, 0xff,
- 0xff, 0xfa, 0x0, 0x0, 0xa, 0xff, 0xff, 0xfa,
- 0x0, 0x0, 0xa, 0xff, 0xff, 0xfa, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xfe, 0x30, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xfe, 0x30, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xfe, 0x30, 0x0, 0x0, 0x6, 0xff, 0xff, 0xfe,
- 0x30, 0x0, 0x0, 0x6, 0xff, 0xff, 0xfe, 0x30,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xfe, 0x30, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x6,
- 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x2, 0x10,
- 0x0,
-
- /* U+F054 "" */
- 0x0, 0x55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6,
- 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x1d, 0xff, 0xff, 0xf6, 0x0, 0x0,
- 0x0, 0x1d, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0x1d, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x1d,
- 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x1d, 0xff,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff,
- 0xf6, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xb0,
- 0x0, 0x0, 0x6f, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x6f, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xf3, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xf3,
- 0x0, 0x0, 0x6f, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x6f, 0xff, 0xff, 0xf3, 0x0, 0x0, 0xd, 0xff,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0,
- 0x0,
-
- /* U+F067 "" */
- 0x0, 0x0, 0x0, 0x4, 0x33, 0x20, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xd0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xbf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0x7c, 0xcc, 0xcc, 0xff, 0xff,
- 0xfc, 0xcc, 0xcc, 0xa0, 0x0, 0x0, 0x0, 0xcf,
- 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xff, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xff, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xb0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xe9, 0x0,
+ 0x5, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3e, 0xff, 0xfc, 0x10, 0x7f, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
+ 0xfe, 0x37, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x9f, 0xff, 0xb4, 0xdf, 0xff, 0xbf, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xff, 0x80,
+ 0x1, 0xbf, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
+ 0x2, 0xdf, 0xff, 0x50, 0x8f, 0x50, 0x9f, 0xff,
+ 0xff, 0x0, 0x0, 0x0, 0x4, 0xff, 0xfe, 0x30,
+ 0xbf, 0xff, 0x70, 0x6f, 0xff, 0xf1, 0x0, 0x0,
+ 0x7, 0xff, 0xfc, 0x12, 0xdf, 0xff, 0xff, 0xa0,
+ 0x3e, 0xff, 0xe3, 0x0, 0xa, 0xff, 0xfa, 0x3,
+ 0xef, 0xff, 0xff, 0xff, 0xc1, 0x2d, 0xff, 0xf6,
+ 0xc, 0xff, 0xf7, 0x6, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xe3, 0xb, 0xff, 0xf8, 0x9f, 0xf5, 0x9,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x8,
+ 0xff, 0x50, 0x93, 0xa, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf6, 0x5, 0x70, 0x0, 0x0,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xa0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xff, 0xff,
+ 0xcc, 0xcf, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0,
+ 0x0, 0xef, 0xff, 0xff, 0x50, 0x0, 0x9f, 0xff,
+ 0xff, 0xa0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xff,
+ 0xf5, 0x0, 0x9, 0xff, 0xff, 0xfa, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xff, 0xff, 0x50, 0x0, 0x9f,
+ 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0xe, 0xff,
+ 0xff, 0xf5, 0x0, 0x9, 0xff, 0xff, 0xfa, 0x0,
+ 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0x40, 0x0,
+ 0x8f, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x2,
+ 0x44, 0x44, 0x40, 0x0, 0x1, 0x44, 0x44, 0x41,
0x0, 0x0,
- /* U+F068 "" */
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* U+F019 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
+ 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xcf, 0xff, 0xfc, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfc,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xcf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfc, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff,
+ 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xcf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfc, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xee, 0xee, 0xff,
+ 0xff, 0xff, 0xee, 0xee, 0x20, 0x0, 0x0, 0x2,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20,
+ 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xf3, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
+ 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4f, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
+ 0xcf, 0xff, 0xff, 0xfc, 0x4, 0xff, 0x40, 0xcf,
+ 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xc0,
+ 0x23, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x44, 0xcf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf1, 0x6e, 0xb, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xaf,
+ 0x5d, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfb,
+
+ /* U+F01C "" */
+ 0x0, 0x0, 0x4, 0xab, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xa2, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x0,
+ 0x0, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x9f,
+ 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff,
+ 0x50, 0x0, 0x0, 0x4f, 0xfe, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4f, 0xfe, 0x10, 0x0, 0xd,
+ 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xaf, 0xfa, 0x0, 0x9, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xf5, 0x3,
+ 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xff, 0xe1, 0xdf, 0xfa, 0x44, 0x44,
+ 0x20, 0x0, 0x0, 0x0, 0x34, 0x44, 0x4d, 0xff,
+ 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
+ 0xff, 0xf7, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
+ 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xe8, 0x88,
+ 0x88, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
+ 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0x10,
+
+ /* U+F021 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6, 0x76, 0x0, 0x0, 0x0, 0x5, 0x9c,
+ 0xdd, 0xb8, 0x30, 0x0, 0xf, 0xff, 0x0, 0x0,
+ 0x6, 0xef, 0xff, 0xff, 0xff, 0xfc, 0x40, 0xf,
+ 0xff, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0xf, 0xff, 0x0, 0xc, 0xff, 0xff,
+ 0xa5, 0x34, 0x6b, 0xff, 0xff, 0xce, 0xff, 0x0,
+ 0xaf, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x2b, 0xff,
+ 0xff, 0xff, 0x5, 0xff, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xff, 0xff, 0xd, 0xff, 0xb0,
+ 0x0, 0x0, 0x0, 0x7d, 0xdc, 0xbf, 0xff, 0xff,
+ 0x2f, 0xff, 0x20, 0x0, 0x0, 0x0, 0xaf, 0xff,
+ 0xff, 0xff, 0xff, 0x6f, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0x2, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x22, 0x22,
+ 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xde,
+ 0xee, 0xee, 0xee, 0xe7, 0x0, 0x0, 0x0, 0x0,
+ 0x9e, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
+ 0x0, 0x0, 0x1, 0xff, 0xf3, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0x0, 0x0, 0x0, 0x9, 0xff, 0xe0,
+ 0xff, 0xff, 0xf4, 0x0, 0x10, 0x0, 0x0, 0x0,
+ 0x5f, 0xff, 0x70, 0xff, 0xff, 0xff, 0x70, 0x0,
+ 0x0, 0x0, 0x7, 0xff, 0xfd, 0x0, 0xff, 0xff,
+ 0xff, 0xfd, 0x61, 0x0, 0x5, 0xcf, 0xff, 0xf2,
+ 0x0, 0xff, 0xe3, 0xef, 0xff, 0xff, 0xee, 0xff,
+ 0xff, 0xfe, 0x30, 0x0, 0xff, 0xf0, 0x19, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xb1, 0x0, 0x0, 0xff,
+ 0xf0, 0x0, 0x28, 0xdf, 0xff, 0xfe, 0xa3, 0x0,
+ 0x0, 0x0, 0xab, 0xa0, 0x0, 0x0, 0x1, 0x33,
+ 0x10, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F026 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x30, 0x0, 0x0,
+ 0x0, 0x6, 0xff, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0xf0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x24, 0x44,
+ 0x47, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0x0, 0x0, 0x2e, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x2e, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x2e, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x2e, 0xc0, 0x0, 0x0,
+ 0x0, 0x0, 0x0,
+
+ /* U+F027 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0x30, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x24, 0x44, 0x47, 0xff, 0xff, 0xf0,
+ 0x0, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x75, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x2f, 0xf7, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0x7f, 0xf0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0x0, 0xdf, 0x3f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0xf, 0xf3, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf0, 0xc, 0xfd, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x1, 0xfe, 0x20, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0x1, 0x0, 0x0, 0x0,
+ 0x0, 0x2e, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2e, 0xff, 0xf0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2e, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2d, 0xc0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F028 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x30, 0x0,
+ 0x0, 0x0, 0x9f, 0xf7, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6, 0xff, 0x0, 0x0, 0x1, 0x0, 0x7f,
+ 0xf5, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf0,
+ 0x0, 0x5, 0xf9, 0x0, 0x9f, 0xe1, 0x0, 0x0,
+ 0x0, 0x6, 0xff, 0xff, 0x0, 0x0, 0x4f, 0xfb,
+ 0x0, 0xdf, 0x80, 0x24, 0x44, 0x47, 0xff, 0xff,
+ 0xf0, 0x0, 0x0, 0x3f, 0xf7, 0x4, 0xff, 0xe,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x86, 0x0,
+ 0x4f, 0xf1, 0xd, 0xf4, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0x2f, 0xf7, 0x0, 0xcf, 0x60, 0x9f,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x6f,
+ 0xf1, 0x7, 0xf9, 0x6, 0xfa, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf0, 0x0, 0xdf, 0x40, 0x5f, 0xb0,
+ 0x5f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x1f, 0xf2, 0x5, 0xfa, 0x5, 0xfb, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0xd, 0xfc, 0x0, 0x9f,
+ 0x80, 0x7f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x1, 0xfd, 0x20, 0x1e, 0xf3, 0xb, 0xf6, 0xbf,
+ 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1, 0x0, 0xa,
+ 0xfc, 0x1, 0xff, 0x20, 0x0, 0x0, 0x2e, 0xff,
+ 0xff, 0x0, 0x0, 0xb, 0xff, 0x20, 0x8f, 0xc0,
+ 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf0, 0x0, 0x7,
+ 0xff, 0x40, 0x2f, 0xf4, 0x0, 0x0, 0x0, 0x0,
+ 0x2e, 0xff, 0x0, 0x0, 0x19, 0x20, 0x1d, 0xfa,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xc0, 0x0,
+ 0x0, 0x0, 0x2d, 0xfd, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xfd,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0xfb, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0,
+
+ /* U+F03E "" */
+ 0x5, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x50, 0x9f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf6, 0x1, 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x70, 0x0, 0xd, 0xff, 0xff, 0xff, 0xdb, 0xff,
+ 0xff, 0xff, 0xff, 0xc0, 0x0, 0x2f, 0xff, 0xff,
+ 0xfd, 0x10, 0xaf, 0xff, 0xff, 0xff, 0xfb, 0x56,
+ 0xef, 0xff, 0xff, 0xd1, 0x0, 0xa, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10, 0x0,
+ 0x0, 0xaf, 0xff, 0xff, 0xff, 0xf7, 0x2e, 0xff,
+ 0xd1, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff,
+ 0x70, 0x2, 0xed, 0x10, 0x0, 0x0, 0x0, 0xc,
+ 0xff, 0xff, 0xf7, 0x0, 0x0, 0x21, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
+ 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xff, 0xff, 0xfc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xe4,
+
+ /* U+F048 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xef, 0xc0, 0x0, 0x0, 0x0, 0xb, 0xd3, 0x2f,
+ 0xfe, 0x0, 0x0, 0x0, 0x1d, 0xff, 0x82, 0xff,
+ 0xe0, 0x0, 0x0, 0x2d, 0xff, 0xf9, 0x2f, 0xfe,
+ 0x0, 0x0, 0x2e, 0xff, 0xff, 0x92, 0xff, 0xe0,
+ 0x0, 0x3e, 0xff, 0xff, 0xf9, 0x2f, 0xfe, 0x0,
+ 0x4f, 0xff, 0xff, 0xff, 0x92, 0xff, 0xe0, 0x5f,
+ 0xff, 0xff, 0xff, 0xf9, 0x2f, 0xfe, 0x6f, 0xff,
+ 0xff, 0xff, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf9, 0x2f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0x2f, 0xff, 0xcf, 0xff, 0xff, 0xff,
+ 0xff, 0x92, 0xff, 0xe0, 0xbf, 0xff, 0xff, 0xff,
+ 0xf9, 0x2f, 0xfe, 0x0, 0xaf, 0xff, 0xff, 0xff,
+ 0x92, 0xff, 0xe0, 0x0, 0x8f, 0xff, 0xff, 0xf9,
+ 0x2f, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0x92,
+ 0xff, 0xe0, 0x0, 0x0, 0x6f, 0xff, 0xf9, 0x2f,
+ 0xfe, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x92, 0xff,
+ 0xe0, 0x0, 0x0, 0x0, 0x4f, 0xf5, 0x4, 0x43,
+ 0x0, 0x0, 0x0, 0x0, 0x13, 0x0,
+
+ /* U+F04B "" */
+ 0x2, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xfb, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xf8, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x60, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x30, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
+ 0x10, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf7, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0x40, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0xff, 0xfd, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xcf, 0xff, 0x91, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2a, 0xa3, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F04C "" */
+ 0x3d, 0xff, 0xff, 0xe6, 0x0, 0x3, 0xdf, 0xff,
+ 0xfe, 0x60, 0xdf, 0xff, 0xff, 0xff, 0x10, 0xd,
+ 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff,
+ 0x30, 0xf, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
+ 0xff, 0xff, 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0x40, 0xf, 0xff, 0xff,
+ 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x40, 0xf,
+ 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
+ 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
+ 0xff, 0xff, 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0x40, 0xf, 0xff, 0xff,
+ 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x40, 0xf,
+ 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
+ 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
+ 0xff, 0xff, 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0x40, 0xf, 0xff, 0xff,
+ 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x40, 0xf,
+ 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
+ 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
+ 0xff, 0xff, 0x40, 0xf, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0x40, 0xf, 0xff, 0xff,
+ 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x30, 0xf,
+ 0xff, 0xff, 0xff, 0xf3, 0x8f, 0xff, 0xff, 0xfb,
+ 0x0, 0x8, 0xff, 0xff, 0xff, 0xb0, 0x2, 0x44,
+ 0x44, 0x30, 0x0, 0x0, 0x24, 0x44, 0x43, 0x0,
+
+ /* U+F04D "" */
+ 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0x60, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0x7c, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xa0,
+ 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf3, 0x8f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x2, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x0,
+
+ /* U+F051 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0xdc, 0x10, 0x0, 0x0, 0x0, 0xbf, 0xf3, 0x7f,
+ 0xfd, 0x20, 0x0, 0x0, 0xd, 0xff, 0x47, 0xff,
+ 0xfe, 0x30, 0x0, 0x0, 0xdf, 0xf4, 0x7f, 0xff,
+ 0xff, 0x40, 0x0, 0xd, 0xff, 0x47, 0xff, 0xff,
+ 0xff, 0x50, 0x0, 0xdf, 0xf4, 0x7f, 0xff, 0xff,
+ 0xff, 0x60, 0xd, 0xff, 0x47, 0xff, 0xff, 0xff,
+ 0xff, 0x70, 0xdf, 0xf4, 0x7f, 0xff, 0xff, 0xff,
+ 0xff, 0x8d, 0xff, 0x47, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf4, 0x7f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x47, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf4, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xcd,
+ 0xff, 0x47, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xdf,
+ 0xf4, 0x7f, 0xff, 0xff, 0xff, 0xa0, 0xd, 0xff,
+ 0x47, 0xff, 0xff, 0xff, 0x90, 0x0, 0xdf, 0xf4,
+ 0x7f, 0xff, 0xff, 0x80, 0x0, 0xd, 0xff, 0x47,
+ 0xff, 0xff, 0x70, 0x0, 0x0, 0xdf, 0xf4, 0x7f,
+ 0xff, 0x60, 0x0, 0x0, 0xd, 0xff, 0x44, 0xff,
+ 0x50, 0x0, 0x0, 0x0, 0xcf, 0xf4, 0x2, 0x20,
+ 0x0, 0x0, 0x0, 0x2, 0x44, 0x0,
+
+ /* U+F052 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x8, 0xea, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff,
+ 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x7, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfa, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0,
+ 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6,
+ 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf5, 0x0, 0x1, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0xcf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe1, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x30, 0x9f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x56,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x61,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf4, 0xe, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20,
+ 0x27, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x30,
+
+ /* U+F053 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x19, 0x20, 0x0, 0x0,
+ 0x0, 0x1, 0xdf, 0xe2, 0x0, 0x0, 0x0, 0x1d,
+ 0xff, 0xf8, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xd1,
+ 0x0, 0x0, 0x1d, 0xff, 0xfc, 0x10, 0x0, 0x1,
+ 0xdf, 0xff, 0xc1, 0x0, 0x0, 0x1d, 0xff, 0xfc,
+ 0x10, 0x0, 0x1, 0xdf, 0xff, 0xc1, 0x0, 0x0,
+ 0x1d, 0xff, 0xfc, 0x10, 0x0, 0x0, 0xbf, 0xff,
+ 0xd1, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf6, 0x0,
+ 0x0, 0x0, 0x7, 0xff, 0xff, 0x60, 0x0, 0x0,
+ 0x0, 0x7f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x7f, 0xff,
+ 0xf6, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0x60,
+ 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf5, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0x90, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0,
+
+ /* U+F054 "" */
+ 0x5, 0x80, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xfb,
+ 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xb0, 0x0,
+ 0x0, 0x0, 0x3e, 0xff, 0xfb, 0x0, 0x0, 0x0,
+ 0x3, 0xef, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x3e,
+ 0xff, 0xfb, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff,
+ 0xb0, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xfb, 0x0,
+ 0x0, 0x0, 0x3, 0xef, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x3f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x9f,
+ 0xff, 0xf3, 0x0, 0x0, 0x9, 0xff, 0xff, 0x40,
+ 0x0, 0x0, 0x9f, 0xff, 0xf4, 0x0, 0x0, 0x9,
+ 0xff, 0xff, 0x40, 0x0, 0x0, 0x9f, 0xff, 0xf4,
+ 0x0, 0x0, 0x9, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x8f, 0xff, 0xf4, 0x0, 0x0, 0x0, 0xaf, 0xff,
+ 0x40, 0x0, 0x0, 0x0, 0x1c, 0xf4, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F067 "" */
+ 0x0, 0x0, 0x0, 0x1, 0xbe, 0xd3, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xfa,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x14, 0x55,
+ 0x55, 0x59, 0xff, 0xfc, 0x55, 0x55, 0x54, 0x20,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x6c, 0xdd,
+ 0xdd, 0xde, 0xff, 0xff, 0xdd, 0xdd, 0xdc, 0x90,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x36, 0x50, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F068 "" */
+ 0x2, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xb0,
+
+ /* U+F06E "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x23, 0x43, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5b, 0xff, 0xff, 0xff, 0xea, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5, 0xef, 0xff, 0xfd, 0xce,
+ 0xff, 0xff, 0xc3, 0x0, 0x0, 0x0, 0x0, 0x1b,
+ 0xff, 0xff, 0x71, 0x0, 0x2, 0x9f, 0xff, 0xf8,
+ 0x0, 0x0, 0x0, 0x2d, 0xff, 0xfe, 0x20, 0x2,
+ 0x53, 0x0, 0x5f, 0xff, 0xfb, 0x0, 0x0, 0x1e,
+ 0xff, 0xff, 0x30, 0x0, 0x6f, 0xfc, 0x10, 0x7f,
+ 0xff, 0xfb, 0x0, 0xc, 0xff, 0xff, 0xa0, 0x0,
+ 0x6, 0xff, 0xfc, 0x0, 0xef, 0xff, 0xf8, 0x6,
+ 0xff, 0xff, 0xf5, 0x1, 0x3, 0xef, 0xff, 0xf4,
+ 0x9, 0xff, 0xff, 0xf3, 0xef, 0xff, 0xff, 0x30,
+ 0xbf, 0xff, 0xff, 0xff, 0x70, 0x7f, 0xff, 0xff,
+ 0xad, 0xff, 0xff, 0xf3, 0xa, 0xff, 0xff, 0xff,
+ 0xf6, 0x7, 0xff, 0xff, 0xf9, 0x3f, 0xff, 0xff,
+ 0x60, 0x5f, 0xff, 0xff, 0xff, 0x10, 0xaf, 0xff,
+ 0xfe, 0x10, 0x8f, 0xff, 0xfc, 0x0, 0xaf, 0xff,
+ 0xff, 0x60, 0x1f, 0xff, 0xff, 0x50, 0x0, 0xaf,
+ 0xff, 0xf6, 0x0, 0x6c, 0xdb, 0x40, 0xa, 0xff,
+ 0xff, 0x70, 0x0, 0x0, 0xaf, 0xff, 0xf6, 0x0,
+ 0x0, 0x0, 0x9, 0xff, 0xff, 0x70, 0x0, 0x0,
+ 0x0, 0x6f, 0xff, 0xfc, 0x52, 0x12, 0x6d, 0xff,
+ 0xfe, 0x40, 0x0, 0x0, 0x0, 0x0, 0x19, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x5a, 0xde, 0xfe, 0xd9,
+ 0x50, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F070 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0x70,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xef, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xff, 0xd2, 0x0, 0x0, 0x0,
+ 0x24, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0xef, 0xff, 0x60, 0x28, 0xcf, 0xff, 0xff,
+ 0xfb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b,
+ 0xff, 0xfc, 0xff, 0xff, 0xec, 0xdf, 0xff, 0xfe,
+ 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xff, 0xa3, 0x0, 0x0, 0x6e, 0xff, 0xfc, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0x70,
+ 0x15, 0x40, 0x1, 0xdf, 0xff, 0xe3, 0x0, 0x0,
+ 0x0, 0x1, 0x0, 0x1c, 0xff, 0xfb, 0x1f, 0xfe,
+ 0x50, 0x2f, 0xff, 0xff, 0x20, 0x0, 0x0, 0x7e,
+ 0x30, 0x0, 0x9f, 0xff, 0xef, 0xff, 0xf3, 0x8,
+ 0xff, 0xff, 0xd0, 0x0, 0x2, 0xff, 0xf6, 0x0,
+ 0x5, 0xff, 0xff, 0xff, 0xfa, 0x3, 0xff, 0xff,
+ 0xf8, 0x0, 0x8, 0xff, 0xff, 0xa0, 0x0, 0x2d,
+ 0xff, 0xff, 0xfd, 0x1, 0xff, 0xff, 0xff, 0x0,
+ 0x6, 0xff, 0xff, 0xfa, 0x0, 0x0, 0xaf, 0xff,
+ 0xfb, 0x2, 0xff, 0xff, 0xfe, 0x0, 0x0, 0xdf,
+ 0xff, 0xfd, 0x0, 0x0, 0x6, 0xff, 0xff, 0x55,
+ 0xff, 0xff, 0xf5, 0x0, 0x0, 0x2f, 0xff, 0xff,
+ 0x40, 0x0, 0x0, 0x3d, 0xff, 0xfe, 0xff, 0xff,
+ 0x90, 0x0, 0x0, 0x4, 0xff, 0xff, 0xd0, 0x0,
+ 0x0, 0x0, 0xbf, 0xff, 0xff, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x4f, 0xff, 0xfb, 0x10, 0x0, 0x0,
+ 0x7, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xdf, 0xff, 0xe8, 0x31, 0x20, 0x0, 0x3e,
+ 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
+ 0xef, 0xff, 0xff, 0xfb, 0x0, 0x1, 0xbf, 0xff,
+ 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9c,
+ 0xef, 0xfd, 0x80, 0x0, 0x8, 0xff, 0xfd, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4e, 0xff, 0xf3, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0xcf, 0xf4, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8, 0x60,
/* U+F071 "" */
- 0x0, 0x0, 0x0, 0x0, 0x2, 0xaa, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xe, 0xff, 0xff, 0xff, 0xd0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xfa, 0x88,
- 0xaf, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xdf, 0xf4, 0x0, 0x4f, 0xfd, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xf4, 0x0, 0x4f, 0xff,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xf4,
- 0x0, 0x4f, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
- 0x9f, 0xff, 0xf5, 0x0, 0x6f, 0xff, 0xf9, 0x0,
- 0x0, 0x0, 0x2, 0xff, 0xff, 0xf8, 0x0, 0x8f,
- 0xff, 0xff, 0x20, 0x0, 0x0, 0xa, 0xff, 0xff,
- 0xf9, 0x33, 0x9f, 0xff, 0xff, 0xa0, 0x0, 0x0,
- 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xfa, 0x44,
- 0xaf, 0xff, 0xff, 0xfb, 0x0, 0x4, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0x8f, 0xff, 0xff, 0xff, 0x40,
- 0xe, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0xd0, 0x6f, 0xff, 0xff, 0xff, 0xfc,
- 0x77, 0xcf, 0xff, 0xff, 0xff, 0xf6, 0xef, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1d, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xb, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff,
+ 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xa0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff,
+ 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xf6,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0xff, 0xfd, 0x88, 0x8f, 0xff, 0xe0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x80,
+ 0x0, 0xcf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xff, 0xf9, 0x0, 0xd, 0xff,
+ 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe,
+ 0xff, 0xff, 0xa0, 0x0, 0xef, 0xff, 0xfb, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xfb,
+ 0x0, 0xf, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0xff, 0xff, 0xff, 0xc0, 0x0, 0xff,
+ 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xff, 0xff, 0xfd, 0x0, 0x1f, 0xff, 0xff, 0xff,
+ 0x70, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff,
+ 0xfd, 0xcd, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0,
+ 0x0, 0xd, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x6f,
+ 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x7, 0xff,
+ 0xff, 0xff, 0xff, 0x80, 0x0, 0xbf, 0xff, 0xff,
+ 0xff, 0xf3, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xc0,
+ 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x17,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0xf, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x38, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x83,
+ 0xff, 0xff, 0xfb, 0x0, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x90, 0x2, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x90, 0x0,
/* U+F074 "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xc1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfc,
- 0x10, 0xbb, 0xb9, 0x52, 0x0, 0x0, 0x2, 0x6b,
- 0xbb, 0xbe, 0xff, 0xc1, 0xff, 0xff, 0xff, 0x70,
- 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
- 0xff, 0xff, 0xf9, 0x6, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0x78, 0x88, 0xcf, 0xfe, 0x4f, 0xff,
- 0xe8, 0x88, 0x8e, 0xff, 0xa0, 0x0, 0x0, 0xa,
- 0xf6, 0xcf, 0xfe, 0x10, 0x0, 0xc, 0xfa, 0x0,
- 0x0, 0x0, 0x1, 0xd4, 0xff, 0xf4, 0x0, 0x0,
- 0xc, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x2b, 0xff,
- 0xc0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfe, 0x30, 0x0,
- 0x0, 0x5, 0x10, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xf6, 0xc7, 0x0, 0x0, 0xc, 0xc1, 0x0, 0x0,
- 0x0, 0x1c, 0xff, 0xe4, 0xfe, 0x40, 0x0, 0xc,
- 0xfc, 0x10, 0xbb, 0xbb, 0xff, 0xff, 0x4b, 0xff,
- 0xfc, 0xbb, 0xbe, 0xff, 0xc1, 0xff, 0xff, 0xff,
- 0xf6, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0xff, 0xff, 0xff, 0x60, 0x0, 0x3c, 0xff, 0xff,
- 0xff, 0xff, 0xfa, 0x78, 0x88, 0x40, 0x0, 0x0,
- 0x0, 0x36, 0x88, 0x8e, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfa,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3c, 0x50, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf5,
+ 0x0, 0x12, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x22, 0x9f, 0xff, 0x50, 0xff, 0xff, 0xfe, 0x20,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf5, 0xff,
+ 0xff, 0xff, 0xe2, 0x0, 0x0, 0xcf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10, 0xb,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0x45, 0x55, 0xbf,
+ 0xff, 0x60, 0xaf, 0xff, 0xd5, 0xaf, 0xff, 0x80,
+ 0x0, 0x0, 0xb, 0xf8, 0xa, 0xff, 0xfe, 0x10,
+ 0x8f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x70, 0x9f,
+ 0xff, 0xe2, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0,
+ 0x0, 0x8, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf3, 0x10,
+ 0x0, 0x2a, 0x30, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0xff, 0x41, 0xda, 0x0, 0x7f, 0xf3, 0x0, 0x0,
+ 0x0, 0x5f, 0xff, 0xf4, 0xd, 0xff, 0x90, 0x8f,
+ 0xff, 0x30, 0xef, 0xff, 0xff, 0xff, 0x50, 0x2e,
+ 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff,
+ 0xf6, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xfe,
+ 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x3f, 0xff,
+ 0xff, 0xff, 0xfa, 0x67, 0x77, 0x75, 0x0, 0x0,
+ 0x0, 0x3, 0x77, 0xbf, 0xff, 0xa0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xfa,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0,
/* U+F077 "" */
- 0x0, 0x0, 0x0, 0x0, 0x1b, 0xb1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xfc,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c,
- 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xcf, 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xc1,
- 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0x10, 0x0, 0x0, 0x1c, 0xff, 0xff,
- 0xf6, 0x6f, 0xff, 0xff, 0xc1, 0x0, 0x1, 0xcf,
- 0xff, 0xff, 0x60, 0x6, 0xff, 0xff, 0xfc, 0x10,
- 0x1c, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xc1, 0xcf, 0xff, 0xff, 0x60, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xfb, 0x9f, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf9, 0xa, 0xff,
- 0x60, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xa0,
- 0x0, 0x96, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x89, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4e, 0x70, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x70,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
+ 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
+ 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x4f, 0xff, 0xfc, 0xff, 0xff, 0x70, 0x0, 0x0,
+ 0x0, 0x4f, 0xff, 0xfa, 0x5, 0xff, 0xff, 0x70,
+ 0x0, 0x0, 0x4f, 0xff, 0xfa, 0x0, 0x5, 0xff,
+ 0xff, 0x70, 0x0, 0x4f, 0xff, 0xf9, 0x0, 0x0,
+ 0x6, 0xff, 0xff, 0x70, 0x3f, 0xff, 0xf9, 0x0,
+ 0x0, 0x0, 0x6, 0xff, 0xff, 0x7a, 0xff, 0xf9,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x2e,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0x50, 0x25, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0x40,
/* U+F078 "" */
- 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x22, 0x0, 0x3, 0xee, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xee, 0x30, 0x3e, 0xff, 0xe3, 0x0,
- 0x0, 0x0, 0x0, 0x3e, 0xff, 0xe3, 0xcf, 0xff,
- 0xfe, 0x30, 0x0, 0x0, 0x3, 0xef, 0xff, 0xfc,
- 0x3f, 0xff, 0xff, 0xe3, 0x0, 0x0, 0x3e, 0xff,
- 0xff, 0xf3, 0x3, 0xff, 0xff, 0xfe, 0x30, 0x3,
- 0xef, 0xff, 0xff, 0x30, 0x0, 0x3f, 0xff, 0xff,
- 0xe3, 0x3e, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x3,
- 0xff, 0xff, 0xfe, 0xef, 0xff, 0xff, 0x30, 0x0,
- 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x20,
- 0x0, 0x0, 0x0, 0x0,
+ 0x9, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xcb, 0x18, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0xcf, 0xfc, 0x9f, 0xff, 0xe3, 0x0, 0x0,
+ 0x0, 0x1, 0xcf, 0xff, 0xd0, 0xbf, 0xff, 0xe3,
+ 0x0, 0x0, 0x1, 0xcf, 0xff, 0xd1, 0x0, 0xbf,
+ 0xff, 0xe3, 0x0, 0x1, 0xcf, 0xff, 0xd1, 0x0,
+ 0x0, 0xbf, 0xff, 0xe3, 0x1, 0xcf, 0xff, 0xd1,
+ 0x0, 0x0, 0x0, 0xbf, 0xff, 0xe4, 0xcf, 0xff,
+ 0xd1, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff,
+ 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xff, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xbf, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xd1, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x61, 0x0, 0x0,
+ 0x0, 0x0,
/* U+F079 "" */
- 0x0, 0x0, 0x0, 0x0, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x10, 0x0, 0x0, 0x3, 0xe9, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0,
- 0x0, 0x1e, 0xff, 0x70, 0x4f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x0, 0x1, 0xcf, 0xff, 0xf5,
- 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0,
- 0xa, 0xff, 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0x80, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xd1, 0x0, 0x0, 0x0, 0xc, 0xff, 0x80, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0x80, 0x0, 0x14, 0x4d, 0xff, 0x74,
- 0x30, 0x0, 0x0, 0x0, 0xc, 0xff, 0x80, 0x0,
- 0x0, 0xc, 0xff, 0x40, 0x0, 0x0, 0x0, 0x23,
- 0x3c, 0xff, 0x93, 0x31, 0x0, 0xc, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xf8,
- 0x0, 0xc, 0xff, 0x40, 0x0, 0x0, 0x0, 0x4f,
- 0xff, 0xff, 0xff, 0xe1, 0x0, 0xc, 0xff, 0x63,
- 0x33, 0x33, 0x32, 0x6, 0xff, 0xff, 0xff, 0x30,
- 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x30,
- 0xaf, 0xff, 0xf5, 0x0, 0x0, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xc1, 0xc, 0xff, 0x70, 0x0,
- 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
- 0x1, 0xda, 0x0, 0x0,
+ 0x0, 0x0, 0x27, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0xef, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xfd,
+ 0x10, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
+ 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xd1, 0x3f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0,
+ 0x2e, 0xff, 0xff, 0xff, 0xfd, 0x15, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xef, 0xf1, 0x0, 0x0, 0xdf, 0xfb,
+ 0xef, 0xdc, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
+ 0xaf, 0xf1, 0x0, 0x0, 0x9f, 0xc0, 0xef, 0xd1,
+ 0xdf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf1,
+ 0x0, 0x0, 0x3, 0x0, 0xef, 0xd0, 0x3, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xd0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xaf, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0,
+ 0x0, 0x0, 0x0, 0x0, 0x7, 0x50, 0xaf, 0xf1,
+ 0x19, 0x30, 0x0, 0x0, 0xef, 0xd0, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xf6, 0xaf, 0xf3, 0xdf, 0xe0,
+ 0x0, 0x0, 0xef, 0xd0, 0x0, 0x0, 0x0, 0x0,
+ 0x5f, 0xff, 0xef, 0xfe, 0xff, 0xd0, 0x0, 0x0,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x17, 0xff,
+ 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x6f, 0xff, 0xff,
+ 0xd1, 0x0, 0x0, 0x0, 0x6b, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xba, 0x30, 0x6, 0xff, 0xfc, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xc1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x0, 0x0, 0x0,
/* U+F07B "" */
- 0x0, 0x43, 0x33, 0x32, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0xdf, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0x83, 0x33, 0x33, 0x33,
- 0x30, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe6, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x21, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x40,
-
- /* U+F093 "" */
- 0x0, 0x0, 0x0, 0x0, 0xa, 0xe3, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff,
- 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xe3, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff,
- 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe3, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x7, 0xbb, 0xbb, 0xb7, 0x3, 0x44, 0x41, 0x2b,
- 0xbb, 0xbb, 0xa1, 0xff, 0xff, 0xff, 0xf7, 0x33,
- 0x33, 0x4c, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb,
- 0xfb, 0xbf, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf5, 0x7f, 0x75, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x75,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x71,
-
- /* U+F095 "" */
- 0x0, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x9, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5f, 0xff, 0xe1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xff, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xfd,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff,
- 0xb1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0xfd, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xc1, 0x0,
- 0x0, 0x12, 0x0, 0x0, 0x0, 0x6, 0xff, 0xfd,
- 0x40, 0x1, 0xcf, 0x81, 0x0, 0x0, 0x0, 0x6f,
- 0xff, 0xf8, 0x2a, 0xff, 0xfe, 0x60, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xf2,
- 0x0, 0x0, 0x0, 0x1, 0x8f, 0xff, 0xff, 0xff,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6b, 0xff,
- 0xb5, 0x0,
-
- /* U+F0C4 "" */
- 0x2, 0x7b, 0x86, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3e, 0xff, 0xff, 0xe6, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0xdf, 0xb4,
- 0x6c, 0xff, 0x60, 0x0, 0x0, 0x0, 0x2, 0x9d,
- 0xc4, 0xff, 0x0, 0x0, 0x6f, 0xf2, 0x0, 0x0,
- 0x1, 0x7d, 0x40, 0x3f, 0xdf, 0x70, 0x0, 0xa,
- 0xf6, 0x0, 0x0, 0x6d, 0x60, 0x4, 0xe3, 0x5f,
- 0xf7, 0x10, 0x1b, 0xf7, 0x0, 0x4c, 0x81, 0x0,
- 0x7c, 0x10, 0x6, 0xff, 0xfd, 0xff, 0xfd, 0x7a,
- 0xa2, 0x0, 0x1a, 0x90, 0x0, 0x0, 0x3a, 0xff,
- 0xfe, 0x95, 0xc4, 0x0, 0x3, 0xc5, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x0, 0x7f, 0x4b, 0x50, 0x5c,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0x13, 0x31, 0x8c,
- 0x29, 0x59, 0xbd, 0x40, 0x0, 0x0, 0x0, 0x5c,
- 0xff, 0xff, 0xb1, 0x8a, 0xb7, 0x1, 0xc7, 0x0,
- 0x0, 0xa, 0xff, 0xec, 0xdf, 0xfd, 0x68, 0xe4,
- 0x0, 0x8, 0xb1, 0x0, 0x7f, 0xf6, 0x0, 0xb,
- 0xf6, 0x0, 0x2b, 0xa2, 0x0, 0x5c, 0x30, 0xef,
- 0x40, 0x0, 0xb, 0xf6, 0x0, 0x0, 0x4c, 0x71,
- 0x2, 0xc6, 0xff, 0x10, 0x0, 0x8f, 0xf1, 0x0,
- 0x0, 0x0, 0x6d, 0x60, 0x5e, 0xbf, 0xb7, 0x7d,
- 0xff, 0x60, 0x0, 0x0, 0x0, 0x1, 0x8e, 0xa2,
- 0x2e, 0xff, 0xff, 0xe4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x68, 0x83, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F0C5 "" */
- 0x0, 0x0, 0x0, 0x8b, 0xbb, 0xbb, 0xba, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xcc,
- 0xcc, 0xef, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xfc, 0x0, 0x0, 0x8f, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xfa, 0xcc, 0x0, 0x0, 0x8f,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xa0, 0xcc,
- 0x0, 0x0, 0x8f, 0x42, 0x33, 0x33, 0x30, 0xa,
- 0xfa, 0x0, 0xcc, 0x0, 0x0, 0x8f, 0xdf, 0xff,
- 0xff, 0xfc, 0x8f, 0xe7, 0x77, 0xdc, 0x0, 0x0,
- 0x8f, 0xfe, 0x88, 0x88, 0xcf, 0xff, 0xff, 0xff,
- 0xf9, 0x0, 0x3, 0xef, 0xec, 0x0, 0x0, 0x8f,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3e, 0xf3, 0xcc,
- 0x0, 0x0, 0x8f, 0xf8, 0x0, 0x0, 0x0, 0x3,
- 0xef, 0x30, 0xcc, 0x0, 0x0, 0x8f, 0xf8, 0x0,
- 0x0, 0x0, 0x3e, 0xf3, 0x0, 0xcc, 0x0, 0x0,
- 0x8f, 0xf8, 0x0, 0x0, 0x0, 0xef, 0xdb, 0xbb,
- 0xec, 0x0, 0x0, 0x8f, 0xf8, 0x0, 0x0, 0x2,
- 0xfe, 0xcc, 0xcc, 0xc3, 0x0, 0x0, 0x8f, 0xf8,
- 0x0, 0x0, 0x4, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xf8, 0x0, 0x0, 0x4, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf9, 0x33, 0x33,
- 0x36, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0x28, 0x88, 0x88, 0x8a, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x0, 0x0,
- 0x0, 0x4, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0x0, 0x0, 0x0, 0x4, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0x0, 0x0, 0x0, 0x4,
- 0xfb, 0x77, 0x77, 0x77, 0x77, 0x77, 0xbf, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x4, 0x44,
- 0x44, 0x44, 0x44, 0x44, 0x40,
-
- /* U+F0C7 "" */
- 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x0,
- 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf7, 0x0, 0x0, 0xfa, 0x4d, 0xff, 0xfe, 0x44,
- 0x5f, 0xab, 0xf9, 0x0, 0xf, 0x80, 0xcf, 0xff,
- 0xc0, 0x0, 0xf8, 0xa, 0xf9, 0x0, 0xf8, 0xc,
- 0xff, 0xfc, 0x0, 0xf, 0x80, 0xa, 0xf9, 0xf,
- 0x80, 0xcf, 0xff, 0xc0, 0x0, 0xf8, 0x0, 0xa,
- 0xf6, 0xf8, 0xc, 0xff, 0xfc, 0x0, 0xf, 0x80,
- 0x0, 0xe, 0xcf, 0x80, 0xcf, 0xff, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0xcc, 0xf8, 0x3, 0x88, 0x88,
- 0x88, 0x88, 0x10, 0x0, 0xc, 0xcf, 0x80, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0xcf, 0x80, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x0, 0xcc, 0xf8, 0xb, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0xc, 0xcf, 0x80, 0xcd, 0x44, 0x44,
- 0x44, 0x44, 0x4d, 0xc0, 0xcc, 0xf8, 0xc, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0xcc, 0xc, 0xcf, 0x80,
- 0xcc, 0x0, 0x0, 0x0, 0x0, 0xc, 0xc0, 0xcc,
- 0xf8, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xcc,
- 0xc, 0xcf, 0x80, 0xcc, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xc0, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xc5, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x83,
-
- /* U+F0E7 "" */
- 0x0, 0x13, 0x33, 0x32, 0x0, 0x0, 0xa, 0xff,
- 0xff, 0x70, 0x0, 0x0, 0xef, 0xff, 0xf2, 0x0,
- 0x0, 0x2f, 0xff, 0xfd, 0x0, 0x0, 0x5, 0xff,
- 0xff, 0x60, 0x0, 0x0, 0x9f, 0xff, 0xf1, 0x0,
- 0x0, 0xd, 0xff, 0xfa, 0x25, 0x9d, 0xf1, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x5f, 0xff, 0xff, 0xff,
- 0xff, 0x29, 0xff, 0xff, 0xff, 0xff, 0xa0, 0xdf,
- 0xff, 0xed, 0xff, 0xf2, 0xc, 0xa6, 0x20, 0x9f,
- 0xfa, 0x0, 0x0, 0x0, 0xc, 0xff, 0x40, 0x0,
- 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x4f,
- 0xf4, 0x0, 0x0, 0x0, 0x8, 0xfd, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0x60, 0x0, 0x0, 0x0, 0xf,
- 0xe0, 0x0, 0x0, 0x0, 0x4, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0x80, 0x0, 0x0, 0x0,
-
- /* U+F0F3 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xba, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xcf, 0xff, 0xfc, 0x50, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
- 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x60, 0x0, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0,
- 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x30, 0x3f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xa, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0xfb, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc9, 0xbf, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1b, 0xef, 0xb1, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F11C "" */
- 0x2, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x0, 0xaf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4,
- 0xfc, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
- 0x88, 0x88, 0x88, 0xf8, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8,
- 0xf8, 0xc, 0xc0, 0xcc, 0x8, 0xf0, 0x8f, 0x34,
- 0xf4, 0x3f, 0x80, 0xf8, 0xf8, 0x6, 0x60, 0x66,
- 0x4, 0x80, 0x48, 0x22, 0x82, 0x4f, 0x80, 0xf8,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0x80, 0xf8, 0xf8, 0x9, 0xbb, 0x33,
- 0xb6, 0xc, 0x60, 0x99, 0x9, 0xcf, 0x80, 0xf8,
- 0xf8, 0x9, 0xcc, 0x32, 0xc6, 0xc, 0x60, 0x99,
- 0x9, 0xcc, 0x60, 0xf8, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8,
- 0xf8, 0x9, 0x90, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xb3, 0x2b, 0x60, 0xf8, 0xf8, 0x9, 0x90, 0x9c,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xc3, 0x3c, 0x60, 0xf8,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xf8, 0xfb, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0xf8,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe3,
-
- /* U+F124 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xbf, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xbf, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xbf, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x4,
- 0xbf, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x4,
- 0xbf, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x4,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x4,
- 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x0,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x9c, 0xcc, 0xcc, 0xcd, 0xff, 0xff, 0xf2,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x0, 0x0,
- 0x0, 0x0,
-
- /* U+F15B "" */
- 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xb0, 0x20, 0x0,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8,
- 0x90, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0x8f, 0x90, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x8, 0xff, 0x90, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0x8f, 0xff, 0x90, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x8, 0xff, 0xff,
- 0x90, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x48,
- 0x88, 0x88, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x50, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff,
+ 0x5, 0x78, 0x88, 0x88, 0x71, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xfd,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xcc,
+ 0xcc, 0xcc, 0xcb, 0x91, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcd,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfb, 0x4, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
- 0x44, 0x43, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xe4,
- /* U+F1EB "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x33, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x6a, 0xff, 0xff, 0xff, 0xfc, 0x63, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4b, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x40, 0x0, 0x0, 0x1, 0xbf,
+ /* U+F093 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xff, 0xc1, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xfc,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
+ 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x3, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
+ 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x10, 0x0, 0x0, 0x0, 0x11, 0x11, 0xef,
+ 0xff, 0xf9, 0x11, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xf9,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xef, 0xff, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0,
+ 0xcf, 0xff, 0xff, 0xe0, 0xdf, 0xff, 0xf8, 0xe,
+ 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xf3, 0x26,
+ 0x66, 0x50, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x52, 0x22, 0x25, 0xef, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb3, 0x0, 0x3, 0xef, 0xff, 0xfd, 0x83, 0x0,
- 0x0, 0x3, 0x7d, 0xff, 0xff, 0xe5, 0x5, 0xff,
- 0xff, 0xe4, 0x0, 0x25, 0x77, 0x76, 0x30, 0x4,
- 0xcf, 0xff, 0xf5, 0x1d, 0xff, 0x80, 0x17, 0xdf,
- 0xff, 0xff, 0xff, 0xd7, 0x10, 0x6f, 0xff, 0x30,
- 0x1b, 0x40, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x70, 0x3b, 0x30, 0x0, 0x0, 0xaf, 0xff,
- 0xff, 0xdb, 0x8b, 0xdf, 0xff, 0xff, 0xa1, 0x0,
- 0x0, 0x0, 0x1d, 0xff, 0xfa, 0x20, 0x0, 0x0,
- 0x18, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x1d,
- 0xc2, 0x3, 0x8b, 0xbb, 0x84, 0x2, 0xcf, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x10, 0x1b, 0xff, 0xff,
- 0xff, 0xfb, 0x30, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xfd,
- 0x74, 0x6c, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x16, 0x0, 0x10, 0x4, 0x30,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf1, 0x6e, 0xb, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xaf,
+ 0x5d, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfb,
+
+ /* U+F095 "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0xef, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0x30,
+ 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xc8, 0x51, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef,
+ 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
+ 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
+ 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0xdf, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0x30,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1b, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0xdf, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf8, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff,
+ 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xd0,
+ 0x0, 0x0, 0x0, 0x5, 0xb8, 0x0, 0x0, 0x6,
+ 0xff, 0xff, 0xf3, 0x0, 0x0, 0x1, 0x8e, 0xff,
+ 0xf6, 0x0, 0x8, 0xff, 0xff, 0xf6, 0x0, 0x0,
+ 0x9, 0xff, 0xff, 0xff, 0xf4, 0x4d, 0xff, 0xff,
+ 0xf8, 0x0, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xb,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x60, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xb5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b, 0xb9,
+ 0x74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0,
- /* U+F240 "" */
- 0x29, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xb7, 0x10, 0xd, 0xfc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcd, 0xf8, 0x0, 0xf8, 0x0, 0x0,
+ /* U+F0C4 "" */
+ 0x1, 0x8c, 0xda, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x20, 0x0, 0x1d, 0xff, 0xff, 0xf3, 0x0, 0x0,
+ 0x0, 0x8f, 0xff, 0x80, 0xaf, 0xff, 0xff, 0xfd,
+ 0x0, 0x0, 0xa, 0xff, 0xff, 0xf1, 0xef, 0xe1,
+ 0xc, 0xff, 0x20, 0x0, 0xbf, 0xff, 0xfe, 0x30,
+ 0xff, 0xd0, 0xa, 0xff, 0x30, 0xb, 0xff, 0xff,
+ 0xe3, 0x0, 0xbf, 0xfc, 0xbf, 0xff, 0x10, 0xcf,
+ 0xff, 0xfe, 0x30, 0x0, 0x3f, 0xff, 0xff, 0xff,
+ 0xdc, 0xff, 0xff, 0xe3, 0x0, 0x0, 0x3, 0xdf,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0,
+ 0x0, 0x1, 0x2d, 0xff, 0xff, 0xff, 0xe2, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0xff,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1, 0x8c,
+ 0xef, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0,
+ 0x1d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
+ 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0x33, 0xef,
+ 0xff, 0xfc, 0x0, 0x0, 0xef, 0xe1, 0xc, 0xff,
+ 0x20, 0x2e, 0xff, 0xff, 0xc1, 0x0, 0xff, 0xd0,
+ 0xa, 0xff, 0x30, 0x2, 0xef, 0xff, 0xfc, 0x10,
+ 0xbf, 0xfc, 0xbf, 0xff, 0x0, 0x0, 0x1d, 0xff,
+ 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xf7, 0x0, 0x0,
+ 0x1, 0xcf, 0xff, 0xd1, 0x3, 0xdf, 0xfe, 0x60,
+ 0x0, 0x0, 0x0, 0x4, 0x75, 0x0, 0x0, 0x1,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F0C5 "" */
+ 0x0, 0x0, 0x0, 0x12, 0x22, 0x22, 0x22, 0x1,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
+ 0xfe, 0xe, 0x70, 0x0, 0x0, 0x0, 0x5, 0xff,
+ 0xff, 0xff, 0xfe, 0xe, 0xf7, 0x0, 0x0, 0x0,
+ 0x5, 0xff, 0xff, 0xff, 0xfe, 0xe, 0xff, 0x70,
+ 0x1, 0x22, 0x5, 0xff, 0xff, 0xff, 0xfe, 0xe,
+ 0xff, 0xf2, 0xdf, 0xff, 0x25, 0xff, 0xff, 0xff,
+ 0xff, 0x10, 0x0, 0x0, 0xff, 0xff, 0x25, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
+ 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0xff, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf3, 0xff, 0xff, 0x25, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x25, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
+ 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0xff, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf3, 0xff, 0xff, 0x25, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x25, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
+ 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0xff, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf3, 0xff, 0xff, 0x24, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf2, 0xff, 0xff, 0x50, 0x56,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x50, 0xff, 0xff,
+ 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0x0, 0x0, 0x0, 0x8b, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xb7, 0x0, 0x0, 0x0,
+
+ /* U+F0C7 "" */
+ 0x2a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x91,
+ 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0x10, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xd1, 0x0, 0xff, 0xc0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfd, 0x10,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff,
+ 0xff, 0xd0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0xff, 0xff, 0xf5, 0xff, 0xc0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xff, 0xff, 0xf6, 0xff, 0xc0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xf6,
+ 0xff, 0xfb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xff,
+ 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff,
+ 0xff, 0xfe, 0x51, 0x3b, 0xff, 0xff, 0xff, 0xf6,
+ 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0xcf, 0xff,
+ 0xff, 0xf6, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0,
+ 0x8f, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xf0,
+ 0x0, 0x0, 0x9f, 0xff, 0xff, 0xf6, 0xff, 0xff,
+ 0xff, 0xf9, 0x0, 0x4, 0xff, 0xff, 0xff, 0xf6,
+ 0xff, 0xff, 0xff, 0xff, 0xda, 0xbf, 0xff, 0xff,
+ 0xff, 0xf6, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x0,
+
+ /* U+F0E7 "" */
+ 0x0, 0x3, 0x44, 0x44, 0x43, 0x0, 0x0, 0x0,
+ 0x8, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0xbf, 0xff, 0xff, 0xff, 0x60, 0x0, 0x0, 0xd,
+ 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0xff,
+ 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x2f, 0xff,
+ 0xff, 0xff, 0x70, 0x0, 0x0, 0x4, 0xff, 0xff,
+ 0xff, 0xf2, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
+ 0xfe, 0x66, 0x66, 0x51, 0x8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xa0, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf6, 0xc, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x40, 0xd, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xb0, 0x0, 0x1, 0x22, 0x22, 0xff, 0xff, 0xf2,
+ 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xf8, 0x0,
+ 0x0, 0x0, 0x0, 0x6, 0xff, 0xfe, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xaf, 0xff, 0x60, 0x0, 0x0,
+ 0x0, 0x0, 0xe, 0xff, 0xc0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x9, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xcf, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
+ 0x90, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F0EA "" */
+ 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0x90, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8c, 0xcc, 0xdf, 0xbc,
+ 0xfc, 0xcc, 0xc6, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0xfe, 0x1, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0xfc, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x92,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0xfc, 0x1, 0x22, 0x22, 0x22, 0x1, 0x0, 0x0,
+ 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xfc, 0xe,
+ 0x70, 0x0, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
+ 0xfc, 0xe, 0xf7, 0x0, 0xff, 0xff, 0xf8, 0x1f,
+ 0xff, 0xff, 0xfc, 0xe, 0xff, 0x70, 0xff, 0xff,
+ 0xf8, 0x1f, 0xff, 0xff, 0xfc, 0xe, 0xff, 0xf2,
+ 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xfe, 0x10,
+ 0x0, 0x0, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf8, 0x1f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
+ 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf3, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf3, 0x58, 0x88, 0x84, 0x1f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0,
+ 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf3, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x8,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x80,
+
+ /* U+F0F3 "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xc0, 0xf, 0x80, 0x67, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x40,
- 0xcc, 0x0, 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xc, 0xe8,
- 0xf, 0x80, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x9d, 0xf3, 0xf8,
- 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x4f, 0x4f, 0x80, 0xcf,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xa0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x28, 0xef, 0xf9, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xfb, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xd,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
+ 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x50, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x70, 0x0, 0x0, 0x4f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x5f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0,
+ 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xc0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf0, 0x0, 0x2, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0xb, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x10,
+ 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf3, 0x6c, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x90, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xfd,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x7b, 0x81, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F11C "" */
+ 0x19, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xb7, 0xc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x80, 0x4, 0xf4, 0xf8, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0x0, 0x4f, 0x4f, 0x80, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x4,
- 0xf4, 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf8, 0x6, 0x9f, 0x4f,
- 0x80, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0xcf, 0xd1, 0xf8, 0x9,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xc6, 0xc, 0xc0, 0xf, 0x80, 0x0, 0x0,
+ 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0x0,
+ 0x8f, 0x10, 0x7f, 0x10, 0x5f, 0x30, 0x3f, 0x50,
+ 0x1f, 0xfc, 0xff, 0xc0, 0x7, 0xe0, 0x6, 0xf0,
+ 0x4, 0xf2, 0x2, 0xf4, 0x0, 0xff, 0xcf, 0xfc,
+ 0x0, 0x8f, 0x0, 0x7f, 0x10, 0x5f, 0x30, 0x3f,
+ 0x50, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf,
+ 0xff, 0xfe, 0x66, 0xbf, 0x66, 0xaf, 0x76, 0x8f,
+ 0x86, 0x7f, 0xff, 0xfc, 0xff, 0xff, 0xd0, 0x6,
+ 0xf0, 0x5, 0xf1, 0x3, 0xf3, 0x1, 0xff, 0xff,
+ 0xcf, 0xff, 0xfd, 0x0, 0x7f, 0x0, 0x5f, 0x10,
+ 0x3f, 0x30, 0x1f, 0xff, 0xfc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xcf, 0xfe, 0x66, 0xcf, 0x76, 0x66, 0x66,
+ 0x66, 0x66, 0x9f, 0xa6, 0x7f, 0xfc, 0xff, 0xc0,
+ 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf4,
+ 0x0, 0xff, 0xcf, 0xfc, 0x0, 0x7e, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2f, 0x40, 0xf, 0xfc, 0xff,
+ 0xfc, 0xce, 0xfc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd,
+ 0xfd, 0xcc, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
+ 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0x10,
+
+ /* U+F124 "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcc, 0x0, 0xfc, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7f,
- 0xa0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0,
+ 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5c, 0xff, 0x50,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x6d, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x7e, 0xff, 0xff, 0xff, 0xd0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x9f, 0xff,
+ 0xff, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x5, 0xdf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0,
+ 0x0, 0x7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x90, 0x0, 0x4, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x0,
+ 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfa, 0x0, 0x0, 0xe, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0,
+ 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1, 0x22, 0x22,
+ 0x22, 0x7f, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
+ 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6f, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
+ 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6f, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xf1,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xb8, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F15B "" */
+ 0x37, 0x77, 0x77, 0x77, 0x74, 0x5, 0x0, 0x0,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xa0, 0xfa, 0x0,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf, 0xfa,
+ 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xa0, 0xff,
+ 0xfa, 0x0, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf,
+ 0xff, 0xfa, 0xf, 0xff, 0xff, 0xff, 0xff, 0xa0,
+ 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xfa,
+ 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xe3, 0x22, 0x22, 0x21, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0x40,
+
+ /* U+F1EB "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x26, 0x9c, 0xde, 0xdc, 0xb8, 0x50,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x8d,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb5, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x0, 0x0,
+ 0x0, 0x6f, 0xff, 0xff, 0xff, 0xdb, 0x99, 0x9a,
+ 0xcf, 0xff, 0xff, 0xff, 0xb1, 0x0, 0xa, 0xff,
+ 0xff, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0, 0x39,
+ 0xef, 0xff, 0xfe, 0x40, 0xcf, 0xff, 0xfb, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
+ 0xff, 0xf4, 0xaf, 0xff, 0x60, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xff, 0xf2,
+ 0xa, 0xd2, 0x0, 0x0, 0x4, 0x9c, 0xef, 0xed,
+ 0xb6, 0x20, 0x0, 0x0, 0x8e, 0x30, 0x0, 0x0,
+ 0x0, 0x6, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfa,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xcf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xfb,
+ 0x87, 0x89, 0xdf, 0xff, 0xff, 0x80, 0x0, 0x0,
+ 0x0, 0x0, 0xb, 0xff, 0xe6, 0x0, 0x0, 0x0,
+ 0x3, 0xaf, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xba, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xd4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xcf, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0x70, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xd, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F240 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3,
+ 0x7f, 0xfa, 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x1f, 0xfa,
+ 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x78, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x7,
+ 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0x92, 0x0,
/* U+F241 "" */
- 0x29, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xb7, 0x10, 0xd, 0xfc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcd, 0xf8, 0x0, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xc0, 0xf, 0x80, 0x67, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x76, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0xc, 0xe8,
- 0xf, 0x80, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc, 0x0, 0x0, 0x0, 0x9d, 0xf3, 0xf8,
- 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc0, 0x0, 0x0, 0x0, 0x4f, 0x4f, 0x80, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0,
- 0x0, 0x0, 0x4, 0xf4, 0xf8, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x4f, 0x4f, 0x80, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x4,
- 0xf4, 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xc0, 0x0, 0x0, 0x6, 0x9f, 0x4f,
- 0x80, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0xcf, 0xd1, 0xf8, 0x9,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x90,
- 0x0, 0x0, 0xc, 0xc0, 0xf, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcc, 0x0, 0xfc, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7f,
- 0xa0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0,
+ 0x0, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x3,
+ 0x7f, 0xfa, 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x1f, 0xfa,
+ 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0,
+ 0x0, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x78, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x86, 0x0, 0x0, 0x7,
+ 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0x92, 0x0,
/* U+F242 "" */
- 0x29, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xb7, 0x10, 0xd, 0xfc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcd, 0xf8, 0x0, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xc0, 0xf, 0x80, 0x67, 0x77, 0x77,
- 0x77, 0x77, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe8,
- 0xf, 0x80, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9d, 0xf3, 0xf8,
- 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0x4f, 0x80, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xf4, 0xf8, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0x4f, 0x80, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xf4, 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x6, 0x9f, 0x4f,
- 0x80, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xd1, 0xf8, 0x9,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xc0, 0xf, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcc, 0x0, 0xfc, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7f,
- 0xa0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
+ 0xef, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0xef, 0xff,
+ 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x7f, 0xfa, 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff,
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa,
+ 0xff, 0xc0, 0xef, 0xff, 0xff, 0xff, 0xfb, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
+ 0xef, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x78, 0x88,
+ 0x88, 0x88, 0x85, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0x92, 0x0,
/* U+F243 "" */
- 0x29, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xb7, 0x10, 0xd, 0xfc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcd, 0xf8, 0x0, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xc0, 0xf, 0x80, 0x67, 0x77, 0x77,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0xf8, 0xc, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe8,
- 0xf, 0x80, 0xcf, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9d, 0xf3, 0xf8,
- 0xc, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0x4f, 0x80, 0xcf,
- 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xf4, 0xf8, 0xc, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0x4f, 0x80, 0xcf, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xf4, 0xf8, 0xc, 0xff, 0xff, 0xf8, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x9f, 0x4f,
- 0x80, 0xcf, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xd1, 0xf8, 0x9,
- 0xcc, 0xcc, 0xc6, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xc0, 0xf, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcc, 0x0, 0xfc, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7f,
- 0xa0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
+ 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0xef, 0xff,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x7f, 0xfa, 0xff, 0xc0, 0xef, 0xff, 0xf9, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa,
+ 0xff, 0xc0, 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
+ 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x78, 0x88,
+ 0x84, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0x92, 0x0,
/* U+F244 "" */
- 0x29, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xb7, 0x10, 0xd, 0xfc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xcc, 0xcd, 0xf8, 0x0, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xc0, 0xf, 0x80, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf6, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0xff, 0xeb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xff, 0x50,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xf9, 0xff, 0xc0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcc, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe8,
- 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9d, 0xf3, 0xf8,
+ 0x0, 0x7, 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x7f, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0xff, 0xc0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0x4f, 0x80, 0x0,
+ 0x0, 0x5, 0xdf, 0xfa, 0xff, 0xc0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xfa, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xcf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x0, 0x19, 0xbb, 0xbb, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
+ 0x92, 0x0,
+
+ /* U+F287 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18,
+ 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x12, 0xdf, 0xfe, 0x10,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xf4, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x1c, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
+ 0x76, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0xf6, 0x0, 0x4c,
+ 0xd5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x33,
+ 0x0, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xd2, 0x0,
+ 0x4f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
+ 0x40, 0x0, 0xaf, 0xff, 0xfc, 0x1, 0xde, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfa, 0x10,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xdf, 0xff,
+ 0xff, 0x88, 0x88, 0x9f, 0xe8, 0x88, 0x88, 0x88,
+ 0x88, 0x8f, 0xff, 0x91, 0x5f, 0xff, 0xf8, 0x0,
+ 0x0, 0x7, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xf,
+ 0xc3, 0x0, 0x4, 0xbb, 0x60, 0x0, 0x0, 0x0,
+ 0xeb, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x30,
+ 0x8, 0x88, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1e, 0xc1, 0x2f, 0xff,
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xf7, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0x4f, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xf4, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x9f, 0x4f,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xd1, 0xf8, 0x0,
+ 0x0, 0x27, 0x9f, 0xff, 0xf7, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xc0, 0xf, 0x80, 0x0, 0x0,
+ 0x2f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcc, 0x0, 0xfc, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7f,
- 0xa0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+F293 "" */
- 0x0, 0x0, 0x26, 0xbb, 0xbb, 0xa5, 0x10, 0x0,
- 0x0, 0x0, 0x7e, 0xff, 0xff, 0xff, 0xfe, 0x60,
- 0x0, 0x0, 0x8f, 0xff, 0xfc, 0x6f, 0xff, 0xff,
- 0x60, 0x0, 0x4f, 0xff, 0xff, 0xc0, 0x6f, 0xff,
- 0xfe, 0x20, 0xa, 0xff, 0xff, 0xfc, 0x0, 0x6f,
- 0xff, 0xf8, 0x0, 0xff, 0xff, 0xff, 0xc0, 0x30,
- 0x6f, 0xff, 0xd0, 0x4f, 0xff, 0x4d, 0xfc, 0xc,
- 0x60, 0x6f, 0xff, 0x27, 0xff, 0xa0, 0x1d, 0xc0,
- 0xcf, 0x10, 0xcf, 0xf4, 0x8f, 0xff, 0x90, 0x19,
- 0xb, 0x30, 0xaf, 0xff, 0x7a, 0xff, 0xff, 0x90,
- 0x0, 0x10, 0xaf, 0xff, 0xf8, 0xcf, 0xff, 0xff,
- 0x90, 0x0, 0xaf, 0xff, 0xff, 0x8c, 0xff, 0xff,
- 0xff, 0x20, 0x1d, 0xff, 0xff, 0xf8, 0xbf, 0xff,
- 0xff, 0x30, 0x0, 0x1d, 0xff, 0xff, 0x88, 0xff,
- 0xff, 0x30, 0x60, 0x91, 0x1d, 0xff, 0xf8, 0x8f,
- 0xff, 0x30, 0xac, 0xc, 0xb0, 0x2f, 0xff, 0x44,
- 0xff, 0xc1, 0xaf, 0xc0, 0xca, 0x3, 0xef, 0xf3,
- 0x1f, 0xff, 0xef, 0xfc, 0x6, 0x3, 0xef, 0xff,
- 0x0, 0xcf, 0xff, 0xff, 0xc0, 0x3, 0xef, 0xff,
- 0xa0, 0x6, 0xff, 0xff, 0xfc, 0x3, 0xef, 0xff,
- 0xf3, 0x0, 0xc, 0xff, 0xff, 0xc3, 0xef, 0xff,
- 0xf9, 0x0, 0x0, 0x1c, 0xff, 0xfd, 0xef, 0xff,
- 0xfa, 0x0, 0x0, 0x0, 0x6, 0xbf, 0xff, 0xff,
- 0xb4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20,
- 0x0, 0x0, 0x0, 0x0
+ 0x0, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x9e, 0xff, 0xff, 0xc7, 0x0,
+ 0x0, 0x0, 0x7, 0xff, 0xff, 0xdf, 0xff, 0xfd,
+ 0x20, 0x0, 0x8, 0xff, 0xff, 0xf2, 0xdf, 0xff,
+ 0xfe, 0x0, 0x3, 0xff, 0xff, 0xff, 0x11, 0xdf,
+ 0xff, 0xf9, 0x0, 0xaf, 0xff, 0xff, 0xf1, 0x1,
+ 0xef, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xff, 0x12,
+ 0x12, 0xef, 0xff, 0x53, 0xff, 0xf4, 0x7f, 0xf1,
+ 0x3d, 0x13, 0xff, 0xf8, 0x6f, 0xff, 0x40, 0x7f,
+ 0x13, 0xf5, 0xc, 0xff, 0xb8, 0xff, 0xff, 0x40,
+ 0x71, 0x35, 0xa, 0xff, 0xfd, 0x9f, 0xff, 0xff,
+ 0x40, 0x0, 0x8, 0xff, 0xff, 0xea, 0xff, 0xff,
+ 0xff, 0x30, 0x6, 0xff, 0xff, 0xfe, 0xaf, 0xff,
+ 0xff, 0xf4, 0x0, 0x6f, 0xff, 0xff, 0xe9, 0xff,
+ 0xff, 0xf4, 0x0, 0x0, 0x7f, 0xff, 0xfe, 0x8f,
+ 0xff, 0xf4, 0x6, 0x13, 0x50, 0x8f, 0xff, 0xd6,
+ 0xff, 0xf4, 0x7, 0xf1, 0x3f, 0x40, 0x9f, 0xfb,
+ 0x3f, 0xff, 0x47, 0xff, 0x13, 0xd1, 0x1d, 0xff,
+ 0x90, 0xff, 0xff, 0xff, 0xf1, 0x21, 0x1d, 0xff,
+ 0xf5, 0xa, 0xff, 0xff, 0xff, 0x20, 0x2e, 0xff,
+ 0xff, 0x0, 0x2f, 0xff, 0xff, 0xf2, 0x2e, 0xff,
+ 0xff, 0x80, 0x0, 0x6f, 0xff, 0xff, 0x4e, 0xff,
+ 0xff, 0xe0, 0x0, 0x0, 0x4e, 0xff, 0xff, 0xff,
+ 0xff, 0xc2, 0x0, 0x0, 0x0, 0x5, 0x9c, 0xdd,
+ 0xc9, 0x40, 0x0, 0x0,
+
+ /* U+F2ED "" */
+ 0x0, 0x0, 0x0, 0x2, 0x22, 0x22, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
+ 0xe1, 0x0, 0x0, 0x0, 0xac, 0xcc, 0xcd, 0xff,
+ 0xff, 0xff, 0xfd, 0xcc, 0xcc, 0xc1, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xca, 0x0, 0xa, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
+ 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0x0, 0xa, 0xff, 0xe1, 0xef, 0xf2, 0xcf,
+ 0xf3, 0xbf, 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf,
+ 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff,
+ 0xd0, 0xdf, 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0,
+ 0xa, 0xff, 0xd0, 0xdf, 0xf0, 0xbf, 0xf1, 0x9f,
+ 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf, 0xf0, 0xbf,
+ 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf,
+ 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff,
+ 0xd0, 0xdf, 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0,
+ 0xa, 0xff, 0xd0, 0xdf, 0xf0, 0xbf, 0xf1, 0x9f,
+ 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf, 0xf0, 0xbf,
+ 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff, 0xd0, 0xdf,
+ 0xf0, 0xbf, 0xf1, 0x9f, 0xfe, 0x0, 0xa, 0xff,
+ 0xe1, 0xef, 0xf1, 0xcf, 0xf3, 0xaf, 0xfe, 0x0,
+ 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfa, 0x0, 0x0, 0x7b, 0xcc, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcb, 0x91, 0x0,
+
+ /* U+F304 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0xff, 0xd1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
+ 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xff, 0xff, 0xff, 0xd1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xc, 0xff, 0xff,
+ 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xf4, 0xc, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4, 0xff, 0xf4, 0xc, 0xff, 0xff,
+ 0xa0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff,
+ 0xf4, 0xc, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0xff, 0xff, 0xf4, 0xc, 0xb0, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff,
+ 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
+ 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,
+ 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xb0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff,
+ 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xb9, 0x75,
+ 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F55A "" */
+ 0x0, 0x0, 0x0, 0x2, 0x68, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x75, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x5, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf5, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+ 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0x80, 0xcf,
+ 0xff, 0xc0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x5f,
+ 0xff, 0xff, 0xff, 0xfc, 0x0, 0xc, 0xfc, 0x0,
+ 0xc, 0xff, 0xff, 0xf8, 0x5, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x50, 0x0, 0x90, 0x0, 0x5f, 0xff,
+ 0xff, 0xf8, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf5, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xf8,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40,
+ 0x0, 0x4f, 0xff, 0xff, 0xff, 0xf8, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0xc,
+ 0xff, 0xff, 0xff, 0xf8, 0xc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xc0, 0x0, 0x10, 0x0, 0xcf, 0xff,
+ 0xff, 0xf8, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xfd,
+ 0x0, 0x5, 0xf5, 0x0, 0xd, 0xff, 0xff, 0xf8,
+ 0x0, 0xc, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x5f,
+ 0xff, 0x50, 0x2e, 0xff, 0xff, 0xf8, 0x0, 0x0,
+ 0xcf, 0xff, 0xff, 0xff, 0xe8, 0xff, 0xff, 0xf8,
+ 0xef, 0xff, 0xff, 0xf8, 0x0, 0x0, 0xc, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf7, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2,
+ 0x0, 0x0, 0x0, 0x9, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50,
+
+ /* U+F7C2 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xfe,
+ 0x70, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x50, 0x2, 0xef, 0xbb, 0xfc, 0xbf, 0xdb,
+ 0xbf, 0xf9, 0x2, 0xef, 0xd0, 0x2f, 0x40, 0xe7,
+ 0x1, 0xff, 0xa2, 0xef, 0xfd, 0x2, 0xf4, 0xe,
+ 0x70, 0x1f, 0xfa, 0xef, 0xff, 0xd0, 0x2f, 0x40,
+ 0xe7, 0x1, 0xff, 0xaf, 0xff, 0xfd, 0x24, 0xf6,
+ 0x2e, 0x82, 0x3f, 0xfa, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf4, 0x9, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xd5, 0x0,
+
+ /* U+F8A2 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xf1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1e, 0xff, 0x10, 0x0, 0x3, 0xed, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5, 0xff, 0xf1, 0x0, 0x4,
+ 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f,
+ 0xff, 0x10, 0x5, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5, 0xff, 0xf1, 0x6, 0xff, 0xff,
+ 0xf6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x9f, 0xff,
+ 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf1, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xd0, 0x2, 0xef, 0xff, 0xf1, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x0, 0x2,
+ 0xdf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xdf, 0xf0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xb8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0
};
@@ -2402,152 +2759,159 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 87, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 93, .box_h = 16, .box_w = 3, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 24, .adv_w = 126, .box_h = 6, .box_w = 6, .ofs_x = 1, .ofs_y = 10},
- {.bitmap_index = 42, .adv_w = 219, .box_h = 16, .box_w = 13, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 146, .adv_w = 205, .box_h = 22, .box_w = 11, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 267, .adv_w = 257, .box_h = 17, .box_w = 15, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 395, .adv_w = 219, .box_h = 17, .box_w = 14, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 514, .adv_w = 76, .box_h = 6, .box_w = 3, .ofs_x = 1, .ofs_y = 10},
- {.bitmap_index = 523, .adv_w = 117, .box_h = 23, .box_w = 7, .ofs_x = 1, .ofs_y = -5},
- {.bitmap_index = 604, .adv_w = 118, .box_h = 23, .box_w = 6, .ofs_x = 0, .ofs_y = -5},
- {.bitmap_index = 673, .adv_w = 152, .box_h = 8, .box_w = 8, .ofs_x = 1, .ofs_y = 4},
- {.bitmap_index = 705, .adv_w = 200, .box_h = 12, .box_w = 12, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 777, .adv_w = 78, .box_h = 6, .box_w = 3, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 786, .adv_w = 159, .box_h = 3, .box_w = 8, .ofs_x = 1, .ofs_y = 5},
- {.bitmap_index = 798, .adv_w = 94, .box_h = 3, .box_w = 3, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 803, .adv_w = 146, .box_h = 18, .box_w = 9, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 884, .adv_w = 198, .box_h = 17, .box_w = 11, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 978, .adv_w = 198, .box_h = 16, .box_w = 6, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 1026, .adv_w = 198, .box_h = 16, .box_w = 11, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1114, .adv_w = 198, .box_h = 17, .box_w = 11, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 1208, .adv_w = 198, .box_h = 16, .box_w = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 1304, .adv_w = 198, .box_h = 17, .box_w = 11, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 1398, .adv_w = 198, .box_h = 17, .box_w = 11, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 1492, .adv_w = 198, .box_h = 16, .box_w = 11, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1580, .adv_w = 198, .box_h = 17, .box_w = 11, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 1674, .adv_w = 198, .box_h = 17, .box_w = 10, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 1759, .adv_w = 89, .box_h = 12, .box_w = 3, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 1777, .adv_w = 90, .box_h = 15, .box_w = 4, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 1807, .adv_w = 179, .box_h = 10, .box_w = 10, .ofs_x = 0, .ofs_y = 1},
- {.bitmap_index = 1857, .adv_w = 198, .box_h = 7, .box_w = 10, .ofs_x = 1, .ofs_y = 4},
- {.bitmap_index = 1892, .adv_w = 184, .box_h = 10, .box_w = 10, .ofs_x = 1, .ofs_y = 1},
- {.bitmap_index = 1942, .adv_w = 167, .box_h = 16, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2022, .adv_w = 315, .box_h = 21, .box_w = 18, .ofs_x = 1, .ofs_y = -5},
- {.bitmap_index = 2211, .adv_w = 223, .box_h = 16, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 2323, .adv_w = 223, .box_h = 16, .box_w = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2419, .adv_w = 223, .box_h = 17, .box_w = 12, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2521, .adv_w = 238, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2625, .adv_w = 193, .box_h = 16, .box_w = 11, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2713, .adv_w = 193, .box_h = 16, .box_w = 11, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2801, .adv_w = 238, .box_h = 17, .box_w = 12, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2903, .adv_w = 247, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3007, .adv_w = 99, .box_h = 16, .box_w = 3, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 3031, .adv_w = 193, .box_h = 17, .box_w = 11, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 3125, .adv_w = 223, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3229, .adv_w = 193, .box_h = 16, .box_w = 11, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3317, .adv_w = 303, .box_h = 16, .box_w = 17, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3453, .adv_w = 247, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3557, .adv_w = 240, .box_h = 17, .box_w = 13, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 3668, .adv_w = 223, .box_h = 16, .box_w = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3764, .adv_w = 245, .box_h = 18, .box_w = 14, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 3890, .adv_w = 223, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 3994, .adv_w = 215, .box_h = 17, .box_w = 12, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 4096, .adv_w = 211, .box_h = 16, .box_w = 13, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4200, .adv_w = 238, .box_h = 17, .box_w = 13, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 4311, .adv_w = 223, .box_h = 16, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4423, .adv_w = 303, .box_h = 16, .box_w = 19, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4575, .adv_w = 223, .box_h = 16, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4687, .adv_w = 223, .box_h = 16, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 4799, .adv_w = 211, .box_h = 16, .box_w = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 4895, .adv_w = 95, .box_h = 22, .box_w = 5, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 4950, .adv_w = 145, .box_h = 18, .box_w = 9, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5031, .adv_w = 95, .box_h = 22, .box_w = 5, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 5086, .adv_w = 147, .box_h = 9, .box_w = 9, .ofs_x = 0, .ofs_y = 7},
- {.bitmap_index = 5127, .adv_w = 160, .box_h = 2, .box_w = 10, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 5137, .adv_w = 110, .box_h = 4, .box_w = 5, .ofs_x = 1, .ofs_y = 13},
- {.bitmap_index = 5147, .adv_w = 194, .box_h = 13, .box_w = 10, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 5212, .adv_w = 200, .box_h = 18, .box_w = 11, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 5311, .adv_w = 184, .box_h = 13, .box_w = 10, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 5376, .adv_w = 200, .box_h = 18, .box_w = 10, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 5466, .adv_w = 184, .box_h = 13, .box_w = 10, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 5531, .adv_w = 107, .box_h = 17, .box_w = 8, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 5599, .adv_w = 200, .box_h = 17, .box_w = 10, .ofs_x = 1, .ofs_y = -5},
- {.bitmap_index = 5684, .adv_w = 200, .box_h = 17, .box_w = 10, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5769, .adv_w = 89, .box_h = 17, .box_w = 3, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5795, .adv_w = 91, .box_h = 22, .box_w = 5, .ofs_x = -1, .ofs_y = -5},
- {.bitmap_index = 5850, .adv_w = 180, .box_h = 17, .box_w = 10, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5935, .adv_w = 89, .box_h = 17, .box_w = 3, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 5961, .adv_w = 308, .box_h = 12, .box_w = 17, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6063, .adv_w = 200, .box_h = 12, .box_w = 10, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6123, .adv_w = 200, .box_h = 13, .box_w = 11, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 6195, .adv_w = 200, .box_h = 17, .box_w = 11, .ofs_x = 1, .ofs_y = -5},
- {.bitmap_index = 6289, .adv_w = 200, .box_h = 17, .box_w = 10, .ofs_x = 1, .ofs_y = -5},
- {.bitmap_index = 6374, .adv_w = 123, .box_h = 12, .box_w = 7, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6416, .adv_w = 184, .box_h = 13, .box_w = 10, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 6481, .adv_w = 112, .box_h = 16, .box_w = 7, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 6537, .adv_w = 200, .box_h = 13, .box_w = 10, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 6602, .adv_w = 177, .box_h = 12, .box_w = 11, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6668, .adv_w = 266, .box_h = 12, .box_w = 16, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6764, .adv_w = 177, .box_h = 12, .box_w = 11, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6830, .adv_w = 177, .box_h = 17, .box_w = 11, .ofs_x = 0, .ofs_y = -5},
- {.bitmap_index = 6924, .adv_w = 177, .box_h = 12, .box_w = 10, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 6984, .adv_w = 120, .box_h = 21, .box_w = 8, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 7068, .adv_w = 87, .box_h = 19, .box_w = 3, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 7097, .adv_w = 120, .box_h = 21, .box_w = 7, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 7171, .adv_w = 239, .box_h = 5, .box_w = 13, .ofs_x = 1, .ofs_y = 4},
- {.bitmap_index = 7204, .adv_w = 302, .box_h = 22, .box_w = 19, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 7413, .adv_w = 377, .box_h = 22, .box_w = 24, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 7677, .adv_w = 352, .box_h = 18, .box_w = 22, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7875, .adv_w = 352, .box_h = 15, .box_w = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 8025, .adv_w = 277, .box_h = 16, .box_w = 15, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 8145, .adv_w = 302, .box_h = 21, .box_w = 19, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8345, .adv_w = 302, .box_h = 20, .box_w = 19, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8535, .adv_w = 277, .box_h = 20, .box_w = 18, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8715, .adv_w = 327, .box_h = 16, .box_w = 20, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8875, .adv_w = 327, .box_h = 19, .box_w = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 9075, .adv_w = 302, .box_h = 16, .box_w = 19, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 9227, .adv_w = 302, .box_h = 20, .box_w = 19, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 9417, .adv_w = 151, .box_h = 16, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 9497, .adv_w = 226, .box_h = 16, .box_w = 15, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 9617, .adv_w = 327, .box_h = 18, .box_w = 21, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 9806, .adv_w = 377, .box_h = 20, .box_w = 24, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10046, .adv_w = 302, .box_h = 19, .box_w = 19, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10227, .adv_w = 201, .box_h = 20, .box_w = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10357, .adv_w = 277, .box_h = 20, .box_w = 18, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10537, .adv_w = 302, .box_h = 20, .box_w = 19, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10727, .adv_w = 302, .box_h = 20, .box_w = 19, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10917, .adv_w = 201, .box_h = 20, .box_w = 13, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 11047, .adv_w = 302, .box_h = 16, .box_w = 19, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 11199, .adv_w = 251, .box_h = 21, .box_w = 13, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 11336, .adv_w = 251, .box_h = 21, .box_w = 13, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11473, .adv_w = 277, .box_h = 18, .box_w = 18, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 11635, .adv_w = 277, .box_h = 5, .box_w = 18, .ofs_x = 0, .ofs_y = 6},
- {.bitmap_index = 11680, .adv_w = 352, .box_h = 21, .box_w = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 11911, .adv_w = 352, .box_h = 21, .box_w = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 12142, .adv_w = 352, .box_h = 13, .box_w = 20, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 12272, .adv_w = 352, .box_h = 14, .box_w = 20, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 12412, .adv_w = 377, .box_h = 15, .box_w = 24, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 12592, .adv_w = 327, .box_h = 18, .box_w = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 12781, .adv_w = 327, .box_h = 20, .box_w = 21, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 12991, .adv_w = 277, .box_h = 18, .box_w = 18, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 13153, .adv_w = 352, .box_h = 18, .box_w = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 13351, .adv_w = 352, .box_h = 23, .box_w = 22, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 13604, .adv_w = 302, .box_h = 20, .box_w = 19, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 13794, .adv_w = 176, .box_h = 21, .box_w = 11, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 13910, .adv_w = 352, .box_h = 22, .box_w = 22, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 14152, .adv_w = 377, .box_h = 15, .box_w = 24, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 14332, .adv_w = 277, .box_h = 18, .box_w = 18, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 14494, .adv_w = 302, .box_h = 23, .box_w = 19, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 14713, .adv_w = 402, .box_h = 18, .box_w = 25, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 14938, .adv_w = 453, .box_h = 16, .box_w = 29, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 15170, .adv_w = 453, .box_h = 16, .box_w = 29, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 15402, .adv_w = 453, .box_h = 16, .box_w = 29, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 15634, .adv_w = 453, .box_h = 16, .box_w = 29, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 15866, .adv_w = 453, .box_h = 16, .box_w = 29, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 16098, .adv_w = 302, .box_h = 23, .box_w = 17, .ofs_x = 1, .ofs_y = -4}
+ {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 87, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 0, .adv_w = 91, .box_w = 4, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 32, .adv_w = 113, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 10},
+ {.bitmap_index = 47, .adv_w = 219, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 151, .adv_w = 198, .box_w = 11, .box_h = 21, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 267, .adv_w = 258, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 387, .adv_w = 219, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 491, .adv_w = 61, .box_w = 2, .box_h = 6, .ofs_x = 1, .ofs_y = 10},
+ {.bitmap_index = 497, .adv_w = 120, .box_w = 7, .box_h = 24, .ofs_x = 1, .ofs_y = -6},
+ {.bitmap_index = 581, .adv_w = 122, .box_w = 7, .box_h = 24, .ofs_x = 0, .ofs_y = -6},
+ {.bitmap_index = 665, .adv_w = 152, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = 6},
+ {.bitmap_index = 715, .adv_w = 200, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 787, .adv_w = 69, .box_w = 4, .box_h = 6, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 799, .adv_w = 97, .box_w = 6, .box_h = 2, .ofs_x = 0, .ofs_y = 6},
+ {.bitmap_index = 805, .adv_w = 93, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 811, .adv_w = 145, .box_w = 9, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 888, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 976, .adv_w = 198, .box_w = 7, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1032, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1120, .adv_w = 198, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1200, .adv_w = 198, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1296, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1384, .adv_w = 197, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1472, .adv_w = 198, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1568, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1656, .adv_w = 198, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1736, .adv_w = 85, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1754, .adv_w = 74, .box_w = 4, .box_h = 15, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 1784, .adv_w = 179, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 1834, .adv_w = 193, .box_w = 10, .box_h = 6, .ofs_x = 1, .ofs_y = 4},
+ {.bitmap_index = 1864, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 1914, .adv_w = 166, .box_w = 10, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1994, .adv_w = 316, .box_w = 18, .box_h = 21, .ofs_x = 1, .ofs_y = -5},
+ {.bitmap_index = 2183, .adv_w = 230, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2303, .adv_w = 219, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2399, .adv_w = 229, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2503, .adv_w = 231, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2607, .adv_w = 200, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2695, .adv_w = 195, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2783, .adv_w = 240, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2887, .adv_w = 251, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2991, .adv_w = 96, .box_w = 4, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3023, .adv_w = 194, .box_w = 11, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3111, .adv_w = 221, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3215, .adv_w = 189, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3303, .adv_w = 307, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3439, .adv_w = 251, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3543, .adv_w = 242, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3647, .adv_w = 222, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3751, .adv_w = 242, .box_w = 13, .box_h = 19, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 3875, .adv_w = 217, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3979, .adv_w = 209, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4083, .adv_w = 210, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4187, .adv_w = 228, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4283, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4395, .adv_w = 312, .box_w = 20, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4555, .adv_w = 221, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4667, .adv_w = 211, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4779, .adv_w = 211, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4883, .adv_w = 93, .box_w = 5, .box_h = 22, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 4938, .adv_w = 144, .box_w = 9, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 5015, .adv_w = 93, .box_w = 5, .box_h = 22, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 5070, .adv_w = 147, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = 8},
+ {.bitmap_index = 5106, .adv_w = 159, .box_w = 10, .box_h = 2, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5116, .adv_w = 109, .box_w = 6, .box_h = 3, .ofs_x = 0, .ofs_y = 14},
+ {.bitmap_index = 5125, .adv_w = 191, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5185, .adv_w = 197, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5273, .adv_w = 184, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5339, .adv_w = 199, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5419, .adv_w = 186, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5479, .adv_w = 122, .box_w = 8, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5547, .adv_w = 197, .box_w = 10, .box_h = 17, .ofs_x = 1, .ofs_y = -5},
+ {.bitmap_index = 5632, .adv_w = 194, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5712, .adv_w = 85, .box_w = 3, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5736, .adv_w = 84, .box_w = 5, .box_h = 21, .ofs_x = -1, .ofs_y = -5},
+ {.bitmap_index = 5789, .adv_w = 178, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5877, .adv_w = 85, .box_w = 3, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5901, .adv_w = 309, .box_w = 17, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 6003, .adv_w = 194, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 6063, .adv_w = 201, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6135, .adv_w = 197, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = -5},
+ {.bitmap_index = 6229, .adv_w = 200, .box_w = 10, .box_h = 17, .ofs_x = 1, .ofs_y = -5},
+ {.bitmap_index = 6314, .adv_w = 119, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 6356, .adv_w = 182, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 6416, .adv_w = 115, .box_w = 7, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6469, .adv_w = 194, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 6529, .adv_w = 171, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6595, .adv_w = 265, .box_w = 17, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6697, .adv_w = 174, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6763, .adv_w = 167, .box_w = 11, .box_h = 17, .ofs_x = 0, .ofs_y = -5},
+ {.bitmap_index = 6857, .adv_w = 174, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6923, .adv_w = 119, .box_w = 8, .box_h = 22, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 7011, .adv_w = 86, .box_w = 3, .box_h = 19, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 7040, .adv_w = 119, .box_w = 7, .box_h = 22, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 7117, .adv_w = 239, .box_w = 13, .box_h = 4, .ofs_x = 1, .ofs_y = 4},
+ {.bitmap_index = 7143, .adv_w = 352, .box_w = 23, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 7408, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7595, .adv_w = 352, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 7815, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8002, .adv_w = 242, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8130, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 8383, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 8636, .adv_w = 396, .box_w = 25, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 8886, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 9139, .adv_w = 396, .box_w = 25, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 9352, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 9605, .adv_w = 176, .box_w = 11, .box_h = 18, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 9704, .adv_w = 264, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 9857, .adv_w = 396, .box_w = 25, .box_h = 22, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 10132, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10319, .adv_w = 308, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 10477, .adv_w = 308, .box_w = 20, .box_h = 24, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 10717, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 10917, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 11117, .adv_w = 308, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 11275, .adv_w = 308, .box_w = 21, .box_h = 20, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 11485, .adv_w = 220, .box_w = 12, .box_h = 20, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11605, .adv_w = 220, .box_w = 12, .box_h = 20, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11725, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 11925, .adv_w = 308, .box_w = 20, .box_h = 5, .ofs_x = 0, .ofs_y = 6},
+ {.bitmap_index = 11975, .adv_w = 396, .box_w = 25, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 12188, .adv_w = 440, .box_w = 28, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 12510, .adv_w = 396, .box_w = 27, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 12821, .adv_w = 352, .box_w = 22, .box_h = 21, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 13052, .adv_w = 308, .box_w = 19, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 13166, .adv_w = 308, .box_w = 19, .box_h = 12, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 13280, .adv_w = 440, .box_w = 28, .box_h = 18, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 13532, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 13719, .adv_w = 352, .box_w = 22, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 13972, .adv_w = 352, .box_w = 23, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 14237, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 14437, .adv_w = 308, .box_w = 20, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 14667, .adv_w = 308, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 14867, .adv_w = 220, .box_w = 15, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 15040, .adv_w = 308, .box_w = 20, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 15270, .adv_w = 308, .box_w = 20, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 15500, .adv_w = 396, .box_w = 25, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 15713, .adv_w = 352, .box_w = 24, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 15989, .adv_w = 264, .box_w = 17, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 16185, .adv_w = 440, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 16479, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 16689, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 16899, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 17109, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 17319, .adv_w = 440, .box_w = 28, .box_h = 15, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 17529, .adv_w = 440, .box_w = 28, .box_h = 18, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 17781, .adv_w = 308, .box_w = 17, .box_h = 23, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 17977, .adv_w = 308, .box_w = 20, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 18207, .adv_w = 352, .box_w = 23, .box_h = 23, .ofs_x = -1, .ofs_y = -3},
+ {.bitmap_index = 18472, .adv_w = 440, .box_w = 28, .box_h = 17, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 18710, .adv_w = 264, .box_w = 17, .box_h = 23, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 18906, .adv_w = 354, .box_w = 23, .box_h = 14, .ofs_x = 0, .ofs_y = 1}
};
/*---------------------
@@ -2555,25 +2919,26 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
*--------------------*/
static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x13,
- 0x14, 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d,
- 0x3f, 0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52,
- 0x53, 0x66, 0x67, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xf2,
- 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241, 0x242,
- 0x243, 0x292
+ 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
+ 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
+ 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
+ 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
+ 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
+ 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
+ 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
+ 0x8a1
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
- .range_start = 32, .range_length = 95, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY,
- .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0
+ .range_start = 32, .range_length = 95, .glyph_id_start = 1,
+ .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
- .range_start = 61441, .range_length = 659, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY,
- .glyph_id_start = 96, .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 50
+ .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
+ .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
@@ -2582,569 +2947,245 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
*----------------*/
-/*Pair left and right glyphs for kerning*/
-static const uint8_t kern_pair_glyph_ids[] =
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] =
{
- 9, 43,
- 9, 55,
- 9, 56,
- 9, 58,
- 17, 17,
- 17, 18,
- 17, 20,
- 17, 21,
- 17, 22,
- 17, 23,
- 17, 24,
- 17, 26,
- 18, 19,
- 18, 20,
- 18, 22,
- 18, 24,
- 19, 17,
- 19, 18,
- 19, 19,
- 19, 22,
- 19, 23,
- 19, 24,
- 19, 25,
- 19, 26,
- 20, 18,
- 20, 19,
- 20, 20,
- 20, 21,
- 20, 22,
- 20, 23,
- 20, 24,
- 20, 25,
- 20, 26,
- 21, 17,
- 21, 19,
- 21, 21,
- 21, 22,
- 21, 23,
- 21, 24,
- 21, 25,
- 22, 18,
- 22, 19,
- 22, 20,
- 22, 21,
- 22, 22,
- 22, 23,
- 22, 24,
- 22, 25,
- 22, 26,
- 23, 17,
- 23, 18,
- 23, 19,
- 23, 21,
- 23, 22,
- 23, 23,
- 23, 24,
- 23, 25,
- 24, 18,
- 24, 21,
- 24, 22,
- 24, 23,
- 24, 24,
- 24, 25,
- 24, 26,
- 25, 17,
- 25, 18,
- 25, 20,
- 25, 21,
- 25, 22,
- 25, 23,
- 26, 17,
- 26, 18,
- 26, 19,
- 26, 21,
- 26, 22,
- 26, 23,
- 26, 24,
- 26, 26,
- 34, 36,
- 34, 40,
- 34, 48,
- 34, 50,
- 34, 53,
- 34, 54,
- 34, 55,
- 34, 56,
- 34, 58,
- 34, 66,
- 34, 68,
- 34, 69,
- 34, 70,
- 34, 72,
- 34, 80,
- 34, 82,
- 34, 84,
- 34, 85,
- 34, 86,
- 34, 87,
- 34, 88,
- 34, 91,
- 35, 58,
- 35, 66,
- 35, 74,
- 35, 77,
- 35, 80,
- 35, 83,
- 35, 86,
- 35, 90,
- 36, 36,
- 36, 40,
- 36, 48,
- 36, 50,
- 36, 74,
- 36, 83,
- 36, 86,
- 36, 90,
- 36, 91,
- 37, 55,
- 37, 56,
- 37, 66,
- 37, 70,
- 37, 80,
- 37, 86,
- 38, 55,
- 38, 56,
- 38, 58,
- 38, 67,
- 38, 68,
- 38, 69,
- 38, 70,
- 38, 71,
- 38, 72,
- 38, 74,
- 38, 75,
- 38, 76,
- 38, 77,
- 38, 78,
- 38, 79,
- 38, 80,
- 38, 81,
- 38, 82,
- 38, 83,
- 38, 85,
- 38, 86,
- 38, 87,
- 38, 88,
- 38, 89,
- 38, 90,
- 38, 91,
- 39, 13,
- 39, 15,
- 39, 34,
- 39, 66,
- 39, 70,
- 39, 74,
- 39, 77,
- 39, 80,
- 39, 83,
- 39, 86,
- 39, 90,
- 40, 66,
- 40, 70,
- 40, 79,
- 40, 80,
- 40, 83,
- 40, 86,
- 40, 90,
- 41, 66,
- 41, 70,
- 41, 80,
- 41, 86,
- 41, 90,
- 42, 66,
- 42, 68,
- 42, 69,
- 42, 71,
- 42, 72,
- 42, 78,
- 42, 79,
- 42, 80,
- 42, 81,
- 42, 83,
- 42, 84,
- 42, 85,
- 42, 86,
- 42, 87,
- 42, 88,
- 42, 90,
- 43, 66,
- 43, 80,
- 44, 36,
- 44, 40,
- 44, 48,
- 44, 50,
- 44, 66,
- 44, 70,
- 44, 74,
- 44, 80,
- 44, 83,
- 44, 86,
- 44, 88,
- 44, 90,
- 45, 34,
- 45, 36,
- 45, 40,
- 45, 48,
- 45, 50,
- 45, 53,
- 45, 54,
- 45, 55,
- 45, 56,
- 45, 58,
- 45, 75,
- 45, 86,
- 45, 88,
- 45, 90,
- 46, 66,
- 46, 70,
- 46, 75,
- 46, 79,
- 46, 80,
- 46, 86,
- 46, 90,
- 47, 70,
- 47, 80,
- 47, 90,
- 48, 34,
- 48, 53,
- 48, 55,
- 48, 56,
- 48, 57,
- 48, 58,
- 48, 68,
- 48, 69,
- 48, 70,
- 48, 71,
- 48, 72,
- 48, 75,
- 48, 80,
- 48, 81,
- 48, 82,
- 48, 84,
- 48, 85,
- 48, 86,
- 48, 89,
- 48, 90,
- 48, 91,
- 49, 13,
- 49, 15,
- 49, 34,
- 49, 38,
- 49, 41,
- 49, 42,
- 49, 66,
- 49, 70,
- 49, 73,
- 49, 74,
- 49, 77,
- 49, 79,
- 49, 80,
- 49, 83,
- 49, 84,
- 49, 85,
- 49, 90,
- 50, 34,
- 50, 53,
- 50, 54,
- 50, 55,
- 50, 56,
- 50, 57,
- 50, 58,
- 50, 66,
- 50, 86,
- 51, 36,
- 51, 40,
- 51, 48,
- 51, 50,
- 51, 53,
- 51, 54,
- 51, 55,
- 51, 56,
- 51, 58,
- 51, 66,
- 51, 70,
- 51, 80,
- 51, 86,
- 51, 90,
- 52, 66,
- 52, 70,
- 52, 75,
- 52, 78,
- 52, 79,
- 52, 80,
- 52, 81,
- 52, 82,
- 52, 86,
- 52, 88,
- 52, 90,
- 53, 13,
- 53, 14,
- 53, 15,
- 53, 27,
- 53, 28,
- 53, 34,
- 53, 36,
- 53, 40,
- 53, 48,
- 53, 50,
- 53, 52,
- 53, 53,
- 53, 55,
- 53, 56,
- 53, 57,
- 53, 58,
- 53, 66,
- 53, 70,
- 53, 74,
- 53, 78,
- 53, 80,
- 53, 83,
- 53, 84,
- 53, 86,
- 53, 88,
- 53, 90,
- 53, 91,
- 54, 34,
- 54, 69,
- 54, 71,
- 54, 72,
- 54, 78,
- 54, 79,
- 54, 81,
- 54, 83,
- 54, 84,
- 54, 85,
- 54, 89,
- 54, 91,
- 55, 10,
- 55, 13,
- 55, 14,
- 55, 15,
- 55, 27,
- 55, 28,
- 55, 34,
- 55, 36,
- 55, 40,
- 55, 48,
- 55, 50,
- 55, 62,
- 55, 66,
- 55, 70,
- 55, 80,
- 55, 83,
- 55, 86,
- 55, 90,
- 55, 94,
- 56, 10,
- 56, 13,
- 56, 14,
- 56, 15,
- 56, 27,
- 56, 28,
- 56, 34,
- 56, 36,
- 56, 40,
- 56, 48,
- 56, 50,
- 56, 53,
- 56, 62,
- 56, 66,
- 56, 70,
- 56, 80,
- 56, 83,
- 56, 86,
- 56, 90,
- 56, 94,
- 57, 36,
- 57, 40,
- 57, 48,
- 57, 50,
- 57, 70,
- 57, 86,
- 57, 90,
- 58, 10,
- 58, 13,
- 58, 14,
- 58, 15,
- 58, 27,
- 58, 28,
- 58, 34,
- 58, 36,
- 58, 40,
- 58, 48,
- 58, 50,
- 58, 53,
- 58, 55,
- 58, 56,
- 58, 57,
- 58, 58,
- 58, 62,
- 58, 66,
- 58, 70,
- 58, 80,
- 58, 82,
- 58, 85,
- 58, 86,
- 58, 87,
- 58, 94,
- 59, 34,
- 59, 36,
- 59, 40,
- 59, 48,
- 59, 50,
- 59, 66,
- 59, 70,
- 59, 74,
- 59, 80,
- 59, 86,
- 59, 88,
- 59, 90,
- 60, 43,
- 67, 87,
- 67, 88,
- 67, 90,
- 70, 90,
- 71, 3,
- 71, 8,
- 71, 10,
- 71, 62,
- 71, 72,
- 71, 94,
- 76, 70,
- 80, 87,
- 80, 88,
- 80, 89,
- 80, 90,
- 81, 88,
- 83, 13,
- 83, 15,
- 83, 68,
- 83, 69,
- 83, 70,
- 83, 71,
- 83, 76,
- 83, 80,
- 83, 82,
- 83, 85,
- 83, 86,
- 83, 87,
- 83, 88,
- 83, 89,
- 83, 90,
- 83, 91,
- 87, 13,
- 87, 15,
- 87, 66,
- 87, 68,
- 87, 69,
- 87, 70,
- 87, 80,
- 87, 82,
- 88, 13,
- 88, 15,
- 88, 68,
- 88, 69,
- 88, 70,
- 88, 82,
- 89, 68,
- 89, 69,
- 89, 70,
- 89, 80,
- 89, 82,
- 90, 13,
- 90, 15,
- 90, 68,
- 90, 69,
- 90, 70,
- 90, 80,
- 90, 82,
- 91, 68,
- 91, 69,
- 91, 70,
- 91, 80,
- 92, 43
+ 0, 1, 0, 2, 0, 0, 0, 0,
+ 2, 3, 0, 0, 0, 4, 0, 4,
+ 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 7, 8, 9, 10, 11,
+ 0, 12, 12, 13, 14, 15, 12, 12,
+ 9, 16, 17, 18, 0, 19, 13, 20,
+ 21, 22, 23, 24, 25, 0, 0, 0,
+ 0, 0, 26, 27, 28, 0, 29, 30,
+ 0, 31, 0, 0, 32, 0, 31, 31,
+ 33, 27, 0, 34, 0, 35, 0, 36,
+ 37, 38, 36, 39, 40, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
};
-/* Kerning between the respective left and right glyphs
- * 4.4 format which needs to scaled with `kern_scale`*/
-static const int8_t kern_pair_values[] =
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] =
{
- -16, 7, 6, 8, 1, -6, -1, 1,
- -1, 1, -7, 1, -1, -1, -1, 0,
- -3, -3, 1, -2, -3, -4, -3, 0,
- -3, -1, 1, 3, 1, -1, -5, 1,
- 0, 1, -5, 6, 3, 1, -14, 3,
- -1, -4, 1, 3, 1, 0, -1, 1,
- -5, 0, -7, -4, 4, 2, 0, -7,
- 2, 6, -28, -5, -7, 7, -4, -1,
- 0, -4, 2, 3, 1, 0, 1, -7,
- -2, 1, -1, 1, -8, 1, -7, -7,
- -7, -7, -26, -8, -25, -17, -28, 1,
- -3, -5, -4, -3, -4, -3, 1, -11,
- -4, -14, -12, 4, -28, 2, -1, -1,
- 1, 0, 1, 1, -1, -1, -2, -1,
- -2, -1, -1, 2, -2, -7, -4, -1,
- 1, 1, 1, 3, 3, 3, -2, -7,
- -7, -7, -6, -6, -2, -1, -1, -2,
- -3, -3, -7, -2, -6, -3, -8, -6,
- -9, -8, 1, -8, 1, -53, -53, -21,
- -12, -8, -1, -2, -8, -9, -8, -9,
- 0, 1, 0, 0, 0, 0, 0, -1,
- -2, -2, -2, -1, -1, -1, -3, -2,
- -1, -1, -1, -2, -1, -1, -1, -2,
- -1, -1, -1, -1, -2, -2, -10, -10,
- -11, -10, -2, -9, -2, -9, -1, -8,
- -14, -14, 7, -7, -8, -9, -8, -27,
- -9, -32, -19, -30, 0, -5, -15, -19,
- -1, -2, -1, -1, -2, -1, -1, -2,
- -2, -1, -7, -9, -8, -4, -8, -10,
- 0, -1, 0, 0, 0, -2, 0, 0,
- 1, 0, 1, 0, -2, 1, -3, -58,
- -58, -19, -1, -1, -1, -4, -4, 0,
- -1, -1, -1, -4, -1, -2, 5, 5,
- 5, -12, -2, -10, -7, 4, -12, 0,
- -1, -2, -2, -2, -2, -7, -2, -7,
- -5, -17, -1, -3, -3, -1, 0, 0,
- -1, -2, -1, -1, -1, 0, 0, 0,
- 1, 1, -28, -27, -28, -26, -27, -28,
- -9, -10, -10, -9, -6, 6, 6, 5,
- 4, 6, -27, -28, -1, -23, -28, -23,
- -27, -23, -17, -17, -21, -8, -3, -1,
- -1, -1, -1, -1, -1, -2, 0, -3,
- -3, 7, -31, -13, -30, -11, -11, -26,
- -7, -7, -8, -7, 6, -16, -16, -16,
- -11, -10, -4, 7, 5, -20, -7, -20,
- -8, -8, -19, -5, -5, -5, -5, 5,
- 4, -12, -11, -11, -7, -7, -2, 5,
- -8, -8, -9, -8, -9, -8, -11, 7,
- -32, -18, -32, -15, -15, -29, -9, -10,
- -10, -10, 6, 6, 6, 5, 6, 6,
- -22, -23, -23, -21, -8, -14, -7, 7,
- 5, -8, -9, -9, -9, 0, -7, -2,
- -8, -7, -10, -9, -6, -4, -3, -4,
- -4, 5, 6, 7, 6, -8, 7, -7,
- -5, -3, -7, -5, -3, -22, -22, -7,
- -6, -7, 5, 0, -7, -6, 6, 0,
- 6, 6, 3, 6, 2, -21, -20, -5,
- -5, -5, -5, -5, -5, -16, -15, -3,
- -3, -4, -3, -7, -6, -7, -7, -6,
- -24, -22, -6, -6, -6, -6, -7, -6,
- -5, -6, -6, -7
+ 0, 1, 0, 2, 0, 0, 0, 3,
+ 2, 0, 4, 5, 0, 6, 7, 6,
+ 8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 10, 0, 11, 0, 0, 0,
+ 11, 0, 0, 12, 0, 0, 0, 0,
+ 11, 0, 11, 0, 13, 14, 15, 16,
+ 17, 18, 19, 20, 0, 0, 21, 0,
+ 0, 0, 22, 0, 23, 23, 23, 24,
+ 23, 0, 0, 0, 0, 0, 25, 25,
+ 26, 25, 23, 27, 28, 29, 30, 31,
+ 32, 33, 31, 34, 0, 0, 35, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
};
-/*Collect the kern pair's data in one place*/
-static const lv_font_fmt_txt_kern_pair_t kern_pairs =
+/*Kern values between classes*/
+static const int8_t kern_class_values[] =
{
- .glyph_ids = kern_pair_glyph_ids,
- .values = kern_pair_values,
- .pair_cnt = 484,
- .glyph_ids_size = 0
+ 0, 0, 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, 0, 0,
+ 0, 0, 0, 0, -18, 0, 0, 0,
+ 0, 0, 0, 0, -21, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -9, -10, 0, -3, -10, 0, -14, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 3, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -29, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -38, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -21, 0, 0, 0, 0, 0, 0, -10,
+ 0, -2, 0, 0, -22, -3, -15, -12,
+ 0, -16, 0, 0, 0, 0, 0, 0,
+ -2, 0, 0, -3, -2, -9, -6, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -5,
+ 0, -4, 0, 0, -9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -5, 0, 0, 0, 0, 0,
+ 0, -2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3,
+ 0, 0, 0, 0, 0, -18, 0, 0,
+ 0, -4, 0, 0, 0, -5, 0, -4,
+ 0, -4, -7, -4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, -3, -3, 0, -3, 0, 0, 0,
+ -3, -4, -4, 0, 0, 0, 0, 0,
+ 0, 0, 0, -40, 0, 0, 0, -29,
+ 0, -45, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, -6, -4, 0, 0, -4,
+ -4, 0, 0, -4, -4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, -5, 0,
+ 0, 0, 3, -5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -11, 0, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -4, 0, -4,
+ -5, 0, 0, 0, -4, -7, -11, 0,
+ 0, 0, 0, -58, 0, 0, 0, 0,
+ 0, 0, 0, 3, -11, 0, 0, -47,
+ -9, -30, -25, 0, -41, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -8,
+ -23, -16, 0, 0, 0, 0, 0, 0,
+ 0, 0, -56, 0, 0, 0, -24, 0,
+ -34, 0, 0, 0, 0, 0, -5, 0,
+ -4, 0, -2, -2, 0, 0, -2, 0,
+ 0, 2, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -7, 0, -5,
+ -3, 0, -6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -14, 0, -3, 0, 0, -8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -7, 0,
+ 0, 0, 0, -37, -40, 0, 0, -14,
+ -5, -41, -3, 3, 0, 3, 3, 0,
+ 3, 0, 0, -19, -17, 0, -19, -17,
+ -13, -20, 0, -16, -12, -10, -13, -10,
+ 0, 0, 0, 0, 3, 0, -39, -6,
+ 0, 0, -13, -2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, -8, -8,
+ 0, 0, -8, -5, 0, 0, -5, -2,
+ 0, 0, 0, 3, 0, 0, 0, 3,
+ 0, -21, -10, 0, 0, -7, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0,
+ 2, -6, -5, 0, 0, -5, -4, 0,
+ 0, -3, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, -8, 0, 0,
+ 0, -4, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, -4, 0, 0,
+ -4, 0, 0, 0, -4, -5, 0, 0,
+ 0, 0, 0, 0, -5, 3, -8, -36,
+ -9, 0, 0, -16, -5, -16, -3, 3,
+ -16, 3, 3, 2, 3, 0, 3, -13,
+ -11, -4, -7, -11, -7, -10, -4, -7,
+ -3, 0, -4, -5, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, -4,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4, 0, 0, -4, 0,
+ 0, 0, -3, -5, -5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -3, 0, 0, -3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -3, 0, 0, 0, 0, 0, -5,
+ 0, 0, 0, 0, 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, -3, -3,
+ 0, 0, -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, -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, -2, 0, 0, 0, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, -4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, -18, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -23, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -3, 0,
+ -4, -3, 0, 0, 3, 0, 0, 0,
+ -21, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -7, -3, 3, 0, -3, 0, 0, 9,
+ 0, 3, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, -18, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -3, -2,
+ 2, 0, -3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -21, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -3, 0, 0,
+ -3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -3, 0, 0, -3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -3, 0, 0, -3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes =
+{
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 40,
+ .right_class_cnt = 35,
};
/*--------------------
@@ -3156,12 +3197,12 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
-
- .kern_scale = 16,
- .kern_dsc = &kern_pairs,
- .kern_classes = 0
+ .kern_classes = 1,
+ .bitmap_format = 0
};
@@ -3171,11 +3212,13 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
/*Initialize a public general font descriptor*/
lv_font_t lv_font_roboto_22 = {
- .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .line_height = 24, /*The maximum line height required by the font*/
- .base_line = 5, /*Baseline measured from the bottom of the line*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
+ .line_height = 26, /*The maximum line height required by the font*/
+ .base_line = 6, /*Baseline measured from the bottom of the line*/
+ .subpx = LV_FONT_SUBPX_NONE,
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if LV_FONT_ROBOTO_22*/
+
diff --git a/src/lv_font/lv_font_roboto_28.c b/src/lv_font/lv_font_roboto_28.c
index e1867ef36..f3e58bb33 100644
--- a/src/lv_font/lv_font_roboto_28.c
+++ b/src/lv_font/lv_font_roboto_28.c
@@ -3,7 +3,7 @@
/*******************************************************************************
* Size: 28 px
* Bpp: 4
- * Opts:
+ * Opts: --no-compress --no-prefilter --bpp 4 --size 28 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_28.c --force-fast-kern-format
******************************************************************************/
#ifndef LV_FONT_ROBOTO_28
@@ -21,2755 +21,2976 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+20 " " */
/* U+21 "!" */
- 0xcf, 0xfc, 0xff, 0xcf, 0xfc, 0xff, 0xcf, 0xfc,
- 0xff, 0xcf, 0xfc, 0xff, 0xcf, 0xfc, 0xff, 0xcf,
- 0xfc, 0xff, 0xcf, 0xf6, 0x88, 0x0, 0x0, 0x0,
- 0x0, 0x9, 0xbb, 0xcf, 0xfc, 0xff,
+ 0xbf, 0xe0, 0xbf, 0xe0, 0xbf, 0xe0, 0xaf, 0xe0,
+ 0xaf, 0xe0, 0xaf, 0xd0, 0xaf, 0xd0, 0x9f, 0xd0,
+ 0x9f, 0xd0, 0x9f, 0xc0, 0x9f, 0xc0, 0x9f, 0xc0,
+ 0x8f, 0xc0, 0x8f, 0xc0, 0x13, 0x20, 0x0, 0x0,
+ 0x0, 0x0, 0x5d, 0x90, 0xcf, 0xf2, 0x6f, 0xb0,
/* U+22 "\"" */
- 0x4f, 0xf8, 0xf, 0xfc, 0x4f, 0xf8, 0xf, 0xfc,
- 0x4f, 0xf8, 0xf, 0xfc, 0x4f, 0xf8, 0xf, 0xfb,
- 0x4f, 0xf2, 0xf, 0xf6, 0x4f, 0xc0, 0xf, 0xf0,
- 0x4f, 0x60, 0xf, 0x90, 0x14, 0x0, 0x4, 0x10,
+ 0x2f, 0xc0, 0x7f, 0x72, 0xfc, 0x7, 0xf7, 0x2f,
+ 0xb0, 0x7f, 0x62, 0xfa, 0x7, 0xf5, 0x2f, 0x80,
+ 0x7f, 0x42, 0xf7, 0x7, 0xf2, 0x1b, 0x40, 0x5b,
+ 0x10,
/* U+23 "#" */
- 0x0, 0x0, 0x1, 0xff, 0x0, 0x8, 0xf8, 0x0,
- 0x0, 0x0, 0x4, 0xfc, 0x0, 0xc, 0xf5, 0x0,
- 0x0, 0x0, 0x8, 0xf9, 0x0, 0xf, 0xf2, 0x0,
- 0x0, 0x0, 0xb, 0xf6, 0x0, 0x2f, 0xf0, 0x0,
- 0x0, 0x0, 0xe, 0xf3, 0x0, 0x5f, 0xc0, 0x0,
- 0x4, 0x33, 0x3f, 0xf3, 0x33, 0x9f, 0xa3, 0x31,
- 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xc, 0xcc, 0xef, 0xec, 0xcc, 0xff, 0xcc, 0xc3,
- 0x0, 0x0, 0xbf, 0x70, 0x2, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0x40, 0x4, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0x0, 0x8, 0xf9, 0x0, 0x0,
- 0x0, 0x4, 0xfd, 0x0, 0xb, 0xf6, 0x0, 0x0,
- 0x87, 0x7a, 0xfd, 0x77, 0x7d, 0xf9, 0x77, 0x20,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40,
- 0x88, 0x8f, 0xfa, 0x88, 0xaf, 0xe8, 0x88, 0x20,
- 0x0, 0xf, 0xf0, 0x0, 0x8f, 0x90, 0x0, 0x0,
- 0x0, 0x4f, 0xd0, 0x0, 0xbf, 0x70, 0x0, 0x0,
- 0x0, 0x7f, 0xa0, 0x0, 0xef, 0x40, 0x0, 0x0,
- 0x0, 0xaf, 0x70, 0x1, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xdf, 0x40, 0x4, 0xfd, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x8f, 0x70,
+ 0x0, 0x0, 0x0, 0x4, 0xfb, 0x0, 0xb, 0xf4,
+ 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0xef,
+ 0x10, 0x0, 0x0, 0x0, 0xa, 0xf5, 0x0, 0x1f,
+ 0xe0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0x20, 0x4,
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0,
+ 0x7f, 0x80, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x30, 0xe, 0xee, 0xff, 0xfe,
+ 0xee, 0xff, 0xee, 0xe3, 0x0, 0x0, 0x9, 0xf5,
+ 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xdf,
+ 0x10, 0x4, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x1f,
+ 0xe0, 0x0, 0x7f, 0x70, 0x0, 0x0, 0x0, 0x4,
+ 0xfa, 0x0, 0xb, 0xf3, 0x0, 0x0, 0xe, 0xee,
+ 0xef, 0xfe, 0xee, 0xff, 0xee, 0xe2, 0x0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0,
+ 0x0, 0xdf, 0x10, 0x4, 0xfa, 0x0, 0x0, 0x0,
+ 0x0, 0xf, 0xe0, 0x0, 0x7f, 0x70, 0x0, 0x0,
+ 0x0, 0x3, 0xfb, 0x0, 0xa, 0xf4, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0x80, 0x0, 0xdf, 0x20, 0x0,
+ 0x0, 0x0, 0x9, 0xf5, 0x0, 0xf, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0xcf, 0x20, 0x3, 0xfc, 0x0,
+ 0x0, 0x0,
/* U+24 "$" */
- 0x0, 0x0, 0x0, 0x23, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0x80, 0x0, 0x0, 0x0, 0x1, 0x9d, 0xff,
- 0xfc, 0x70, 0x0, 0x0, 0x3d, 0xff, 0xff, 0xff,
- 0xfa, 0x10, 0x0, 0xcf, 0xf9, 0x41, 0x5e, 0xff,
- 0x80, 0x4, 0xff, 0xb0, 0x0, 0x1, 0xff, 0xe0,
- 0x6, 0xff, 0x40, 0x0, 0x0, 0x9f, 0xf3, 0x8,
- 0xff, 0x40, 0x0, 0x0, 0x7f, 0xf4, 0x4, 0xff,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xe5,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xb4,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xd6,
- 0x10, 0x0, 0x0, 0x0, 0x29, 0xff, 0xff, 0xe5,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xdf, 0xff, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xe1, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf4, 0x2c, 0xb6,
- 0x0, 0x0, 0x0, 0x4f, 0xf8, 0xf, 0xfa, 0x0,
- 0x0, 0x0, 0x4f, 0xf7, 0xf, 0xfe, 0x20, 0x0,
- 0x0, 0xbf, 0xf4, 0x6, 0xff, 0xd4, 0x0, 0x39,
- 0xff, 0xd0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0x30, 0x0, 0x5, 0xdf, 0xff, 0xff, 0xa1, 0x0,
- 0x0, 0x0, 0x1, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcc, 0x30, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xdf, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xdf, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xdf, 0x30, 0x0, 0x0, 0x0, 0x1, 0x9e,
+ 0xff, 0xfa, 0x30, 0x0, 0x0, 0x3f, 0xff, 0xff,
+ 0xff, 0xf6, 0x0, 0x1, 0xef, 0xf7, 0x32, 0x6f,
+ 0xff, 0x20, 0x6, 0xff, 0x50, 0x0, 0x4, 0xff,
+ 0x90, 0xa, 0xfe, 0x0, 0x0, 0x0, 0xcf, 0xe0,
+ 0xb, 0xfd, 0x0, 0x0, 0x0, 0x9f, 0xf0, 0x9,
+ 0xff, 0x10, 0x0, 0x0, 0x25, 0x50, 0x5, 0xff,
+ 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xfd,
+ 0x60, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff,
+ 0xa3, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff, 0xff,
+ 0xb1, 0x0, 0x0, 0x0, 0x0, 0x39, 0xff, 0xfe,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xff, 0xa0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x5b,
+ 0xb0, 0x0, 0x0, 0x0, 0x6f, 0xf3, 0x6f, 0xf2,
+ 0x0, 0x0, 0x0, 0x5f, 0xf3, 0x2f, 0xf8, 0x0,
+ 0x0, 0x0, 0xaf, 0xf0, 0xc, 0xff, 0x60, 0x0,
+ 0x8, 0xff, 0xa0, 0x2, 0xff, 0xfe, 0xcd, 0xff,
+ 0xfe, 0x10, 0x0, 0x2b, 0xff, 0xff, 0xff, 0xa1,
+ 0x0, 0x0, 0x0, 0x16, 0xff, 0x51, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0xff, 0x0, 0x0, 0x0,
/* U+25 "%" */
- 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1a, 0xff, 0xfa, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xfc, 0x8c, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xfc, 0x0, 0xc,
- 0xf7, 0x0, 0x0, 0xc5, 0x0, 0x0, 0x8f, 0x80,
- 0x0, 0x7f, 0x90, 0x0, 0x7f, 0xa0, 0x0, 0x8,
- 0xf8, 0x0, 0x4, 0xfc, 0x0, 0x2e, 0xf1, 0x0,
- 0x0, 0x8f, 0x80, 0x0, 0x7f, 0x90, 0xb, 0xf6,
- 0x0, 0x0, 0x3, 0xfd, 0x10, 0xc, 0xf6, 0x5,
- 0xfc, 0x0, 0x0, 0x0, 0xb, 0xfd, 0xad, 0xfc,
- 0x1, 0xdf, 0x20, 0x0, 0x0, 0x0, 0x8, 0xef,
- 0xe9, 0x10, 0x9f, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xd, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfa, 0x1,
- 0x9d, 0xeb, 0x40, 0x0, 0x0, 0x0, 0x2, 0xef,
- 0x11, 0xef, 0xdc, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0xbf, 0x60, 0xaf, 0xa0, 0x4, 0xfe, 0x0, 0x0,
- 0x0, 0x5f, 0xc0, 0xd, 0xf3, 0x0, 0xd, 0xf3,
- 0x0, 0x0, 0x1d, 0xf2, 0x0, 0xff, 0x0, 0x0,
- 0xcf, 0x40, 0x0, 0x9, 0xf8, 0x0, 0xe, 0xf1,
- 0x0, 0xc, 0xf4, 0x0, 0x1, 0xfe, 0x0, 0x0,
- 0xbf, 0x60, 0x1, 0xef, 0x10, 0x0, 0x1, 0x30,
- 0x0, 0x3, 0xff, 0x87, 0xcf, 0x90, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0x91, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x34, 0x0,
- 0x0,
+ 0x0, 0x7d, 0xfd, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xaf, 0xeb, 0xef, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4f, 0xc0, 0x0, 0xcf, 0x40,
+ 0x0, 0x9, 0x20, 0x0, 0x8, 0xf6, 0x0, 0x6,
+ 0xf8, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x9f, 0x50,
+ 0x0, 0x4f, 0x90, 0x2, 0xfd, 0x0, 0x0, 0x8,
+ 0xf6, 0x0, 0x5, 0xf8, 0x0, 0xbf, 0x40, 0x0,
+ 0x0, 0x4f, 0xc0, 0x0, 0xcf, 0x40, 0x6f, 0xa0,
+ 0x0, 0x0, 0x0, 0xaf, 0xeb, 0xdf, 0xb0, 0x1e,
+ 0xe1, 0x0, 0x0, 0x0, 0x0, 0x7d, 0xfe, 0x70,
+ 0xa, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xef, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x9f, 0x60, 0x1a, 0xef,
+ 0xc4, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x1e,
+ 0xfc, 0xbf, 0xf6, 0x0, 0x0, 0x0, 0xd, 0xf2,
+ 0x9, 0xf8, 0x0, 0x2f, 0xf0, 0x0, 0x0, 0x8,
+ 0xf8, 0x0, 0xdf, 0x10, 0x0, 0xbf, 0x40, 0x0,
+ 0x2, 0xfd, 0x0, 0xe, 0xf0, 0x0, 0x9, 0xf4,
+ 0x0, 0x0, 0xcf, 0x30, 0x0, 0xdf, 0x10, 0x0,
+ 0xbf, 0x40, 0x0, 0x1d, 0x90, 0x0, 0x9, 0xf8,
+ 0x0, 0x2f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1e, 0xfc, 0xaf, 0xf6, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1a, 0xef, 0xc4, 0x0,
/* U+26 "&" */
- 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xdf, 0xff, 0xd5, 0x0, 0x0, 0x0,
- 0x0, 0x5f, 0xff, 0xff, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0xff, 0xf3, 0x1, 0xcf, 0xf2, 0x0, 0x0,
- 0x4, 0xff, 0x90, 0x0, 0x2f, 0xf6, 0x0, 0x0,
- 0x5, 0xff, 0x50, 0x0, 0xf, 0xf7, 0x0, 0x0,
- 0x4, 0xff, 0x70, 0x0, 0x6f, 0xf3, 0x0, 0x0,
- 0x0, 0xff, 0xd0, 0x6, 0xef, 0xa0, 0x0, 0x0,
- 0x0, 0x8f, 0xf9, 0xaf, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0,
- 0x0, 0x19, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xcf, 0xff, 0xfe, 0x20, 0x0, 0x4, 0x32,
- 0x1c, 0xff, 0x76, 0xff, 0xc1, 0x0, 0xf, 0xf4,
- 0xaf, 0xf7, 0x0, 0x9f, 0xf9, 0x0, 0x4f, 0xf4,
- 0xff, 0xd0, 0x0, 0xb, 0xff, 0x80, 0x7f, 0xf0,
- 0xff, 0x90, 0x0, 0x1, 0xdf, 0xf6, 0xef, 0xb0,
- 0xff, 0xc0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0x40,
- 0xcf, 0xe2, 0x0, 0x0, 0x3, 0xff, 0xf9, 0x0,
- 0x4f, 0xfc, 0x40, 0x0, 0x4b, 0xff, 0xfc, 0x10,
- 0x7, 0xff, 0xff, 0xbf, 0xff, 0xfd, 0xff, 0x90,
- 0x0, 0x4c, 0xff, 0xff, 0xfb, 0x40, 0xcf, 0xf8,
- 0x0, 0x0, 0x3, 0x44, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x7d, 0xff, 0xc6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xcf, 0xff, 0xff, 0xfa, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xf9, 0x22, 0x9f, 0xf5, 0x0,
+ 0x0, 0x0, 0xd, 0xfc, 0x0, 0x0, 0xcf, 0xa0,
+ 0x0, 0x0, 0x0, 0xff, 0x90, 0x0, 0xa, 0xfa,
+ 0x0, 0x0, 0x0, 0xe, 0xfa, 0x0, 0x0, 0xef,
+ 0x70, 0x0, 0x0, 0x0, 0x9f, 0xf2, 0x1, 0xcf,
+ 0xe0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xc5, 0xef,
+ 0xe3, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
+ 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
+ 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
+ 0xff, 0x50, 0x0, 0x2, 0x20, 0x0, 0x6f, 0xfb,
+ 0x2c, 0xff, 0x30, 0x3, 0xff, 0x10, 0x1f, 0xfc,
+ 0x0, 0x1d, 0xfe, 0x20, 0x5f, 0xf0, 0x7, 0xff,
+ 0x20, 0x0, 0x2e, 0xfd, 0x19, 0xfd, 0x0, 0x9f,
+ 0xf0, 0x0, 0x0, 0x4f, 0xfc, 0xff, 0x80, 0x8,
+ 0xff, 0x10, 0x0, 0x0, 0x5f, 0xff, 0xf1, 0x0,
+ 0x4f, 0xf9, 0x0, 0x0, 0x0, 0xcf, 0xfa, 0x0,
+ 0x0, 0xbf, 0xfa, 0x31, 0x15, 0xcf, 0xff, 0xf5,
+ 0x0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xf8, 0xcf,
+ 0xf2, 0x0, 0x0, 0x5a, 0xef, 0xfd, 0x82, 0x2,
+ 0xff, 0xd1,
/* U+27 "'" */
- 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf5,
- 0x4f, 0xf0, 0x4f, 0xa0, 0x4f, 0x30,
+ 0x9f, 0x79, 0xf7, 0x9f, 0x69, 0xf5, 0x9f, 0x49,
+ 0xf3, 0x48, 0x10,
/* U+28 "(" */
- 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x8,
- 0xd0, 0x0, 0x0, 0xa, 0xfd, 0x0, 0x0, 0x8,
- 0xfe, 0x10, 0x0, 0x3, 0xff, 0x40, 0x0, 0x0,
- 0xdf, 0xa0, 0x0, 0x0, 0x5f, 0xf2, 0x0, 0x0,
- 0xb, 0xfb, 0x0, 0x0, 0x2, 0xff, 0x70, 0x0,
- 0x0, 0x8f, 0xf2, 0x0, 0x0, 0xc, 0xfe, 0x0,
- 0x0, 0x0, 0xcf, 0xc0, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0x0, 0xff, 0x90, 0x0, 0x0, 0x3f,
- 0xf8, 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0,
- 0xf, 0xf9, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0,
- 0x0, 0xc, 0xfc, 0x0, 0x0, 0x0, 0xcf, 0xd0,
- 0x0, 0x0, 0x7, 0xff, 0x20, 0x0, 0x0, 0x2f,
- 0xf7, 0x0, 0x0, 0x0, 0xbf, 0xb0, 0x0, 0x0,
- 0x5, 0xff, 0x20, 0x0, 0x0, 0xd, 0xfa, 0x0,
- 0x0, 0x0, 0x3f, 0xf4, 0x0, 0x0, 0x0, 0x7f,
- 0xc1, 0x0, 0x0, 0x0, 0xaf, 0xc1, 0x0, 0x0,
- 0x0, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x20,
+ 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0xa,
+ 0xc0, 0x0, 0x0, 0xb, 0xfb, 0x0, 0x0, 0x9,
+ 0xfc, 0x0, 0x0, 0x4, 0xff, 0x10, 0x0, 0x0,
+ 0xdf, 0x70, 0x0, 0x0, 0x6f, 0xe0, 0x0, 0x0,
+ 0xd, 0xf9, 0x0, 0x0, 0x2, 0xff, 0x30, 0x0,
+ 0x0, 0x7f, 0xf0, 0x0, 0x0, 0xb, 0xfb, 0x0,
+ 0x0, 0x0, 0xef, 0x90, 0x0, 0x0, 0xf, 0xf7,
+ 0x0, 0x0, 0x2, 0xff, 0x60, 0x0, 0x0, 0x2f,
+ 0xf5, 0x0, 0x0, 0x2, 0xff, 0x50, 0x0, 0x0,
+ 0x2f, 0xf6, 0x0, 0x0, 0x0, 0xff, 0x70, 0x0,
+ 0x0, 0xe, 0xf9, 0x0, 0x0, 0x0, 0xbf, 0xb0,
+ 0x0, 0x0, 0x6, 0xfe, 0x0, 0x0, 0x0, 0x2f,
+ 0xf3, 0x0, 0x0, 0x0, 0xdf, 0x80, 0x0, 0x0,
+ 0x6, 0xfe, 0x0, 0x0, 0x0, 0xd, 0xf6, 0x0,
+ 0x0, 0x0, 0x4f, 0xe1, 0x0, 0x0, 0x0, 0x9f,
+ 0xb0, 0x0, 0x0, 0x0, 0xbf, 0xa0, 0x0, 0x0,
+ 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x20,
/* U+29 ")" */
- 0x20, 0x0, 0x0, 0x0, 0xba, 0x10, 0x0, 0x0,
- 0xaf, 0xc1, 0x0, 0x0, 0xb, 0xfa, 0x0, 0x0,
- 0x1, 0xff, 0x60, 0x0, 0x0, 0x8f, 0xe2, 0x0,
- 0x0, 0x1e, 0xf9, 0x0, 0x0, 0x9, 0xfe, 0x0,
- 0x0, 0x4, 0xff, 0x50, 0x0, 0x0, 0xff, 0xb0,
- 0x0, 0x0, 0xaf, 0xf0, 0x0, 0x0, 0x8f, 0xf0,
- 0x0, 0x0, 0x8f, 0xf3, 0x0, 0x0, 0x6f, 0xf4,
- 0x0, 0x0, 0x4f, 0xf6, 0x0, 0x0, 0x4f, 0xf6,
- 0x0, 0x0, 0x6f, 0xf4, 0x0, 0x0, 0x8f, 0xf3,
- 0x0, 0x0, 0x8f, 0xf0, 0x0, 0x0, 0xaf, 0xf0,
- 0x0, 0x0, 0xff, 0xb0, 0x0, 0x3, 0xff, 0x50,
- 0x0, 0x8, 0xfe, 0x0, 0x0, 0xe, 0xf9, 0x0,
- 0x0, 0x6f, 0xf2, 0x0, 0x1, 0xef, 0x60, 0x0,
- 0xa, 0xfb, 0x0, 0x0, 0xaf, 0xd1, 0x0, 0x0,
- 0xba, 0x10, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0,
+ 0x1, 0x0, 0x0, 0x0, 0x4f, 0x40, 0x0, 0x0,
+ 0x3e, 0xf5, 0x0, 0x0, 0x3, 0xff, 0x20, 0x0,
+ 0x0, 0x8f, 0xd0, 0x0, 0x0, 0xe, 0xf7, 0x0,
+ 0x0, 0x7, 0xfe, 0x0, 0x0, 0x1, 0xff, 0x60,
+ 0x0, 0x0, 0xbf, 0xb0, 0x0, 0x0, 0x7f, 0xf0,
+ 0x0, 0x0, 0x3f, 0xf4, 0x0, 0x0, 0xf, 0xf7,
+ 0x0, 0x0, 0xe, 0xf9, 0x0, 0x0, 0xd, 0xfb,
+ 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0xd, 0xfb,
+ 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0xe, 0xf9,
+ 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0, 0x3f, 0xf4,
+ 0x0, 0x0, 0x6f, 0xf0, 0x0, 0x0, 0xaf, 0xb0,
+ 0x0, 0x0, 0xff, 0x60, 0x0, 0x5, 0xfe, 0x0,
+ 0x0, 0xd, 0xf7, 0x0, 0x0, 0x6f, 0xd0, 0x0,
+ 0x2, 0xff, 0x30, 0x0, 0x2e, 0xf5, 0x0, 0x0,
+ 0x4f, 0x50, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0,
/* U+2A "*" */
- 0x0, 0x0, 0xcb, 0x30, 0x0, 0x0, 0x0, 0xff,
- 0x10, 0x0, 0x24, 0x0, 0xff, 0x0, 0x22, 0x7f,
- 0xd8, 0xff, 0x5c, 0xf8, 0x8f, 0xff, 0xff, 0xff,
- 0xfa, 0x0, 0x3e, 0xff, 0xd6, 0x10, 0x0, 0x6f,
- 0xff, 0xf4, 0x0, 0x3, 0xef, 0x79, 0xfe, 0x10,
- 0x5, 0xfc, 0x1, 0xef, 0x60, 0x0, 0x32, 0x0,
- 0x43, 0x0,
+ 0x0, 0x0, 0xf, 0xf1, 0x0, 0x0, 0x0, 0x0,
+ 0xf, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf0,
+ 0x0, 0x0, 0x1a, 0x40, 0xe, 0xf0, 0x2, 0x81,
+ 0x6f, 0xfe, 0x8e, 0xf7, 0xcf, 0xf6, 0x28, 0xdf,
+ 0xff, 0xff, 0xff, 0xa4, 0x0, 0x2, 0xcf, 0xfc,
+ 0x40, 0x0, 0x0, 0x4, 0xfe, 0xff, 0x20, 0x0,
+ 0x0, 0x1e, 0xf5, 0x7f, 0xd0, 0x0, 0x0, 0xbf,
+ 0xb0, 0xd, 0xf9, 0x0, 0x0, 0xbf, 0x10, 0x3,
+ 0xfb, 0x0, 0x0, 0x3, 0x0, 0x0, 0x40, 0x0,
/* U+2B "+" */
- 0x0, 0x0, 0x4, 0x77, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x8,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x40,
- 0x0, 0x0, 0xcb, 0xbb, 0xbd, 0xff, 0xcb, 0xbb,
- 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0xcc, 0xcc, 0xce, 0xff, 0xdc, 0xcc, 0xc9, 0x0,
- 0x0, 0x8, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x8,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x40, 0x0,
+ 0x0, 0x0, 0x2, 0x77, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x6, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x6, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6,
+ 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x20,
+ 0x0, 0x0, 0x56, 0x66, 0x69, 0xff, 0x76, 0x66,
+ 0x64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0,
+ 0x0, 0x6, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x6, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6,
+ 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x20, 0x0,
0x0,
/* U+2C "," */
- 0x8f, 0xf4, 0x8f, 0xf4, 0x8f, 0xf4, 0x8f, 0xf2,
- 0x8f, 0xc0, 0x8f, 0x60, 0x48, 0x0,
+ 0x4, 0xff, 0x30, 0x4f, 0xf3, 0x4, 0xff, 0x20,
+ 0x7f, 0xf0, 0xc, 0xf9, 0x5, 0xff, 0x10, 0x1b,
+ 0x40, 0x0,
/* U+2D "-" */
- 0x57, 0x77, 0x77, 0x77, 0x2b, 0xff, 0xff, 0xff,
- 0xf5, 0x7a, 0xaa, 0xaa, 0xaa, 0x30,
+ 0x1, 0x11, 0x11, 0x10, 0x8f, 0xff, 0xff, 0xf2,
+ 0x8f, 0xff, 0xff, 0xf2,
/* U+2E "." */
- 0x9c, 0xac, 0xfe, 0xcf, 0xe0,
+ 0x9, 0xfa, 0x0, 0xff, 0xf1, 0x9, 0xfa, 0x0,
/* U+2F "/" */
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xa0, 0x0, 0x0,
- 0x0, 0x1e, 0xf4, 0x0, 0x0, 0x0, 0x6, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0xdf, 0x80, 0x0, 0x0,
- 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x0, 0x9, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x5f, 0xf0, 0x0, 0x0, 0x0, 0xb, 0xfa,
- 0x0, 0x0, 0x0, 0x2, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x7f, 0xd0, 0x0, 0x0, 0x0, 0xe, 0xf7,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0x10, 0x0, 0x0,
- 0x0, 0xaf, 0xa0, 0x0, 0x0, 0x0, 0x1e, 0xf5,
- 0x0, 0x0, 0x0, 0x6, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0xdf, 0x80, 0x0, 0x0, 0x0, 0x2f, 0xf2,
- 0x0, 0x0, 0x0, 0x9, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x60, 0x0, 0x0, 0x0, 0x5f, 0xf0,
- 0x0, 0x0, 0x0, 0x8, 0xc8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xaf, 0x80, 0x0, 0x0,
+ 0x0, 0xf, 0xf2, 0x0, 0x0, 0x0, 0x6, 0xfc,
+ 0x0, 0x0, 0x0, 0x0, 0xcf, 0x50, 0x0, 0x0,
+ 0x0, 0x2f, 0xf0, 0x0, 0x0, 0x0, 0x9, 0xf9,
+ 0x0, 0x0, 0x0, 0x0, 0xef, 0x30, 0x0, 0x0,
+ 0x0, 0x5f, 0xd0, 0x0, 0x0, 0x0, 0xb, 0xf6,
+ 0x0, 0x0, 0x0, 0x1, 0xff, 0x10, 0x0, 0x0,
+ 0x0, 0x7f, 0xa0, 0x0, 0x0, 0x0, 0xe, 0xf4,
+ 0x0, 0x0, 0x0, 0x4, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0xaf, 0x80, 0x0, 0x0, 0x0, 0x1f, 0xf2,
+ 0x0, 0x0, 0x0, 0x6, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0xdf, 0x50, 0x0, 0x0, 0x0, 0x3f, 0xe0,
+ 0x0, 0x0, 0x0, 0x9, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0x30, 0x0, 0x0, 0x0, 0x5f, 0xc0,
+ 0x0, 0x0, 0x0, 0x5, 0x84, 0x0, 0x0, 0x0,
0x0,
/* U+30 "0" */
- 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xae, 0xff, 0xd9, 0x10, 0x0, 0x0, 0x6e,
- 0xff, 0xff, 0xff, 0xd3, 0x0, 0x2, 0xff, 0xd4,
- 0x0, 0x6f, 0xfd, 0x0, 0xb, 0xff, 0x10, 0x0,
- 0x4, 0xff, 0x70, 0x1f, 0xf9, 0x0, 0x0, 0x0,
- 0xdf, 0xc0, 0x4f, 0xf6, 0x0, 0x0, 0x0, 0x9f,
- 0xf0, 0x6f, 0xf4, 0x0, 0x0, 0x0, 0x8f, 0xf2,
- 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x8f, 0xf4, 0x8f,
- 0xf4, 0x0, 0x0, 0x0, 0x8f, 0xf4, 0x8f, 0xf4,
- 0x0, 0x0, 0x0, 0x8f, 0xf4, 0x8f, 0xf4, 0x0,
- 0x0, 0x0, 0x8f, 0xf4, 0x8f, 0xf4, 0x0, 0x0,
- 0x0, 0x8f, 0xf4, 0x8f, 0xf4, 0x0, 0x0, 0x0,
- 0x8f, 0xf4, 0x6f, 0xf4, 0x0, 0x0, 0x0, 0x8f,
- 0xf2, 0x4f, 0xf5, 0x0, 0x0, 0x0, 0x9f, 0xf0,
- 0x1f, 0xf9, 0x0, 0x0, 0x0, 0xdf, 0xe0, 0xc,
- 0xfe, 0x10, 0x0, 0x4, 0xff, 0x80, 0x3, 0xff,
- 0xc2, 0x0, 0x3e, 0xff, 0x10, 0x0, 0x7f, 0xff,
- 0xde, 0xff, 0xf4, 0x0, 0x0, 0x3, 0xdf, 0xff,
- 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0,
- 0x0, 0x0,
+ 0x0, 0x2, 0x9d, 0xff, 0xc8, 0x10, 0x0, 0x0,
+ 0x5f, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x2, 0xff,
+ 0xd5, 0x12, 0x7f, 0xfd, 0x0, 0xa, 0xff, 0x10,
+ 0x0, 0x5, 0xff, 0x50, 0xf, 0xf9, 0x0, 0x0,
+ 0x0, 0xdf, 0xb0, 0x2f, 0xf5, 0x0, 0x0, 0x0,
+ 0x9f, 0xe0, 0x5f, 0xf2, 0x0, 0x0, 0x0, 0x7f,
+ 0xf0, 0x6f, 0xf2, 0x0, 0x0, 0x0, 0x6f, 0xf1,
+ 0x6f, 0xf1, 0x0, 0x0, 0x0, 0x6f, 0xf2, 0x6f,
+ 0xf1, 0x0, 0x0, 0x0, 0x6f, 0xf2, 0x6f, 0xf1,
+ 0x0, 0x0, 0x0, 0x6f, 0xf2, 0x6f, 0xf1, 0x0,
+ 0x0, 0x0, 0x6f, 0xf2, 0x5f, 0xf2, 0x0, 0x0,
+ 0x0, 0x6f, 0xf1, 0x5f, 0xf3, 0x0, 0x0, 0x0,
+ 0x7f, 0xf0, 0x2f, 0xf5, 0x0, 0x0, 0x0, 0x9f,
+ 0xe0, 0xf, 0xf9, 0x0, 0x0, 0x0, 0xef, 0xa0,
+ 0x9, 0xff, 0x20, 0x0, 0x5, 0xff, 0x50, 0x2,
+ 0xff, 0xe5, 0x11, 0x6f, 0xfc, 0x0, 0x0, 0x5f,
+ 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x2, 0x9d,
+ 0xff, 0xd8, 0x10, 0x0,
/* U+31 "1" */
- 0x0, 0x0, 0x0, 0x3, 0x27, 0xab, 0xcf, 0xfc,
- 0x4f, 0xff, 0xff, 0xfc, 0x28, 0x88, 0x8f, 0xfc,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0xf, 0xfc,
+ 0x0, 0x0, 0x3, 0x9e, 0x0, 0x17, 0xdf, 0xff,
+ 0x4b, 0xff, 0xff, 0xff, 0xaf, 0xfd, 0x7a, 0xff,
+ 0x99, 0x30, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
+ 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
+ 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
+ 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
+ 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
+ 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
+ 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
+ 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x9, 0xff,
/* U+32 "2" */
- 0x0, 0x0, 0x1, 0x20, 0x0, 0x0, 0x0, 0x2,
- 0xae, 0xff, 0xfb, 0x40, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0xff, 0x60, 0x3, 0xff, 0xe5, 0x0, 0x4e,
- 0xff, 0x30, 0xbf, 0xf2, 0x0, 0x0, 0x4f, 0xf8,
- 0xf, 0xfc, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xcc,
- 0x60, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0x20, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0x70, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x3, 0xff,
- 0xd1, 0x0, 0x0, 0x0, 0x2, 0xef, 0xf1, 0x0,
- 0x0, 0x0, 0x1, 0xcf, 0xf3, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0xf7, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x80,
+ 0x0, 0x4, 0xae, 0xff, 0xc8, 0x10, 0x0, 0x0,
+ 0xaf, 0xff, 0xff, 0xff, 0xe3, 0x0, 0xa, 0xff,
+ 0xb3, 0x12, 0x8f, 0xff, 0x10, 0x3f, 0xf9, 0x0,
+ 0x0, 0x6, 0xff, 0x70, 0x8f, 0xf1, 0x0, 0x0,
+ 0x0, 0xff, 0xb0, 0xbf, 0xe0, 0x0, 0x0, 0x0,
+ 0xcf, 0xc0, 0x1, 0x10, 0x0, 0x0, 0x0, 0xef,
+ 0x90, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0xc, 0xfc, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8f, 0xf3, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x4f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
+ 0xb0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xfc, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xef, 0xd1, 0x0, 0x0,
+ 0x0, 0x0, 0x1d, 0xfd, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0xcf, 0xe2, 0x0, 0x0, 0x0, 0x0, 0xb,
+ 0xff, 0x31, 0x11, 0x11, 0x11, 0x10, 0x5f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfb, 0x5f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfb,
/* U+33 "3" */
- 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xaf, 0xff, 0xfb, 0x40, 0x0, 0x0, 0x9f,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x6, 0xff, 0xd4,
- 0x0, 0x4e, 0xff, 0x40, 0xf, 0xff, 0x10, 0x0,
- 0x4, 0xff, 0x90, 0x1f, 0xf8, 0x0, 0x0, 0x0,
- 0xff, 0xc0, 0x14, 0x42, 0x0, 0x0, 0x0, 0xcf,
- 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xb0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x60, 0x0,
- 0x0, 0x13, 0x36, 0x9f, 0xfa, 0x0, 0x0, 0x0,
- 0x4f, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x3c,
- 0xcd, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1a, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0xf1, 0x13, 0x31, 0x0, 0x0, 0x0, 0x8f, 0xf4,
- 0x4f, 0xf6, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0xf,
- 0xfc, 0x0, 0x0, 0x1, 0xef, 0xd0, 0x9, 0xff,
- 0xa2, 0x0, 0x2c, 0xff, 0x50, 0x0, 0xbf, 0xff,
- 0xde, 0xff, 0xfa, 0x0, 0x0, 0x5, 0xef, 0xff,
- 0xfe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0,
- 0x0, 0x0,
+ 0x0, 0x4, 0xae, 0xfe, 0xc7, 0x0, 0x0, 0xa,
+ 0xff, 0xff, 0xff, 0xfd, 0x10, 0x9, 0xff, 0xa4,
+ 0x13, 0x8f, 0xfc, 0x2, 0xff, 0xa0, 0x0, 0x0,
+ 0x7f, 0xf4, 0x6f, 0xf2, 0x0, 0x0, 0x1, 0xff,
+ 0x83, 0x77, 0x0, 0x0, 0x0, 0xf, 0xf9, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xff, 0x70, 0x0, 0x0,
+ 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x1, 0x14,
+ 0xbf, 0xf6, 0x0, 0x0, 0xa, 0xff, 0xff, 0xe4,
+ 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xa1, 0x0,
+ 0x0, 0x0, 0x0, 0x28, 0xff, 0xd0, 0x0, 0x0,
+ 0x0, 0x0, 0x3, 0xff, 0x70, 0x0, 0x0, 0x0,
+ 0x0, 0xc, 0xfc, 0x35, 0x40, 0x0, 0x0, 0x0,
+ 0xaf, 0xea, 0xff, 0x0, 0x0, 0x0, 0xc, 0xfc,
+ 0x6f, 0xf6, 0x0, 0x0, 0x4, 0xff, 0x80, 0xdf,
+ 0xf9, 0x31, 0x27, 0xef, 0xe1, 0x1, 0xdf, 0xff,
+ 0xff, 0xff, 0xe3, 0x0, 0x0, 0x6b, 0xef, 0xfc,
+ 0x71, 0x0,
/* U+34 "4" */
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x2e, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x5, 0xff,
- 0xcf, 0xf4, 0x0, 0x0, 0x0, 0x1d, 0xfb, 0x8f,
- 0xf4, 0x0, 0x0, 0x0, 0x8f, 0xf1, 0x8f, 0xf4,
- 0x0, 0x0, 0x2, 0xff, 0x70, 0x8f, 0xf4, 0x0,
- 0x0, 0xc, 0xfd, 0x0, 0x8f, 0xf4, 0x0, 0x0,
- 0x5f, 0xf3, 0x0, 0x8f, 0xf4, 0x0, 0x1, 0xef,
- 0x90, 0x0, 0x8f, 0xf4, 0x0, 0x9, 0xff, 0x10,
- 0x0, 0x8f, 0xf4, 0x0, 0x3f, 0xf6, 0x0, 0x0,
- 0x8f, 0xf4, 0x0, 0xcf, 0xfb, 0xbb, 0xbb, 0xdf,
- 0xfc, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x88, 0x88, 0x88, 0x88, 0xcf, 0xfa, 0x88,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xf4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xef, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0xa, 0xfe, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x5f, 0xf5, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x1, 0xef, 0x73, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0xa, 0xfc, 0x3, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x4f, 0xf3, 0x3, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0xef, 0x80, 0x3, 0xff, 0x50, 0x0,
+ 0x0, 0x9, 0xfd, 0x0, 0x3, 0xff, 0x50, 0x0,
+ 0x0, 0x4f, 0xf3, 0x0, 0x3, 0xff, 0x50, 0x0,
+ 0x0, 0xef, 0x90, 0x0, 0x3, 0xff, 0x50, 0x0,
+ 0x9, 0xfd, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
+ 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
+ 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0,
/* U+35 "5" */
- 0x8, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x9f,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0xc, 0xfe, 0x88,
- 0x88, 0x88, 0x84, 0x0, 0xcf, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xf9, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x2f,
- 0xf5, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x57,
- 0xbc, 0xb7, 0x10, 0x0, 0x4f, 0xff, 0xff, 0xff,
- 0xfe, 0x50, 0x8, 0xff, 0xfa, 0x88, 0xdf, 0xfe,
- 0x20, 0x8f, 0xf3, 0x0, 0x0, 0x9f, 0xfa, 0x2,
- 0x44, 0x0, 0x0, 0x0, 0xef, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xf4, 0x33, 0x30, 0x0, 0x0, 0x8,
- 0xff, 0x2c, 0xfc, 0x0, 0x0, 0x0, 0xbf, 0xf0,
- 0x9f, 0xe1, 0x0, 0x0, 0x2f, 0xfc, 0x4, 0xff,
- 0xc2, 0x0, 0x3c, 0xff, 0x40, 0x9, 0xff, 0xfd,
- 0xef, 0xff, 0x80, 0x0, 0x5, 0xef, 0xff, 0xfe,
- 0x40, 0x0, 0x0, 0x0, 0x4, 0x40, 0x0, 0x0,
- 0x0,
+ 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x5f,
+ 0xff, 0xff, 0xff, 0xff, 0xf0, 0x6, 0xff, 0x55,
+ 0x55, 0x55, 0x55, 0x0, 0x8f, 0xd0, 0x0, 0x0,
+ 0x0, 0x0, 0xa, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd,
+ 0xf7, 0x2, 0x33, 0x0, 0x0, 0x0, 0xff, 0xbe,
+ 0xff, 0xff, 0x91, 0x0, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xd1, 0x1, 0xef, 0xc3, 0x0, 0x4d, 0xff,
+ 0xa0, 0x0, 0x20, 0x0, 0x0, 0xd, 0xff, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf6, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0,
+ 0x0, 0xe, 0xf9, 0x68, 0x40, 0x0, 0x0, 0x0,
+ 0xff, 0x8b, 0xfc, 0x0, 0x0, 0x0, 0x4f, 0xf5,
+ 0x6f, 0xf4, 0x0, 0x0, 0xc, 0xff, 0x10, 0xdf,
+ 0xf7, 0x21, 0x3b, 0xff, 0x70, 0x2, 0xdf, 0xff,
+ 0xff, 0xff, 0xa0, 0x0, 0x0, 0x7c, 0xff, 0xea,
+ 0x40, 0x0,
/* U+36 "6" */
- 0x0, 0x0, 0x0, 0x2, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x3b, 0xef, 0xff, 0xd8, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x6f, 0xfd,
- 0x40, 0x1, 0x65, 0x0, 0x1, 0xef, 0xd1, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xfd, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1f, 0xf8, 0x2, 0x79, 0x85, 0x20, 0x0, 0xf,
- 0xf9, 0x8f, 0xff, 0xff, 0xe6, 0x0, 0xf, 0xff,
- 0xfa, 0x76, 0x9f, 0xff, 0x40, 0xf, 0xff, 0x30,
- 0x0, 0x3, 0xff, 0xd0, 0xf, 0xf9, 0x0, 0x0,
- 0x0, 0xaf, 0xf4, 0xf, 0xf8, 0x0, 0x0, 0x0,
- 0x4f, 0xf6, 0xf, 0xfa, 0x0, 0x0, 0x0, 0x4f,
- 0xf8, 0xd, 0xfc, 0x0, 0x0, 0x0, 0x4f, 0xf7,
- 0xb, 0xff, 0x20, 0x0, 0x0, 0x6f, 0xf4, 0x4,
- 0xff, 0x80, 0x0, 0x0, 0xef, 0xf1, 0x0, 0xaf,
- 0xf8, 0x0, 0x1a, 0xff, 0x70, 0x0, 0x1c, 0xff,
- 0xfc, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x8e, 0xff,
- 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x24, 0x10,
- 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5a, 0xdf, 0x80, 0x0, 0x0,
+ 0x0, 0x4e, 0xff, 0xff, 0x90, 0x0, 0x0, 0x6,
+ 0xff, 0xfa, 0x53, 0x10, 0x0, 0x0, 0x4f, 0xfc,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xd0, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x9, 0xfd, 0x0, 0x1, 0x0, 0x0,
+ 0x0, 0xc, 0xf9, 0x3b, 0xff, 0xfc, 0x50, 0x0,
+ 0xf, 0xfc, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x1f,
+ 0xff, 0xe7, 0x20, 0x4d, 0xff, 0x50, 0x2f, 0xfe,
+ 0x20, 0x0, 0x1, 0xef, 0xd0, 0x3f, 0xf7, 0x0,
+ 0x0, 0x0, 0x7f, 0xf2, 0x3f, 0xf5, 0x0, 0x0,
+ 0x0, 0x4f, 0xf4, 0x2f, 0xf6, 0x0, 0x0, 0x0,
+ 0x2f, 0xf5, 0xf, 0xf9, 0x0, 0x0, 0x0, 0x4f,
+ 0xf4, 0xa, 0xfe, 0x0, 0x0, 0x0, 0x8f, 0xf1,
+ 0x4, 0xff, 0x80, 0x0, 0x1, 0xef, 0xb0, 0x0,
+ 0xaf, 0xf9, 0x21, 0x5d, 0xff, 0x30, 0x0, 0xb,
+ 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x5c,
+ 0xef, 0xd9, 0x20, 0x0,
/* U+37 "7" */
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x34, 0x44,
- 0x44, 0x44, 0x44, 0x9f, 0xf5, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xef, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0xd, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xf2, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xfd, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xdf, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x9,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xd, 0xfd,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf6, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x6f, 0xf1, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xdf, 0x90, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0xb,
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf3,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xc0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0xff, 0x50, 0x0, 0x0,
+ 0x0, 0x0, 0x9, 0xfe, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef,
+ 0x90, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0,
0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xf0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xcf, 0xd0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0xb,
+ 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf7,
+ 0x0, 0x0, 0x0, 0x0,
/* U+38 "8" */
- 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xbf, 0xff, 0xfa, 0x30, 0x0, 0x0, 0xaf,
- 0xff, 0xff, 0xff, 0xf6, 0x0, 0x6, 0xff, 0xe4,
- 0x0, 0x6f, 0xfe, 0x30, 0xc, 0xff, 0x30, 0x0,
- 0x6, 0xff, 0x80, 0xf, 0xfc, 0x0, 0x0, 0x0,
- 0xff, 0xb0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0xff,
- 0xc0, 0xd, 0xfd, 0x0, 0x0, 0x2, 0xff, 0xa0,
- 0x6, 0xff, 0x80, 0x0, 0xb, 0xff, 0x20, 0x0,
- 0xaf, 0xfb, 0x77, 0xcf, 0xf6, 0x0, 0x0, 0x5,
- 0xef, 0xff, 0xfe, 0x30, 0x0, 0x0, 0x6e, 0xff,
- 0xdd, 0xff, 0xd3, 0x0, 0x6, 0xff, 0xa1, 0x0,
- 0x2c, 0xfe, 0x40, 0x2f, 0xfb, 0x0, 0x0, 0x1,
- 0xef, 0xd0, 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x8f,
- 0xf4, 0x8f, 0xf2, 0x0, 0x0, 0x0, 0x6f, 0xf4,
- 0x7f, 0xf4, 0x0, 0x0, 0x0, 0x8f, 0xf3, 0x4f,
- 0xfb, 0x0, 0x0, 0x1, 0xdf, 0xf0, 0xc, 0xff,
- 0xa1, 0x0, 0x2b, 0xff, 0x80, 0x1, 0xef, 0xff,
- 0xed, 0xff, 0xfc, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xfe, 0x60, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0,
- 0x0, 0x0,
+ 0x0, 0x2, 0x9d, 0xff, 0xc7, 0x10, 0x0, 0x0,
+ 0x6f, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x3, 0xff,
+ 0xe5, 0x22, 0x8f, 0xfe, 0x0, 0xa, 0xff, 0x20,
+ 0x0, 0x7, 0xff, 0x60, 0xe, 0xfb, 0x0, 0x0,
+ 0x0, 0xff, 0xa0, 0xf, 0xf9, 0x0, 0x0, 0x0,
+ 0xdf, 0xb0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0xff,
+ 0x90, 0x8, 0xff, 0x20, 0x0, 0x6, 0xff, 0x30,
+ 0x1, 0xdf, 0xe5, 0x23, 0x8f, 0xf9, 0x0, 0x0,
+ 0x1b, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x4d,
+ 0xff, 0xff, 0xff, 0xa1, 0x0, 0x4, 0xff, 0xb3,
+ 0x1, 0x5e, 0xfd, 0x10, 0xe, 0xfb, 0x0, 0x0,
+ 0x1, 0xef, 0xa0, 0x4f, 0xf3, 0x0, 0x0, 0x0,
+ 0x8f, 0xf0, 0x6f, 0xf1, 0x0, 0x0, 0x0, 0x5f,
+ 0xf2, 0x6f, 0xf3, 0x0, 0x0, 0x0, 0x7f, 0xf1,
+ 0x2f, 0xfa, 0x0, 0x0, 0x1, 0xef, 0xd0, 0xa,
+ 0xff, 0xb4, 0x12, 0x5d, 0xff, 0x50, 0x0, 0xbf,
+ 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x4, 0xae,
+ 0xff, 0xd9, 0x20, 0x0,
/* U+39 "9" */
- 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x6c, 0xff, 0xfb, 0x60, 0x0, 0x0, 0xaf, 0xff,
- 0xff, 0xff, 0xb1, 0x0, 0x8f, 0xfb, 0x20, 0x2a,
- 0xff, 0x90, 0x2e, 0xfd, 0x0, 0x0, 0xa, 0xff,
- 0x37, 0xff, 0x60, 0x0, 0x0, 0x2f, 0xf8, 0x8f,
- 0xf2, 0x0, 0x0, 0x0, 0xff, 0xbc, 0xff, 0x0,
- 0x0, 0x0, 0xc, 0xfc, 0xaf, 0xf0, 0x0, 0x0,
- 0x0, 0xcf, 0xf8, 0xff, 0x40, 0x0, 0x0, 0xc,
- 0xff, 0x3f, 0xfa, 0x0, 0x0, 0x3, 0xff, 0xf0,
- 0xcf, 0xf7, 0x0, 0x5, 0xef, 0xff, 0x2, 0xef,
- 0xff, 0xbf, 0xff, 0xef, 0xf0, 0x1, 0x9f, 0xff,
- 0xfd, 0x3c, 0xff, 0x0, 0x0, 0x3, 0x43, 0x0,
- 0xef, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfb,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x80, 0x0,
- 0x0, 0x0, 0x0, 0xdf, 0xf2, 0x0, 0x72, 0x0,
- 0x2, 0xcf, 0xf8, 0x0, 0x3f, 0xfe, 0xbe, 0xff,
- 0xfa, 0x0, 0x2, 0xbf, 0xff, 0xff, 0xd4, 0x0,
- 0x0, 0x0, 0x4, 0x43, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xae, 0xfe, 0xa3, 0x0, 0x0, 0x9,
+ 0xff, 0xff, 0xff, 0xf8, 0x0, 0x7, 0xff, 0xb4,
+ 0x14, 0xcf, 0xf6, 0x0, 0xff, 0xc0, 0x0, 0x0,
+ 0xcf, 0xe0, 0x5f, 0xf3, 0x0, 0x0, 0x3, 0xff,
+ 0x58, 0xff, 0x0, 0x0, 0x0, 0xe, 0xf9, 0x9f,
+ 0xe0, 0x0, 0x0, 0x0, 0xbf, 0xc9, 0xff, 0x0,
+ 0x0, 0x0, 0xa, 0xfd, 0x6f, 0xf3, 0x0, 0x0,
+ 0x0, 0xbf, 0xe1, 0xff, 0xb0, 0x0, 0x0, 0x6f,
+ 0xfd, 0xa, 0xff, 0xb2, 0x2, 0x9f, 0xff, 0xc0,
+ 0xc, 0xff, 0xff, 0xff, 0xcc, 0xfb, 0x0, 0x8,
+ 0xef, 0xfd, 0x70, 0xdf, 0x80, 0x0, 0x0, 0x0,
+ 0x0, 0xf, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xff, 0x10, 0x0, 0x0, 0x0, 0x1, 0xef, 0xb0,
+ 0x0, 0x0, 0x0, 0x2, 0xcf, 0xf2, 0x0, 0x0,
+ 0x13, 0x59, 0xff, 0xf5, 0x0, 0x0, 0xd, 0xff,
+ 0xff, 0xd4, 0x0, 0x0, 0x0, 0xde, 0xda, 0x50,
+ 0x0, 0x0,
/* U+3A ":" */
- 0x9b, 0xbc, 0xff, 0xcf, 0xf0, 0x0, 0x0, 0x0,
+ 0xb, 0xf8, 0x1f, 0xff, 0xb, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x9b, 0xbc, 0xff, 0xcf, 0xf0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xb, 0xf8, 0x2f, 0xff, 0xb, 0xf8,
/* U+3B ";" */
- 0x9b, 0xb0, 0xcf, 0xf0, 0xcf, 0xf0, 0x0, 0x0,
+ 0x2, 0xde, 0x40, 0x7f, 0xf9, 0x2, 0xde, 0x40,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xf4, 0x8f, 0xf4, 0x8f, 0xf4, 0x8f, 0xf2,
- 0x8f, 0xc0, 0x8f, 0x60, 0x48, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff,
+ 0x60, 0x1f, 0xf6, 0x2, 0xff, 0x50, 0x4f, 0xf2,
+ 0xa, 0xfc, 0x2, 0xff, 0x30, 0x9, 0x60, 0x0,
/* U+3C "<" */
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x83, 0x0, 0x0,
- 0x0, 0x2, 0x9f, 0xf4, 0x0, 0x0, 0x4, 0xbf,
- 0xff, 0xf4, 0x0, 0x6, 0xbf, 0xff, 0xf9, 0x20,
- 0x6, 0xdf, 0xff, 0xd6, 0x10, 0x0, 0xff, 0xff,
- 0xa4, 0x0, 0x0, 0x0, 0xff, 0xc5, 0x0, 0x0,
- 0x0, 0x0, 0xaf, 0xff, 0xd7, 0x20, 0x0, 0x0,
- 0x2, 0x8f, 0xff, 0xfa, 0x40, 0x0, 0x0, 0x1,
- 0x8e, 0xff, 0xfd, 0x61, 0x0, 0x0, 0x0, 0x6e,
- 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x5c, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x42,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x20, 0x0,
+ 0x0, 0x0, 0x4, 0xbf, 0xf2, 0x0, 0x0, 0x0,
+ 0x5c, 0xff, 0xff, 0x20, 0x0, 0x6, 0xdf, 0xff,
+ 0xd6, 0x0, 0x1, 0x7e, 0xff, 0xfa, 0x30, 0x0,
+ 0x0, 0xff, 0xfd, 0x71, 0x0, 0x0, 0x0, 0xf,
+ 0xfe, 0x60, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff,
+ 0xf9, 0x30, 0x0, 0x0, 0x0, 0x5, 0xcf, 0xff,
+ 0xc6, 0x0, 0x0, 0x0, 0x0, 0x4b, 0xff, 0xff,
+ 0x90, 0x0, 0x0, 0x0, 0x3, 0xaf, 0xff, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x29, 0xf2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x0,
/* U+3D "=" */
- 0x87, 0x77, 0x77, 0x77, 0x77, 0x74, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc,
- 0xcc, 0xc6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcb, 0xbb, 0xbb, 0xbb,
- 0xbb, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
- 0x88, 0x88, 0x88, 0x88, 0x88, 0x84,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xf7, 0x23, 0x33, 0x33, 0x33,
+ 0x33, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x21, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7,
/* U+3E ">" */
- 0x24, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xfd,
- 0x51, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xe7,
- 0x20, 0x0, 0x0, 0x0, 0x6c, 0xff, 0xff, 0x93,
- 0x0, 0x0, 0x0, 0x2, 0x8e, 0xff, 0xfb, 0x40,
- 0x0, 0x0, 0x0, 0x5, 0xbf, 0xff, 0xd4, 0x0,
- 0x0, 0x0, 0x0, 0x1a, 0xef, 0x80, 0x0, 0x0,
- 0x2, 0x7d, 0xff, 0xf6, 0x0, 0x0, 0x5a, 0xff,
- 0xff, 0x82, 0x0, 0x28, 0xef, 0xff, 0xe6, 0x10,
- 0x0, 0x4f, 0xff, 0xfc, 0x50, 0x0, 0x0, 0x4,
- 0xff, 0xa3, 0x0, 0x0, 0x0, 0x0, 0x38, 0x20,
+ 0x2a, 0x30, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff,
+ 0xc5, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xfe,
+ 0x71, 0x0, 0x0, 0x0, 0x4, 0xaf, 0xff, 0xf9,
+ 0x20, 0x0, 0x0, 0x0, 0x17, 0xdf, 0xff, 0xb4,
+ 0x0, 0x0, 0x0, 0x0, 0x39, 0xff, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x4b, 0xff, 0x80, 0x0, 0x0,
+ 0x28, 0xef, 0xff, 0x92, 0x0, 0x5, 0xbf, 0xff,
+ 0xe8, 0x10, 0x0, 0x8e, 0xff, 0xfd, 0x60, 0x0,
+ 0x0, 0x2f, 0xff, 0xb4, 0x0, 0x0, 0x0, 0x2,
+ 0xf9, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0,
/* U+3F "?" */
- 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x17,
- 0xef, 0xff, 0xe7, 0x0, 0x1, 0xcf, 0xff, 0xff,
- 0xff, 0xc0, 0xa, 0xff, 0xb4, 0x15, 0xcf, 0xf8,
- 0xf, 0xfc, 0x0, 0x0, 0x1f, 0xfc, 0x1c, 0xc6,
- 0x0, 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x0,
- 0x0, 0x3, 0xef, 0xe1, 0x0, 0x0, 0x0, 0x1e,
- 0xff, 0x30, 0x0, 0x0, 0x1, 0xcf, 0xf6, 0x0,
- 0x0, 0x0, 0xa, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0xf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x28, 0x84, 0x0, 0x0,
+ 0x0, 0x3a, 0xef, 0xec, 0x60, 0x0, 0x8, 0xff,
+ 0xff, 0xff, 0xfb, 0x0, 0x4f, 0xfd, 0x63, 0x5c,
+ 0xff, 0x80, 0xbf, 0xe1, 0x0, 0x0, 0xdf, 0xe0,
+ 0xcd, 0x80, 0x0, 0x0, 0x8f, 0xf0, 0x0, 0x0,
+ 0x0, 0x0, 0x7f, 0xf1, 0x0, 0x0, 0x0, 0x0,
+ 0xaf, 0xe0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x70,
+ 0x0, 0x0, 0x0, 0x3e, 0xfd, 0x0, 0x0, 0x0,
+ 0x2, 0xef, 0xe2, 0x0, 0x0, 0x0, 0x1e, 0xfe,
+ 0x20, 0x0, 0x0, 0x0, 0x9f, 0xf3, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xa0, 0x0, 0x0, 0x0, 0x1,
+ 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x55, 0x20,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b, 0xb9,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xfc, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xac, 0x40, 0x0, 0x0, 0x0, 0x3, 0xff, 0xb0,
+ 0x0, 0x0, 0x0, 0x0, 0xcf, 0x60, 0x0, 0x0,
/* U+40 "@" */
- 0x0, 0x0, 0x0, 0x0, 0x4, 0x67, 0x77, 0x42,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x9e,
- 0xff, 0xff, 0xff, 0xfc, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xef, 0xd7, 0x43, 0x14, 0x5a, 0xff,
- 0xb1, 0x0, 0x0, 0x0, 0x6, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0x1, 0xbf, 0xc1, 0x0, 0x0, 0x5,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0x90, 0x0, 0x2, 0xef, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xef, 0x30, 0x0, 0xaf, 0xa0,
- 0x0, 0x0, 0x25, 0x75, 0x20, 0x0, 0x6, 0xfa,
- 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x7f, 0xff, 0xff,
- 0x81, 0x0, 0xf, 0xe1, 0x9, 0xfa, 0x0, 0x0,
- 0x9f, 0xf9, 0x56, 0xef, 0x40, 0x0, 0x9f, 0x40,
- 0xdf, 0x40, 0x0, 0x2f, 0xf6, 0x0, 0xf, 0xf4,
- 0x0, 0x8, 0xf8, 0x1f, 0xf1, 0x0, 0xa, 0xfc,
- 0x0, 0x0, 0xff, 0x30, 0x0, 0x4f, 0x84, 0xff,
- 0x0, 0x0, 0xff, 0x60, 0x0, 0xf, 0xf0, 0x0,
- 0x4, 0xfc, 0x4f, 0xc0, 0x0, 0x4f, 0xf2, 0x0,
- 0x3, 0xff, 0x0, 0x0, 0x4f, 0xc8, 0xfa, 0x0,
- 0x7, 0xff, 0x0, 0x0, 0x4f, 0xf0, 0x0, 0x3,
- 0xfa, 0x8f, 0xc0, 0x0, 0x8f, 0xc0, 0x0, 0x4,
- 0xfc, 0x0, 0x0, 0x5f, 0x88, 0xfc, 0x0, 0x8,
- 0xfc, 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x9, 0xf4,
- 0x5f, 0xc0, 0x0, 0x8f, 0xe0, 0x0, 0x8, 0xfc,
- 0x0, 0x1, 0xee, 0x2, 0xff, 0x0, 0x5, 0xff,
- 0x50, 0x4, 0xef, 0xc0, 0x0, 0xaf, 0x60, 0xf,
- 0xf2, 0x0, 0xf, 0xff, 0xbc, 0xf9, 0xff, 0x87,
- 0xcf, 0xa0, 0x0, 0xaf, 0xa0, 0x0, 0x3f, 0xff,
- 0xf7, 0x6, 0xff, 0xfe, 0x70, 0x0, 0x4, 0xff,
- 0x20, 0x0, 0x3, 0x40, 0x0, 0x2, 0x41, 0x0,
- 0x0, 0x0, 0xb, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3f, 0xfb, 0x20, 0x0, 0x0, 0x0,
- 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xff,
- 0xc8, 0x77, 0x7a, 0xef, 0x20, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xae, 0xff, 0xff, 0xfb, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x24, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5a, 0xde, 0xfe, 0xc8,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xef,
+ 0xff, 0xdd, 0xef, 0xff, 0xb2, 0x0, 0x0, 0x0,
+ 0x0, 0xa, 0xff, 0x93, 0x0, 0x0, 0x5, 0xbf,
+ 0xf4, 0x0, 0x0, 0x0, 0xb, 0xfc, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x4f, 0xf3, 0x0, 0x0, 0x9,
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
+ 0xd0, 0x0, 0x4, 0xfe, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0x70, 0x0, 0xcf, 0x40,
+ 0x0, 0x0, 0x39, 0xba, 0x60, 0x0, 0x0, 0xed,
+ 0x0, 0x3f, 0xd0, 0x0, 0x0, 0x8f, 0xff, 0xff,
+ 0xd2, 0x0, 0x9, 0xf2, 0x9, 0xf6, 0x0, 0x0,
+ 0x7f, 0xe4, 0x2, 0xdf, 0x40, 0x0, 0x5f, 0x60,
+ 0xdf, 0x20, 0x0, 0x2f, 0xf2, 0x0, 0xd, 0xf3,
+ 0x0, 0x3, 0xf8, 0x1f, 0xe0, 0x0, 0x9, 0xf8,
+ 0x0, 0x0, 0xef, 0x10, 0x0, 0x1f, 0xa3, 0xfb,
+ 0x0, 0x0, 0xff, 0x20, 0x0, 0xf, 0xf0, 0x0,
+ 0x1, 0xfa, 0x5f, 0xa0, 0x0, 0x3f, 0xe0, 0x0,
+ 0x1, 0xfe, 0x0, 0x0, 0xf, 0xb6, 0xf9, 0x0,
+ 0x6, 0xfc, 0x0, 0x0, 0x2f, 0xd0, 0x0, 0x2,
+ 0xfa, 0x6f, 0x90, 0x0, 0x8f, 0xa0, 0x0, 0x4,
+ 0xfb, 0x0, 0x0, 0x4f, 0x85, 0xf9, 0x0, 0x8,
+ 0xfb, 0x0, 0x0, 0x7f, 0xa0, 0x0, 0x7, 0xf4,
+ 0x4f, 0xb0, 0x0, 0x6f, 0xe0, 0x0, 0xe, 0xfa,
+ 0x0, 0x0, 0xee, 0x1, 0xfe, 0x0, 0x2, 0xff,
+ 0x70, 0x1b, 0xff, 0xe0, 0x0, 0x9f, 0x70, 0xd,
+ 0xf3, 0x0, 0xa, 0xff, 0xff, 0xf3, 0xcf, 0xda,
+ 0xdf, 0xa0, 0x0, 0x7f, 0x90, 0x0, 0x9, 0xef,
+ 0xb3, 0x1, 0xae, 0xfd, 0x60, 0x0, 0x1, 0xff,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xfc, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfb,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1c, 0xff, 0x72, 0x0, 0x0, 0x4,
+ 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
+ 0xfd, 0xcb, 0xcf, 0xff, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x6b, 0xdf, 0xfe, 0xc8, 0x20,
+ 0x0, 0x0, 0x0,
/* U+41 "A" */
- 0x0, 0x0, 0x0, 0x6, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xe0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xbf, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf6, 0x9f,
- 0xe0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x13,
- 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0xef, 0xa0,
- 0xe, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
- 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, 0xa, 0xff,
- 0x0, 0x3, 0xff, 0x60, 0x0, 0x0, 0x0, 0xff,
- 0xa0, 0x0, 0xe, 0xfb, 0x0, 0x0, 0x0, 0x6f,
- 0xf5, 0x0, 0x0, 0x9f, 0xf2, 0x0, 0x0, 0xb,
- 0xff, 0x77, 0x77, 0x79, 0xff, 0x70, 0x0, 0x1,
+ 0x0, 0x0, 0x0, 0x3, 0xff, 0x70, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xd0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xf3,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xfd,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xb7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xff, 0x51, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0,
+ 0x7, 0xff, 0x0, 0xbf, 0xc0, 0x0, 0x0, 0x0,
+ 0x0, 0xd, 0xfa, 0x0, 0x5f, 0xf2, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xf4, 0x0, 0xf, 0xf8, 0x0,
+ 0x0, 0x0, 0x0, 0x9f, 0xe0, 0x0, 0xa, 0xfe,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0x90, 0x0, 0x4,
+ 0xff, 0x40, 0x0, 0x0, 0x6, 0xff, 0x30, 0x0,
+ 0x0, 0xef, 0xa0, 0x0, 0x0, 0xc, 0xfe, 0x22,
+ 0x22, 0x22, 0xaf, 0xf1, 0x0, 0x0, 0x2f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x8f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
- 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0,
- 0xd, 0xfe, 0x0, 0x0, 0x0, 0x3, 0xff, 0x90,
- 0x2, 0xff, 0x90, 0x0, 0x0, 0x0, 0xe, 0xfd,
- 0x0, 0x8f, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xf3, 0xe, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0xff, 0x93, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0xd, 0xfe,
+ 0xef, 0xc0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x20,
+ 0x4, 0xff, 0x60, 0x0, 0x0, 0x0, 0x2, 0xff,
+ 0x80, 0xa, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0xcf, 0xe0, 0x1f, 0xfa, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xf5, 0x6f, 0xf4, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xf, 0xfb,
/* U+42 "B" */
- 0xcf, 0xff, 0xff, 0xfb, 0xb7, 0x20, 0x0, 0xc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xcf,
- 0xf4, 0x44, 0x44, 0x9f, 0xff, 0x70, 0xc, 0xff,
- 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0xcf, 0xf0,
- 0x0, 0x0, 0x0, 0x8f, 0xf3, 0xc, 0xff, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0x40, 0xcf, 0xf0, 0x0,
- 0x0, 0x0, 0x9f, 0xf3, 0xc, 0xff, 0x0, 0x0,
- 0x0, 0x3e, 0xfc, 0x0, 0xcf, 0xf7, 0x77, 0x77,
- 0x9f, 0xfc, 0x10, 0xc, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x51, 0x0, 0xcf, 0xfc, 0xcc, 0xcc, 0xcf,
- 0xff, 0xc1, 0xc, 0xff, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0xc0, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x8,
- 0xff, 0x6c, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xf8, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xbc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x5c,
- 0xff, 0x0, 0x0, 0x3, 0x4b, 0xff, 0xb0, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xc, 0xff,
- 0xff, 0xff, 0xff, 0xcb, 0x40, 0x0,
+ 0xbf, 0xff, 0xff, 0xff, 0xda, 0x40, 0x0, 0xbf,
+ 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0xbf, 0xf2,
+ 0x22, 0x23, 0x5c, 0xff, 0x90, 0xbf, 0xf0, 0x0,
+ 0x0, 0x0, 0xdf, 0xf0, 0xbf, 0xf0, 0x0, 0x0,
+ 0x0, 0x7f, 0xf3, 0xbf, 0xf0, 0x0, 0x0, 0x0,
+ 0x5f, 0xf4, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x7f,
+ 0xf2, 0xbf, 0xf0, 0x0, 0x0, 0x1, 0xef, 0xd0,
+ 0xbf, 0xf1, 0x11, 0x13, 0x6e, 0xff, 0x30, 0xbf,
+ 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xfa, 0x10, 0xbf, 0xf0, 0x0,
+ 0x0, 0x16, 0xff, 0xd0, 0xbf, 0xf0, 0x0, 0x0,
+ 0x0, 0x5f, 0xf6, 0xbf, 0xf0, 0x0, 0x0, 0x0,
+ 0xe, 0xfb, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xc,
+ 0xfd, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xe, 0xfc,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x8f, 0xf7, 0xbf,
+ 0xf2, 0x22, 0x22, 0x5a, 0xff, 0xe1, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x30, 0xbf, 0xff, 0xff,
+ 0xff, 0xeb, 0x60, 0x0,
/* U+43 "C" */
- 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2a, 0xcf, 0xff, 0xc9, 0x10, 0x0,
- 0x0, 0x6, 0xef, 0xff, 0xff, 0xff, 0xe7, 0x0,
- 0x0, 0x7f, 0xff, 0x51, 0x2, 0x6f, 0xff, 0x40,
- 0x1, 0xef, 0xd1, 0x0, 0x0, 0x2, 0xff, 0xd1,
- 0xa, 0xff, 0x40, 0x0, 0x0, 0x0, 0x7f, 0xf4,
- 0xf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf7,
- 0x2f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x8, 0x84,
- 0x4f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x2f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x4, 0x32,
- 0xf, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf7,
- 0xa, 0xff, 0x40, 0x0, 0x0, 0x0, 0x6f, 0xf4,
- 0x2, 0xff, 0xc1, 0x0, 0x0, 0x1, 0xef, 0xe0,
- 0x0, 0x8f, 0xfc, 0x30, 0x0, 0x4d, 0xff, 0x40,
- 0x0, 0x7, 0xff, 0xff, 0xcf, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x3c, 0xff, 0xff, 0xfa, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x41, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6, 0xbe, 0xfe, 0xc8, 0x10, 0x0,
+ 0x0, 0x3, 0xdf, 0xff, 0xff, 0xff, 0xf6, 0x0,
+ 0x0, 0x3f, 0xff, 0x94, 0x23, 0x7e, 0xff, 0x60,
+ 0x0, 0xdf, 0xf3, 0x0, 0x0, 0x1, 0xef, 0xf1,
+ 0x7, 0xff, 0x50, 0x0, 0x0, 0x0, 0x4f, 0xf7,
+ 0xd, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x6, 0x87,
+ 0x4f, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x6f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x6f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4f, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5, 0x76,
+ 0xd, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfc,
+ 0x7, 0xff, 0x40, 0x0, 0x0, 0x0, 0x4f, 0xf7,
+ 0x1, 0xef, 0xe2, 0x0, 0x0, 0x0, 0xdf, 0xf1,
+ 0x0, 0x4f, 0xff, 0x83, 0x23, 0x7e, 0xff, 0x60,
+ 0x0, 0x4, 0xef, 0xff, 0xff, 0xff, 0xf6, 0x0,
+ 0x0, 0x0, 0x7, 0xce, 0xfe, 0xc8, 0x10, 0x0,
/* U+44 "D" */
- 0xcf, 0xff, 0xff, 0xeb, 0x86, 0x10, 0x0, 0x0,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xe6, 0x0, 0x0,
- 0xcf, 0xf4, 0x44, 0x46, 0x9f, 0xff, 0xb0, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x1, 0xcf, 0xf8, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0xd, 0xff, 0x30,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xb0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xc0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf3,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xe0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xb0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0xc, 0xff, 0x40,
- 0xcf, 0xf0, 0x0, 0x0, 0x1, 0x9f, 0xf9, 0x0,
- 0xcf, 0xf0, 0x0, 0x13, 0x7d, 0xff, 0xd1, 0x0,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0,
- 0xcf, 0xff, 0xff, 0xfd, 0xb8, 0x30, 0x0, 0x0,
+ 0xbf, 0xff, 0xff, 0xfd, 0xa4, 0x0, 0x0, 0xb,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x20, 0x0, 0xbf,
+ 0xf2, 0x22, 0x35, 0xaf, 0xff, 0x30, 0xb, 0xff,
+ 0x0, 0x0, 0x0, 0x3e, 0xfe, 0x10, 0xbf, 0xf0,
+ 0x0, 0x0, 0x0, 0x3f, 0xf9, 0xb, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0xaf, 0xf1, 0xbf, 0xf0, 0x0,
+ 0x0, 0x0, 0x4, 0xff, 0x5b, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0xf, 0xf8, 0xbf, 0xf0, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xab, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0xe, 0xfb, 0xbf, 0xf0, 0x0, 0x0, 0x0,
+ 0x0, 0xef, 0xbb, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0xf, 0xfa, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x1,
+ 0xff, 0x8b, 0xff, 0x0, 0x0, 0x0, 0x0, 0x4f,
+ 0xf5, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xa, 0xff,
+ 0x1b, 0xff, 0x0, 0x0, 0x0, 0x4, 0xff, 0x90,
+ 0xbf, 0xf0, 0x0, 0x0, 0x4, 0xff, 0xe1, 0xb,
+ 0xff, 0x22, 0x23, 0x5b, 0xff, 0xf3, 0x0, 0xbf,
+ 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0, 0xb, 0xff,
+ 0xff, 0xfe, 0xd9, 0x40, 0x0, 0x0,
/* U+45 "E" */
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4c, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf4, 0xcf, 0xf4, 0x44,
- 0x44, 0x44, 0x44, 0x1c, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf3, 0x33, 0x33,
- 0x33, 0x30, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xcf, 0xfc, 0xcc, 0xcc, 0xcc, 0xc0, 0xc,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8c, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfd, 0xbf, 0xf2, 0x22,
+ 0x22, 0x22, 0x22, 0x2b, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0,
+ 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf2, 0x22, 0x22,
+ 0x22, 0x21, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x90, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xb,
+ 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0,
+ 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0xbf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff,
/* U+46 "F" */
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xcf, 0xf4, 0x44,
- 0x44, 0x44, 0x44, 0x3c, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xc,
- 0xff, 0x44, 0x44, 0x44, 0x44, 0x10, 0xcf, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xff, 0x0, 0x0, 0x0,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfa, 0xbf, 0xf2, 0x22,
+ 0x22, 0x22, 0x22, 0x1b, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0,
+ 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0,
+ 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x40, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xb,
+ 0xff, 0x22, 0x22, 0x22, 0x22, 0x0, 0xbf, 0xf0,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0,
+ 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0, 0x0,
0x0, 0x0,
/* U+47 "G" */
- 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2a, 0xcf, 0xff, 0xd9, 0x20, 0x0,
- 0x0, 0x6, 0xef, 0xff, 0xff, 0xff, 0xf7, 0x0,
- 0x0, 0x7f, 0xff, 0x52, 0x1, 0x6f, 0xff, 0x50,
- 0x1, 0xef, 0xe2, 0x0, 0x0, 0x1, 0xff, 0xe1,
- 0xa, 0xff, 0x40, 0x0, 0x0, 0x0, 0x6f, 0xf4,
- 0xf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8,
- 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x4, 0x42,
- 0x4f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xf4, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xfc,
- 0x4f, 0xf4, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xfc,
- 0x4f, 0xf7, 0x0, 0x0, 0x24, 0x44, 0x4f, 0xfc,
- 0x2f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc,
- 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc,
- 0xa, 0xff, 0x40, 0x0, 0x0, 0x0, 0xf, 0xfc,
- 0x2, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x1f, 0xfc,
- 0x0, 0x7f, 0xfe, 0x40, 0x0, 0x6, 0xdf, 0xf6,
- 0x0, 0x7, 0xff, 0xff, 0xcd, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0x2b, 0xff, 0xff, 0xff, 0xa2, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0x44, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x6, 0xbe, 0xff, 0xd9, 0x30, 0x0,
+ 0x0, 0x0, 0x4e, 0xff, 0xff, 0xff, 0xff, 0x90,
+ 0x0, 0x0, 0x4f, 0xff, 0x94, 0x23, 0x6d, 0xff,
+ 0x90, 0x0, 0x1e, 0xff, 0x30, 0x0, 0x0, 0xc,
+ 0xff, 0x30, 0x7, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0x2f, 0xfa, 0x0, 0xdf, 0xe0, 0x0, 0x0, 0x0,
+ 0x0, 0xbe, 0xd0, 0xf, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0xff, 0x60, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf5, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0x50, 0x0,
+ 0x0, 0x22, 0x22, 0x22, 0x20, 0x5f, 0xf5, 0x0,
+ 0x0, 0x3f, 0xff, 0xff, 0xff, 0x4, 0xff, 0x50,
+ 0x0, 0x3, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xf7,
+ 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x0, 0xff,
+ 0xa0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf0, 0xb,
+ 0xff, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x0,
+ 0x5f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf0,
+ 0x0, 0xcf, 0xf6, 0x0, 0x0, 0x0, 0xc, 0xff,
+ 0x0, 0x1, 0xef, 0xfb, 0x52, 0x23, 0x7d, 0xff,
+ 0xa0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0x90, 0x0, 0x0, 0x0, 0x4a, 0xdf, 0xfe, 0xc8,
+ 0x20, 0x0,
/* U+48 "H" */
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0xcf, 0xf4, 0x44, 0x44, 0x44, 0x44, 0x7f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf2, 0x22, 0x22, 0x22, 0x22, 0x2f, 0xf9,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
/* U+49 "I" */
- 0x5e, 0xe4, 0x6f, 0xf4, 0x6f, 0xf4, 0x6f, 0xf4,
- 0x6f, 0xf4, 0x6f, 0xf4, 0x6f, 0xf4, 0x6f, 0xf4,
- 0x6f, 0xf4, 0x6f, 0xf4, 0x6f, 0xf4, 0x6f, 0xf4,
- 0x6f, 0xf4, 0x6f, 0xf4, 0x6f, 0xf4, 0x6f, 0xf4,
- 0x6f, 0xf4, 0x6f, 0xf4, 0x6f, 0xf4, 0x6f, 0xf4,
+ 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
+ 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
+ 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
+ 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
+ 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2, 0x8f, 0xf2,
/* U+4A "J" */
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x87, 0x60, 0x0, 0x0,
- 0xb, 0xff, 0xcf, 0xc0, 0x0, 0x0, 0xd, 0xfe,
- 0xbf, 0xf2, 0x0, 0x0, 0x4f, 0xfb, 0x4f, 0xfc,
- 0x20, 0x3, 0xdf, 0xf3, 0x9, 0xff, 0xfd, 0xef,
- 0xff, 0x70, 0x0, 0x5e, 0xff, 0xff, 0xd3, 0x0,
- 0x0, 0x0, 0x4, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f,
+ 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5f, 0xf4, 0x2b, 0xb4, 0x0, 0x0, 0x0, 0x6f,
+ 0xf4, 0x2f, 0xf8, 0x0, 0x0, 0x0, 0x9f, 0xf1,
+ 0xe, 0xfe, 0x10, 0x0, 0x2, 0xff, 0xd0, 0x6,
+ 0xff, 0xe6, 0x33, 0x7f, 0xff, 0x40, 0x0, 0x8f,
+ 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x3, 0xad,
+ 0xff, 0xd9, 0x20, 0x0,
/* U+4B "K" */
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x90,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x6f, 0xfb, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x3, 0xef, 0xd1, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x1d, 0xff, 0x30, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0xdf, 0xf4, 0x0, 0x0,
- 0xcf, 0xf0, 0x0, 0xa, 0xff, 0x60, 0x0, 0x0,
- 0xcf, 0xf0, 0x0, 0x6f, 0xfa, 0x0, 0x0, 0x0,
- 0xcf, 0xf0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0,
- 0xcf, 0xf0, 0x1e, 0xfd, 0x10, 0x0, 0x0, 0x0,
- 0xcf, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xf0, 0xa, 0xff, 0x90, 0x0, 0x0, 0x0,
- 0xcf, 0xf0, 0x1, 0xdf, 0xf6, 0x0, 0x0, 0x0,
- 0xcf, 0xf0, 0x0, 0x2f, 0xff, 0x30, 0x0, 0x0,
- 0xcf, 0xf0, 0x0, 0x4, 0xff, 0xe2, 0x0, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x7f, 0xfc, 0x10, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0xa, 0xff, 0x90, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x1, 0xdf, 0xf7, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x40,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xe3,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xa, 0xff, 0x80,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x9f, 0xf9, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x7, 0xff, 0xb0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x5f, 0xfc, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x4, 0xff, 0xd1, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x3f, 0xfe, 0x20, 0x0, 0x0,
+ 0xbf, 0xf0, 0x2, 0xef, 0xf3, 0x0, 0x0, 0x0,
+ 0xbf, 0xf0, 0x1d, 0xff, 0x40, 0x0, 0x0, 0x0,
+ 0xbf, 0xf0, 0xcf, 0xf7, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xfb, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xff, 0xfe, 0xff, 0x60, 0x0, 0x0, 0x0,
+ 0xbf, 0xff, 0x91, 0xef, 0xf2, 0x0, 0x0, 0x0,
+ 0xbf, 0xfa, 0x0, 0x4f, 0xfd, 0x0, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x8, 0xff, 0xa0, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0xbf, 0xf6, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x1e, 0xff, 0x30, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x4, 0xff, 0xd0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x7f, 0xfa, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x60,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xf3,
/* U+4C "L" */
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xcc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfc,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0,
+ 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0,
+ 0x0, 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb,
+ 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0,
+ 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0x22, 0x22, 0x22, 0x22, 0x20, 0xbf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf6,
/* U+4D "M" */
- 0xcf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xff, 0xcf, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xef, 0xff, 0xcf, 0xff, 0xb0, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xcf, 0xff,
- 0xf2, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff,
- 0xcf, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3f,
- 0xff, 0xff, 0xcf, 0xfa, 0xfd, 0x0, 0x0, 0x0,
- 0x0, 0xaf, 0xfc, 0xff, 0xcf, 0xf4, 0xff, 0x50,
- 0x0, 0x0, 0x0, 0xff, 0x9c, 0xff, 0xcf, 0xf0,
- 0xef, 0xa0, 0x0, 0x0, 0x6, 0xff, 0x2c, 0xff,
- 0xcf, 0xf0, 0x6f, 0xf1, 0x0, 0x0, 0xc, 0xfb,
- 0xc, 0xff, 0xcf, 0xf0, 0x1f, 0xf7, 0x0, 0x0,
- 0x2f, 0xf5, 0xc, 0xff, 0xcf, 0xf0, 0xa, 0xfd,
- 0x0, 0x0, 0x9f, 0xe0, 0xc, 0xff, 0xcf, 0xf0,
- 0x3, 0xff, 0x40, 0x0, 0xff, 0x80, 0xc, 0xff,
- 0xcf, 0xf0, 0x0, 0xdf, 0xa0, 0x6, 0xff, 0x20,
- 0xc, 0xff, 0xcf, 0xf0, 0x0, 0x6f, 0xe1, 0xc,
- 0xfb, 0x0, 0xc, 0xff, 0xcf, 0xf0, 0x0, 0x1f,
- 0xf6, 0x2f, 0xf5, 0x0, 0xc, 0xff, 0xcf, 0xf0,
- 0x0, 0xa, 0xfc, 0x8f, 0xe0, 0x0, 0xc, 0xff,
- 0xcf, 0xf0, 0x0, 0x3, 0xff, 0xef, 0x80, 0x0,
- 0xc, 0xff, 0xcf, 0xf0, 0x0, 0x0, 0xdf, 0xff,
- 0x20, 0x0, 0xc, 0xff, 0xcf, 0xf0, 0x0, 0x0,
- 0x6f, 0xfb, 0x0, 0x0, 0xc, 0xff, 0xcf, 0xf0,
- 0x0, 0x0, 0x1f, 0xf5, 0x0, 0x0, 0xc, 0xff,
+ 0xbf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xff, 0x2b, 0xff, 0xf4, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xd, 0xff, 0xf2, 0xbf, 0xff, 0xb0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x2b,
+ 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xaf,
+ 0xff, 0xf2, 0xbf, 0xcf, 0xf7, 0x0, 0x0, 0x0,
+ 0x0, 0x1f, 0xfb, 0xff, 0x2b, 0xfb, 0xaf, 0xe0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0x6f, 0xf2, 0xbf,
+ 0xc4, 0xff, 0x40, 0x0, 0x0, 0x0, 0xdf, 0xa5,
+ 0xff, 0x2b, 0xfc, 0xd, 0xfb, 0x0, 0x0, 0x0,
+ 0x4f, 0xf4, 0x5f, 0xf2, 0xbf, 0xd0, 0x7f, 0xf1,
+ 0x0, 0x0, 0xa, 0xfd, 0x6, 0xff, 0x2b, 0xfd,
+ 0x1, 0xff, 0x70, 0x0, 0x1, 0xff, 0x70, 0x6f,
+ 0xf2, 0xbf, 0xe0, 0xa, 0xfe, 0x0, 0x0, 0x7f,
+ 0xf1, 0x7, 0xff, 0x2b, 0xfe, 0x0, 0x3f, 0xf4,
+ 0x0, 0xd, 0xfa, 0x0, 0x7f, 0xf2, 0xbf, 0xe0,
+ 0x0, 0xdf, 0xa0, 0x4, 0xff, 0x30, 0x7, 0xff,
+ 0x2b, 0xff, 0x0, 0x6, 0xff, 0x10, 0xaf, 0xd0,
+ 0x0, 0x8f, 0xf2, 0xbf, 0xf0, 0x0, 0xf, 0xf7,
+ 0x1f, 0xf6, 0x0, 0x8, 0xff, 0x2b, 0xff, 0x0,
+ 0x0, 0x9f, 0xd7, 0xff, 0x0, 0x0, 0x8f, 0xf2,
+ 0xbf, 0xf0, 0x0, 0x3, 0xff, 0xff, 0x90, 0x0,
+ 0x8, 0xff, 0x2b, 0xff, 0x0, 0x0, 0xc, 0xff,
+ 0xf3, 0x0, 0x0, 0x8f, 0xf2, 0xbf, 0xf0, 0x0,
+ 0x0, 0x6f, 0xfc, 0x0, 0x0, 0x8, 0xff, 0x2b,
+ 0xff, 0x0, 0x0, 0x0, 0xff, 0x60, 0x0, 0x0,
+ 0x8f, 0xf2,
/* U+4E "N" */
- 0xcf, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf8, 0xff, 0x70, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0xdf, 0xe2, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x4f, 0xfa, 0x0, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x9, 0xff, 0x50, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x1, 0xef, 0xd1, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x5f, 0xf9, 0x0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0xb, 0xff, 0x40, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x2, 0xff, 0xc0, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x7f, 0xf8, 0x4f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0xc, 0xfe, 0x6f, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x3, 0xff, 0xef, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf4,
+ 0xbf, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xff, 0x90, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xff, 0xf3, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xff, 0xfd, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf7, 0xff, 0x80, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0xcf, 0xf2, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x2f, 0xfc, 0x0, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x8, 0xff, 0x70, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0xdf, 0xf2, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x3f, 0xfc, 0x0, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x8, 0xff, 0x60, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0xdf, 0xf1, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x4f, 0xfb, 0xf, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x9, 0xff, 0x5f, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xef, 0xef, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xf9,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf9,
/* U+4F "O" */
- 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0x9c, 0xff, 0xfb, 0x91, 0x0,
- 0x0, 0x0, 0x5, 0xef, 0xff, 0xff, 0xff, 0xe5,
- 0x0, 0x0, 0x7, 0xff, 0xf7, 0x30, 0x48, 0xff,
- 0xf7, 0x0, 0x1, 0xef, 0xd3, 0x0, 0x0, 0x3,
- 0xdf, 0xe2, 0x0, 0xaf, 0xf4, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xa0, 0xf, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0x3, 0xff, 0x80, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xf4, 0x5f, 0xf5, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0x78, 0xff, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x8f, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0x88, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x8f, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x85, 0xff,
- 0x50, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf7, 0x3f,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x40,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf1,
- 0xc, 0xff, 0x40, 0x0, 0x0, 0x0, 0x3f, 0xfc,
- 0x0, 0x2f, 0xfc, 0x10, 0x0, 0x0, 0x1c, 0xff,
- 0x20, 0x0, 0x8f, 0xfe, 0x42, 0x2, 0x4e, 0xff,
- 0x80, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff,
- 0x70, 0x0, 0x0, 0x0, 0x3b, 0xff, 0xff, 0xeb,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x10,
- 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x5, 0xbe, 0xfe, 0xc7, 0x10, 0x0,
+ 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff, 0xfe, 0x50,
+ 0x0, 0x0, 0x2e, 0xff, 0xb6, 0x45, 0x9f, 0xff,
+ 0x60, 0x0, 0xd, 0xff, 0x50, 0x0, 0x0, 0x2e,
+ 0xff, 0x20, 0x5, 0xff, 0x60, 0x0, 0x0, 0x0,
+ 0x3f, 0xfa, 0x0, 0xcf, 0xe0, 0x0, 0x0, 0x0,
+ 0x0, 0xaf, 0xf0, 0xf, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xff, 0x43, 0xff, 0x50, 0x0, 0x0,
+ 0x0, 0x0, 0x2f, 0xf7, 0x5f, 0xf4, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0x86, 0xff, 0x30, 0x0,
+ 0x0, 0x0, 0x0, 0xf, 0xf9, 0x6f, 0xf3, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0x95, 0xff, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9, 0x4f, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x71, 0xff,
+ 0x90, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0xc,
+ 0xfe, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0x10,
+ 0x6f, 0xf6, 0x0, 0x0, 0x0, 0x2, 0xff, 0xa0,
+ 0x0, 0xdf, 0xf4, 0x0, 0x0, 0x1, 0xdf, 0xf2,
+ 0x0, 0x2, 0xef, 0xfa, 0x53, 0x48, 0xff, 0xf6,
+ 0x0, 0x0, 0x2, 0xdf, 0xff, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x5b, 0xef, 0xec, 0x71,
+ 0x0, 0x0,
/* U+50 "P" */
- 0xcf, 0xff, 0xff, 0xff, 0xba, 0x71, 0x0, 0xc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0x0, 0xcf,
- 0xf4, 0x44, 0x44, 0x59, 0xff, 0xf5, 0xc, 0xff,
- 0x0, 0x0, 0x0, 0x2, 0xff, 0xe2, 0xcf, 0xf0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0x4c, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x4f, 0xf8, 0xcf, 0xf0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0x8c, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xf5, 0xcf, 0xf0, 0x0, 0x0,
- 0x0, 0x1d, 0xff, 0x2c, 0xff, 0x0, 0x0, 0x4,
- 0x5d, 0xff, 0x70, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x90, 0xc, 0xff, 0xff, 0xff, 0xff, 0xca,
- 0x20, 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff,
+ 0xbf, 0xff, 0xff, 0xff, 0xfd, 0x92, 0x0, 0xb,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xbf,
+ 0xf2, 0x22, 0x22, 0x37, 0xef, 0xf7, 0xb, 0xff,
+ 0x0, 0x0, 0x0, 0x1, 0xdf, 0xf1, 0xbf, 0xf0,
+ 0x0, 0x0, 0x0, 0x5, 0xff, 0x6b, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x1f, 0xf9, 0xbf, 0xf0, 0x0,
+ 0x0, 0x0, 0x1, 0xff, 0x9b, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xf7, 0xbf, 0xf0, 0x0, 0x0,
+ 0x0, 0xb, 0xff, 0x3b, 0xff, 0x0, 0x0, 0x0,
+ 0x4b, 0xff, 0xa0, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xfc,
+ 0x60, 0x0, 0xbf, 0xf2, 0x22, 0x21, 0x10, 0x0,
+ 0x0, 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xb, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb,
+ 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+51 "Q" */
- 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x29, 0xcf, 0xff, 0xb9, 0x10,
- 0x0, 0x0, 0x0, 0x5, 0xef, 0xff, 0xff, 0xff,
- 0xe5, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x73, 0x4,
- 0x8f, 0xff, 0x70, 0x0, 0x1, 0xef, 0xd3, 0x0,
- 0x0, 0x3, 0xdf, 0xe2, 0x0, 0xa, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x4f, 0xfa, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x3f,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x40,
- 0x5f, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0x70, 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0xff, 0x80, 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0x80, 0x8f, 0xf4, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0x80, 0x8f, 0xf4, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xff, 0x80, 0x5f, 0xf5, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0xff, 0x80, 0x3f, 0xf8,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x60, 0xf,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0x20,
- 0xc, 0xff, 0x40, 0x0, 0x0, 0x0, 0x3f, 0xfc,
- 0x0, 0x2, 0xff, 0xc1, 0x0, 0x0, 0x1, 0xcf,
- 0xf4, 0x0, 0x0, 0x8f, 0xfe, 0x42, 0x2, 0x4e,
- 0xff, 0xe1, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x20, 0x0, 0x0, 0x3b, 0xff,
- 0xff, 0xfb, 0x4a, 0xff, 0xe3, 0x0, 0x0, 0x0,
- 0x2, 0x44, 0x0, 0x0, 0xaf, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x60,
+ 0x0, 0x0, 0x6, 0xbe, 0xfe, 0xb7, 0x0, 0x0,
+ 0x0, 0x0, 0x3e, 0xff, 0xff, 0xff, 0xfe, 0x40,
+ 0x0, 0x0, 0x4f, 0xff, 0xa5, 0x45, 0xaf, 0xff,
+ 0x40, 0x0, 0x1e, 0xff, 0x30, 0x0, 0x0, 0x3e,
+ 0xfe, 0x10, 0x7, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0x4f, 0xf8, 0x0, 0xef, 0xc0, 0x0, 0x0, 0x0,
+ 0x0, 0xcf, 0xe0, 0x2f, 0xf7, 0x0, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0x25, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xf6, 0x7f, 0xf2, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0xff, 0x78, 0xff, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x8f, 0xf1, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xff, 0x87, 0xff, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf6, 0x6f, 0xf4,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x52, 0xff,
+ 0x70, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf3, 0xe,
+ 0xfc, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfe, 0x0,
+ 0x8f, 0xf5, 0x0, 0x0, 0x0, 0x4, 0xff, 0x80,
+ 0x1, 0xef, 0xf3, 0x0, 0x0, 0x2, 0xef, 0xe0,
+ 0x0, 0x4, 0xff, 0xfa, 0x53, 0x59, 0xff, 0xf4,
+ 0x0, 0x0, 0x3, 0xef, 0xff, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x6b, 0xef, 0xed, 0xff,
+ 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xef, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0xc6, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+52 "R" */
- 0xcf, 0xff, 0xff, 0xfd, 0xb9, 0x50, 0x0, 0xc,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, 0x0, 0xcf,
- 0xf4, 0x44, 0x44, 0x6a, 0xff, 0xe1, 0xc, 0xff,
- 0x0, 0x0, 0x0, 0x7, 0xff, 0xa0, 0xcf, 0xf0,
- 0x0, 0x0, 0x0, 0xd, 0xfc, 0xc, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xf0, 0xcf, 0xf0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xc, 0xff, 0x0, 0x0,
- 0x0, 0x2, 0xef, 0xb0, 0xcf, 0xf0, 0x0, 0x0,
- 0x4, 0xcf, 0xf3, 0xc, 0xff, 0xbb, 0xbb, 0xbe,
- 0xff, 0xe3, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xf7, 0x10, 0xc, 0xff, 0x88, 0x88, 0x88, 0xcf,
- 0xfc, 0x10, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0xaf,
- 0xf8, 0xc, 0xff, 0x0, 0x0, 0x0, 0x1, 0xff,
- 0xc0, 0xcf, 0xf0, 0x0, 0x0, 0x0, 0xc, 0xff,
- 0xc, 0xff, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf0,
- 0xcf, 0xf0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xc,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf0, 0xcf,
- 0xf0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x4c, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x4f, 0xfb,
+ 0xbf, 0xff, 0xff, 0xff, 0xea, 0x50, 0x0, 0xb,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0, 0xbf,
+ 0xf2, 0x22, 0x23, 0x5c, 0xff, 0xd0, 0xb, 0xff,
+ 0x0, 0x0, 0x0, 0x9, 0xff, 0x60, 0xbf, 0xf0,
+ 0x0, 0x0, 0x0, 0xf, 0xfb, 0xb, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0xdf, 0xd0, 0xbf, 0xf0, 0x0,
+ 0x0, 0x0, 0xc, 0xfd, 0xb, 0xff, 0x0, 0x0,
+ 0x0, 0x1, 0xff, 0xb0, 0xbf, 0xf0, 0x0, 0x0,
+ 0x0, 0xaf, 0xf5, 0xb, 0xff, 0x22, 0x22, 0x25,
+ 0xcf, 0xfa, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xfa, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0xbf, 0xf0, 0x0, 0x2, 0xff, 0xa0,
+ 0x0, 0xb, 0xff, 0x0, 0x0, 0x9, 0xff, 0x30,
+ 0x0, 0xbf, 0xf0, 0x0, 0x0, 0x1f, 0xfb, 0x0,
+ 0xb, 0xff, 0x0, 0x0, 0x0, 0x7f, 0xf4, 0x0,
+ 0xbf, 0xf0, 0x0, 0x0, 0x0, 0xef, 0xd0, 0xb,
+ 0xff, 0x0, 0x0, 0x0, 0x6, 0xff, 0x60, 0xbf,
+ 0xf0, 0x0, 0x0, 0x0, 0xd, 0xfe, 0xb, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf7,
/* U+53 "S" */
- 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xdf, 0xff, 0xea, 0x30, 0x0, 0x0,
- 0x2d, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xd,
- 0xff, 0x81, 0x0, 0x5e, 0xff, 0x60, 0x6, 0xff,
- 0x80, 0x0, 0x0, 0x1e, 0xfe, 0x20, 0x9f, 0xf1,
- 0x0, 0x0, 0x0, 0x5f, 0xf5, 0xb, 0xff, 0x0,
- 0x0, 0x0, 0x2, 0xcc, 0x60, 0x8f, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xe5, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfc, 0x62,
- 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xfb,
- 0x51, 0x0, 0x0, 0x0, 0x1, 0x7d, 0xff, 0xff,
- 0xe5, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7d, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0x93, 0xbb, 0x50, 0x0, 0x0, 0x0, 0xf, 0xfc,
- 0x1f, 0xf9, 0x0, 0x0, 0x0, 0x1, 0xff, 0xa0,
- 0xdf, 0xe3, 0x0, 0x0, 0x0, 0x8f, 0xf7, 0x3,
- 0xff, 0xe7, 0x10, 0x1, 0x7f, 0xfd, 0x10, 0x5,
- 0xff, 0xff, 0xdd, 0xff, 0xfe, 0x20, 0x0, 0x1,
- 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x44, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x8c, 0xef, 0xec, 0x71, 0x0, 0x0,
+ 0x6, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x0, 0x5,
+ 0xff, 0xe7, 0x32, 0x37, 0xef, 0xf4, 0x0, 0xef,
+ 0xe1, 0x0, 0x0, 0x1, 0xef, 0xe0, 0x3f, 0xf8,
+ 0x0, 0x0, 0x0, 0x6, 0xff, 0x44, 0xff, 0x60,
+ 0x0, 0x0, 0x0, 0x2e, 0xe6, 0x1f, 0xfb, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfa, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xa5,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff,
+ 0xb4, 0x0, 0x0, 0x0, 0x0, 0x17, 0xdf, 0xff,
+ 0xfd, 0x30, 0x0, 0x0, 0x0, 0x0, 0x27, 0xdf,
+ 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f,
+ 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
+ 0xf6, 0xce, 0xb0, 0x0, 0x0, 0x0, 0x2, 0xff,
+ 0x8b, 0xff, 0x10, 0x0, 0x0, 0x0, 0x3f, 0xf7,
+ 0x4f, 0xfb, 0x0, 0x0, 0x0, 0xa, 0xff, 0x30,
+ 0x9f, 0xfe, 0x74, 0x23, 0x6c, 0xff, 0xb0, 0x0,
+ 0x7f, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0,
+ 0x17, 0xce, 0xff, 0xd9, 0x30, 0x0,
/* U+54 "T" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x48, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0x24, 0x44, 0x44, 0x4f, 0xfd, 0x44, 0x44,
- 0x44, 0x10, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc,
+ 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf1, 0x2, 0x22, 0x22, 0x2f, 0xfb, 0x22, 0x22,
+ 0x22, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfa, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfa,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
- 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0,
+ 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
+ 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xf, 0xfa, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xfa, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0,
0x0, 0x0,
/* U+55 "U" */
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff,
- 0xfc, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xff, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0xcf, 0xff, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0xcf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xc,
- 0xff, 0xcf, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xef,
- 0xc9, 0xff, 0x20, 0x0, 0x0, 0x0, 0x3f, 0xfa,
- 0x4f, 0xfb, 0x0, 0x0, 0x0, 0xd, 0xff, 0x50,
- 0x9f, 0xfb, 0x30, 0x0, 0x4c, 0xff, 0x90, 0x1,
- 0xbf, 0xff, 0xfc, 0xff, 0xff, 0xa0, 0x0, 0x0,
- 0x4d, 0xff, 0xff, 0xfb, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x24, 0x20, 0x0, 0x0, 0x0,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5,
+ 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4,
+ 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf3,
+ 0xc, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0,
+ 0x6, 0xff, 0x90, 0x0, 0x0, 0x5, 0xff, 0x90,
+ 0x0, 0xcf, 0xfb, 0x52, 0x24, 0xaf, 0xfd, 0x10,
+ 0x0, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0,
+ 0x0, 0x0, 0x4a, 0xdf, 0xfe, 0xa5, 0x0, 0x0,
/* U+56 "V" */
- 0x9f, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0xf4, 0x3f, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xe0, 0xd, 0xff, 0x10, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0x80, 0x7, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0xb, 0xff, 0x20, 0x1, 0xff, 0xc0, 0x0,
- 0x0, 0x0, 0x1f, 0xfd, 0x0, 0x0, 0xbf, 0xf2,
- 0x0, 0x0, 0x0, 0x6f, 0xf6, 0x0, 0x0, 0x5f,
- 0xf7, 0x0, 0x0, 0x0, 0xbf, 0xf1, 0x0, 0x0,
- 0xf, 0xfc, 0x0, 0x0, 0x2, 0xff, 0xa0, 0x0,
- 0x0, 0xa, 0xff, 0x30, 0x0, 0x7, 0xff, 0x50,
- 0x0, 0x0, 0x3, 0xff, 0x90, 0x0, 0xd, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0, 0x0, 0x2f,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf3, 0x0,
- 0x7f, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf9,
- 0x0, 0xef, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xb,
- 0xfe, 0x3, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0x59, 0xff, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0x9d, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xaf, 0xdf, 0xf5, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x90,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
- 0x30, 0x0, 0x0, 0x0,
+ 0x6f, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
+ 0xf4, 0x1f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0xe0, 0xb, 0xff, 0x10, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0x80, 0x5, 0xff, 0x70, 0x0, 0x0,
+ 0x0, 0xa, 0xff, 0x20, 0x0, 0xef, 0xc0, 0x0,
+ 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x9f, 0xf2,
+ 0x0, 0x0, 0x0, 0x5f, 0xf6, 0x0, 0x0, 0x3f,
+ 0xf7, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x0, 0x0,
+ 0xd, 0xfd, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0,
+ 0x0, 0x7, 0xff, 0x20, 0x0, 0x5, 0xff, 0x50,
+ 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0xb, 0xfe,
+ 0x0, 0x0, 0x0, 0x0, 0xbf, 0xd0, 0x0, 0x1f,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf3, 0x0,
+ 0x6f, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9,
+ 0x0, 0xcf, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xa,
+ 0xfe, 0x1, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0x47, 0xff, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0x9c, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf5, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xa0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0x40, 0x0, 0x0, 0x0,
/* U+57 "W" */
- 0x7f, 0xf8, 0x0, 0x0, 0x0, 0x6f, 0xf8, 0x0,
- 0x0, 0x0, 0x6f, 0xf8, 0x3f, 0xfc, 0x0, 0x0,
- 0x0, 0xaf, 0xfc, 0x0, 0x0, 0x0, 0xaf, 0xf4,
- 0xf, 0xfe, 0x0, 0x0, 0x0, 0xff, 0xff, 0x10,
- 0x0, 0x0, 0xdf, 0xf0, 0xb, 0xff, 0x30, 0x0,
- 0x3, 0xff, 0xff, 0x50, 0x0, 0x1, 0xff, 0xd0,
- 0x7, 0xff, 0x60, 0x0, 0x7, 0xff, 0xef, 0x90,
- 0x0, 0x4, 0xff, 0x90, 0x3, 0xff, 0xa0, 0x0,
- 0xc, 0xfe, 0xcf, 0xd0, 0x0, 0x8, 0xff, 0x50,
- 0x0, 0xff, 0xc0, 0x0, 0xf, 0xfa, 0x8f, 0xf2,
- 0x0, 0xc, 0xff, 0x10, 0x0, 0xbf, 0xf1, 0x0,
- 0x5f, 0xf6, 0x3f, 0xf6, 0x0, 0xf, 0xfd, 0x0,
- 0x0, 0x8f, 0xf4, 0x0, 0x9f, 0xf1, 0xf, 0xfb,
- 0x0, 0x2f, 0xf9, 0x0, 0x0, 0x4f, 0xf8, 0x0,
- 0xdf, 0xd0, 0xa, 0xfe, 0x0, 0x6f, 0xf5, 0x0,
- 0x0, 0xf, 0xfc, 0x2, 0xff, 0x80, 0x6, 0xff,
- 0x30, 0x9f, 0xf1, 0x0, 0x0, 0xc, 0xfe, 0x6,
- 0xff, 0x30, 0x1, 0xff, 0x80, 0xdf, 0xe0, 0x0,
- 0x0, 0x8, 0xff, 0x3a, 0xfe, 0x0, 0x0, 0xdf,
- 0xc0, 0xff, 0xa0, 0x0, 0x0, 0x4, 0xff, 0x6e,
- 0xfa, 0x0, 0x0, 0x7f, 0xf4, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0xff, 0x8f, 0xf5, 0x0, 0x0, 0x3f,
- 0xf8, 0xff, 0x20, 0x0, 0x0, 0x0, 0xcf, 0xdf,
- 0xf1, 0x0, 0x0, 0xe, 0xfc, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x9f, 0xff, 0xc0, 0x0, 0x0, 0xa,
- 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff,
- 0x70, 0x0, 0x0, 0x5, 0xff, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x1f, 0xff, 0x20, 0x0, 0x0, 0x1,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xd, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf0, 0x0, 0x0,
+ 0xf, 0xf9, 0x0, 0x0, 0x0, 0xa, 0xfd, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0x10, 0xdf, 0xc0, 0x0,
+ 0x0, 0x0, 0xef, 0xf1, 0x0, 0x0, 0x0, 0xbf,
+ 0xd0, 0x9, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xff,
+ 0x60, 0x0, 0x0, 0xf, 0xfa, 0x0, 0x5f, 0xf4,
+ 0x0, 0x0, 0x8, 0xff, 0xfa, 0x0, 0x0, 0x2,
+ 0xff, 0x60, 0x1, 0xff, 0x70, 0x0, 0x0, 0xcf,
+ 0xcf, 0xe0, 0x0, 0x0, 0x6f, 0xf2, 0x0, 0xd,
+ 0xfb, 0x0, 0x0, 0x1f, 0xf5, 0xff, 0x30, 0x0,
+ 0xa, 0xfe, 0x0, 0x0, 0x9f, 0xf0, 0x0, 0x5,
+ 0xff, 0xc, 0xf7, 0x0, 0x0, 0xdf, 0xa0, 0x0,
+ 0x5, 0xff, 0x20, 0x0, 0xaf, 0xb0, 0x7f, 0xc0,
+ 0x0, 0x1f, 0xf6, 0x0, 0x0, 0x2f, 0xf6, 0x0,
+ 0xe, 0xf6, 0x3, 0xff, 0x0, 0x5, 0xff, 0x30,
+ 0x0, 0x0, 0xef, 0xa0, 0x3, 0xff, 0x10, 0xe,
+ 0xf5, 0x0, 0x8f, 0xf0, 0x0, 0x0, 0xa, 0xfd,
+ 0x0, 0x7f, 0xd0, 0x0, 0xaf, 0x90, 0xc, 0xfb,
+ 0x0, 0x0, 0x0, 0x6f, 0xf1, 0xc, 0xf8, 0x0,
+ 0x5, 0xfd, 0x0, 0xff, 0x70, 0x0, 0x0, 0x2,
+ 0xff, 0x50, 0xff, 0x30, 0x0, 0x1f, 0xf2, 0x3f,
+ 0xf3, 0x0, 0x0, 0x0, 0xe, 0xf8, 0x5f, 0xe0,
+ 0x0, 0x0, 0xdf, 0x67, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0xaf, 0xb9, 0xfa, 0x0, 0x0, 0x8, 0xfa,
+ 0x9f, 0xb0, 0x0, 0x0, 0x0, 0x7, 0xfd, 0xdf,
+ 0x50, 0x0, 0x0, 0x4f, 0xec, 0xf8, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xff, 0xf1, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0xff,
+ 0xfc, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0xb, 0xff, 0x70, 0x0, 0x0,
+ 0x0, 0x6f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xf3, 0x0, 0x0, 0x0, 0x2, 0xff, 0x80,
+ 0x0, 0x0,
/* U+58 "X" */
- 0xbf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xf8,
- 0x2f, 0xff, 0x20, 0x0, 0x0, 0x5, 0xff, 0xe1,
- 0x7, 0xff, 0xa0, 0x0, 0x0, 0x1d, 0xff, 0x40,
- 0x0, 0xcf, 0xf4, 0x0, 0x0, 0x8f, 0xf9, 0x0,
- 0x0, 0x3f, 0xfd, 0x0, 0x2, 0xff, 0xf1, 0x0,
- 0x0, 0x8, 0xff, 0x80, 0xc, 0xff, 0x50, 0x0,
- 0x0, 0x0, 0xdf, 0xe2, 0x4f, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xfa, 0xdf, 0xf2, 0x0, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xa, 0xff, 0xff, 0x70, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xfb, 0xdf, 0xe2, 0x0, 0x0,
- 0x0, 0x1, 0xdf, 0xf2, 0x4f, 0xfb, 0x0, 0x0,
- 0x0, 0x9, 0xff, 0x80, 0xa, 0xff, 0x60, 0x0,
- 0x0, 0x3f, 0xfe, 0x0, 0x1, 0xff, 0xe1, 0x0,
- 0x0, 0xdf, 0xf4, 0x0, 0x0, 0x7f, 0xfa, 0x0,
- 0x8, 0xff, 0xb0, 0x0, 0x0, 0xc, 0xff, 0x50,
- 0x2f, 0xff, 0x20, 0x0, 0x0, 0x3, 0xff, 0xd1,
- 0xcf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf9,
+ 0xb, 0xff, 0x50, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0x50, 0x2f, 0xfe, 0x0, 0x0, 0x0, 0x5, 0xff,
+ 0xb0, 0x0, 0x7f, 0xf9, 0x0, 0x0, 0x1, 0xef,
+ 0xf2, 0x0, 0x0, 0xdf, 0xf3, 0x0, 0x0, 0x9f,
+ 0xf7, 0x0, 0x0, 0x3, 0xff, 0xd0, 0x0, 0x3f,
+ 0xfc, 0x0, 0x0, 0x0, 0x9, 0xff, 0x70, 0xd,
+ 0xff, 0x30, 0x0, 0x0, 0x0, 0xe, 0xff, 0x27,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xfc,
+ 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
+ 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2f, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0,
+ 0x6, 0xff, 0xae, 0xfe, 0x10, 0x0, 0x0, 0x0,
+ 0x1, 0xff, 0xe1, 0x6f, 0xfa, 0x0, 0x0, 0x0,
+ 0x0, 0xbf, 0xf5, 0x0, 0xbf, 0xf4, 0x0, 0x0,
+ 0x0, 0x5f, 0xfb, 0x0, 0x2, 0xff, 0xe0, 0x0,
+ 0x0, 0x1e, 0xff, 0x20, 0x0, 0x7, 0xff, 0x90,
+ 0x0, 0x9, 0xff, 0x70, 0x0, 0x0, 0xd, 0xff,
+ 0x30, 0x4, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x3f,
+ 0xfd, 0x0, 0xdf, 0xf3, 0x0, 0x0, 0x0, 0x0,
+ 0x9f, 0xf7,
/* U+59 "Y" */
- 0x4f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xe0, 0xcf, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xf6, 0x2, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x4f,
- 0xfc, 0x0, 0xa, 0xff, 0x60, 0x0, 0x0, 0xc,
- 0xff, 0x40, 0x0, 0x2f, 0xfd, 0x0, 0x0, 0x4,
- 0xff, 0xc0, 0x0, 0x0, 0x8f, 0xf6, 0x0, 0x0,
- 0xcf, 0xf2, 0x0, 0x0, 0x1, 0xff, 0xd0, 0x0,
- 0x4f, 0xfa, 0x0, 0x0, 0x0, 0x8, 0xff, 0x60,
- 0xc, 0xff, 0x20, 0x0, 0x0, 0x0, 0xe, 0xfd,
- 0x15, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xf8, 0xef, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xc, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8f, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf0, 0x0,
+ 0x8f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff,
+ 0x40, 0xef, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff,
+ 0xb0, 0x6, 0xff, 0x80, 0x0, 0x0, 0x0, 0xbf,
+ 0xf3, 0x0, 0xd, 0xff, 0x10, 0x0, 0x0, 0x4f,
+ 0xfa, 0x0, 0x0, 0x5f, 0xf8, 0x0, 0x0, 0xc,
+ 0xff, 0x10, 0x0, 0x0, 0xcf, 0xf1, 0x0, 0x4,
+ 0xff, 0x80, 0x0, 0x0, 0x3, 0xff, 0x90, 0x0,
+ 0xdf, 0xe1, 0x0, 0x0, 0x0, 0xb, 0xff, 0x10,
+ 0x5f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf9,
+ 0xd, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
+ 0xf8, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xf, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xb0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xf, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xb0, 0x0,
0x0, 0x0,
/* U+5A "Z" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x24,
- 0x44, 0x44, 0x44, 0x44, 0x8f, 0xfc, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1d, 0xff, 0x20, 0x0, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xdf, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x9f, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
- 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x50,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xb0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xef, 0xf1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xbf, 0xf5, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5f, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1e, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0xb, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x12,
+ 0x22, 0x22, 0x22, 0x22, 0x5f, 0xfd, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xc, 0xff, 0x20, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0x70, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xdf, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x9f, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xfe,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0x50,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xa0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xef, 0xe1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xf4, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xf9, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xa2, 0x22, 0x22, 0x22, 0x22, 0x21, 0xdf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
/* U+5B "[" */
- 0xcb, 0xbb, 0xb3, 0xff, 0xff, 0xf4, 0xff, 0xe8,
- 0x82, 0xff, 0xc0, 0x0, 0xff, 0xc0, 0x0, 0xff,
- 0xc0, 0x0, 0xff, 0xc0, 0x0, 0xff, 0xc0, 0x0,
- 0xff, 0xc0, 0x0, 0xff, 0xc0, 0x0, 0xff, 0xc0,
- 0x0, 0xff, 0xc0, 0x0, 0xff, 0xc0, 0x0, 0xff,
- 0xc0, 0x0, 0xff, 0xc0, 0x0, 0xff, 0xc0, 0x0,
- 0xff, 0xc0, 0x0, 0xff, 0xc0, 0x0, 0xff, 0xc0,
- 0x0, 0xff, 0xc0, 0x0, 0xff, 0xc0, 0x0, 0xff,
- 0xc0, 0x0, 0xff, 0xc0, 0x0, 0xff, 0xc0, 0x0,
- 0xff, 0xc0, 0x0, 0xff, 0xeb, 0xb3, 0xff, 0xff,
- 0xf4, 0x44, 0x44, 0x41,
+ 0xff, 0xff, 0xf2, 0xff, 0xff, 0xf2, 0xff, 0x91,
+ 0x10, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff,
+ 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0,
+ 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80,
+ 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff,
+ 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0,
+ 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80,
+ 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0, 0xff,
+ 0x80, 0x0, 0xff, 0x80, 0x0, 0xff, 0x80, 0x0,
+ 0xff, 0x91, 0x10, 0xff, 0xff, 0xf2, 0xff, 0xff,
+ 0xf2,
/* U+5C "\\" */
- 0x5f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x9, 0xfe, 0x10, 0x0,
- 0x0, 0x0, 0x2, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0xdf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xf2, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0xa, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0x4, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf2,
- 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf7, 0x0, 0x0,
- 0x0, 0x0, 0xb, 0xfd, 0x0, 0x0, 0x0, 0x0,
- 0x5, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xe1, 0x0,
- 0x0, 0x0, 0x0, 0x2f, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0xd, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x1, 0xff, 0x90,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xe0, 0x0, 0x0,
- 0x0, 0x0, 0x4c, 0xc3,
+ 0x4f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0xd, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xff, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0xbf, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x5f,
+ 0xf1, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x8, 0xfd, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0xcf, 0x90, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xf6, 0x0, 0x0,
+ 0x0, 0x0, 0x9, 0xfc, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0xdf,
+ 0x80, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0,
+ 0x0, 0x0, 0x0, 0x1f, 0xf5, 0x0, 0x0, 0x0,
+ 0x0, 0xb, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xef, 0x70,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xd0, 0x0, 0x0,
+ 0x0, 0x0, 0x18, 0x81,
/* U+5D "]" */
- 0x9b, 0xbb, 0xb6, 0xcf, 0xff, 0xf8, 0x68, 0xaf,
- 0xf8, 0x0, 0x4f, 0xf8, 0x0, 0x4f, 0xf8, 0x0,
- 0x4f, 0xf8, 0x0, 0x4f, 0xf8, 0x0, 0x4f, 0xf8,
- 0x0, 0x4f, 0xf8, 0x0, 0x4f, 0xf8, 0x0, 0x4f,
- 0xf8, 0x0, 0x4f, 0xf8, 0x0, 0x4f, 0xf8, 0x0,
- 0x4f, 0xf8, 0x0, 0x4f, 0xf8, 0x0, 0x4f, 0xf8,
- 0x0, 0x4f, 0xf8, 0x0, 0x4f, 0xf8, 0x0, 0x4f,
- 0xf8, 0x0, 0x4f, 0xf8, 0x0, 0x4f, 0xf8, 0x0,
- 0x4f, 0xf8, 0x0, 0x4f, 0xf8, 0x0, 0x4f, 0xf8,
- 0x0, 0x4f, 0xf8, 0x9b, 0xcf, 0xf8, 0xcf, 0xff,
- 0xf8, 0x34, 0x44, 0x42,
+ 0xef, 0xff, 0xf4, 0xef, 0xff, 0xf4, 0x1, 0x4f,
+ 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0,
+ 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4,
+ 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f,
+ 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0,
+ 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4,
+ 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f,
+ 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0,
+ 0x3f, 0xf4, 0x0, 0x3f, 0xf4, 0x0, 0x3f, 0xf4,
+ 0x11, 0x4f, 0xf4, 0xef, 0xff, 0xf4, 0xef, 0xff,
+ 0xf4,
/* U+5E "^" */
- 0x0, 0x4, 0xfd, 0x0, 0x0, 0x0, 0xa, 0xff,
- 0x60, 0x0, 0x0, 0x1f, 0xff, 0xb0, 0x0, 0x0,
- 0x8f, 0xef, 0xf2, 0x0, 0x0, 0xef, 0x7e, 0xf9,
- 0x0, 0x5, 0xff, 0x27, 0xfe, 0x0, 0xb, 0xfb,
- 0x1, 0xff, 0x60, 0x2f, 0xf5, 0x0, 0xaf, 0xc0,
- 0x9f, 0xf0, 0x0, 0x4f, 0xf3, 0xff, 0x90, 0x0,
- 0xe, 0xfa,
+ 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0xa,
+ 0xff, 0x50, 0x0, 0x0, 0x1, 0xff, 0xfb, 0x0,
+ 0x0, 0x0, 0x7f, 0xef, 0xf2, 0x0, 0x0, 0xd,
+ 0xf6, 0xcf, 0x80, 0x0, 0x4, 0xff, 0x5, 0xfe,
+ 0x0, 0x0, 0xbf, 0x90, 0xe, 0xf5, 0x0, 0x1f,
+ 0xf3, 0x0, 0x8f, 0xc0, 0x8, 0xfd, 0x0, 0x2,
+ 0xff, 0x20, 0xef, 0x60, 0x0, 0xc, 0xf9,
/* U+5F "_" */
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xae, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfa, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x11, 0x10,
+ 0x1, 0x11, 0x11, 0x11, 0x11, 0x11, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x90,
/* U+60 "`" */
- 0x6b, 0xb7, 0x0, 0xc, 0xff, 0x30, 0x1, 0xdf,
- 0xc0, 0x0, 0x1d, 0xf7,
+ 0xc, 0xff, 0x20, 0x0, 0x1d, 0xfc, 0x0, 0x0,
+ 0x1e, 0xf7, 0x0, 0x0, 0x2f, 0xf2,
/* U+61 "a" */
- 0x0, 0x2, 0xad, 0xff, 0xc7, 0x10, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xfe, 0x30, 0x5, 0xff, 0xd5,
- 0x13, 0x8f, 0xfc, 0x0, 0xaf, 0xf1, 0x0, 0x0,
- 0xaf, 0xf3, 0x3, 0x43, 0x0, 0x0, 0x5, 0xff,
- 0x60, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x0,
- 0x2, 0x67, 0x9b, 0xbc, 0xff, 0x80, 0x19, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0xb, 0xff, 0xc5, 0x44,
- 0x47, 0xff, 0x84, 0xff, 0xb0, 0x0, 0x0, 0x4f,
- 0xf8, 0x8f, 0xf4, 0x0, 0x0, 0x5, 0xff, 0x88,
- 0xff, 0x40, 0x0, 0x1, 0xcf, 0xf8, 0x4f, 0xfc,
- 0x20, 0x15, 0xdf, 0xff, 0x80, 0xcf, 0xff, 0xff,
- 0xff, 0x7f, 0xf8, 0x1, 0xaf, 0xff, 0xfb, 0x20,
- 0xff, 0xb0, 0x0, 0x4, 0x41, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xae, 0xff, 0xc7, 0x0, 0x0, 0xa,
+ 0xff, 0xff, 0xff, 0xfd, 0x10, 0x9, 0xff, 0x93,
+ 0x12, 0x9f, 0xf9, 0x1, 0xff, 0x90, 0x0, 0x0,
+ 0xbf, 0xf0, 0x5, 0x51, 0x0, 0x0, 0x6, 0xff,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf3, 0x0,
+ 0x6, 0xbe, 0xff, 0xff, 0xff, 0x30, 0x2d, 0xff,
+ 0xfe, 0xcc, 0xdf, 0xf3, 0xd, 0xfe, 0x50, 0x0,
+ 0x5, 0xff, 0x35, 0xff, 0x30, 0x0, 0x0, 0x5f,
+ 0xf3, 0x7f, 0xf0, 0x0, 0x0, 0x6, 0xff, 0x36,
+ 0xff, 0x50, 0x0, 0x1, 0xdf, 0xf3, 0x1f, 0xff,
+ 0x73, 0x48, 0xef, 0xff, 0x40, 0x6f, 0xff, 0xff,
+ 0xff, 0x9f, 0xf6, 0x0, 0x3a, 0xef, 0xe9, 0x20,
+ 0xbb, 0x70,
/* U+62 "b" */
- 0x43, 0x30, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xc0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x19,
- 0xef, 0xea, 0x50, 0x0, 0xff, 0xdc, 0xff, 0xff,
- 0xff, 0x60, 0xf, 0xff, 0xf8, 0x44, 0x8f, 0xff,
- 0x40, 0xff, 0xf4, 0x0, 0x0, 0x6f, 0xfb, 0xf,
- 0xfc, 0x0, 0x0, 0x0, 0xcf, 0xf2, 0xff, 0xc0,
- 0x0, 0x0, 0x6, 0xff, 0x4f, 0xfc, 0x0, 0x0,
- 0x0, 0x4f, 0xf8, 0xff, 0xc0, 0x0, 0x0, 0x3,
- 0xff, 0x8f, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0xf8,
- 0xff, 0xc0, 0x0, 0x0, 0x4, 0xff, 0x7f, 0xfc,
- 0x0, 0x0, 0x0, 0x8f, 0xf4, 0xff, 0xe3, 0x0,
- 0x0, 0x1e, 0xff, 0x1f, 0xff, 0xe4, 0x0, 0x3c,
- 0xff, 0x80, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xc1,
- 0xf, 0xf2, 0x3c, 0xff, 0xff, 0x90, 0x0, 0x0,
- 0x0, 0x2, 0x42, 0x0, 0x0, 0x0,
+ 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f,
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1f, 0xf7, 0x19, 0xef, 0xea, 0x30,
+ 0x0, 0x1f, 0xfa, 0xff, 0xff, 0xff, 0xf6, 0x0,
+ 0x1f, 0xff, 0xe7, 0x33, 0x6e, 0xff, 0x30, 0x1f,
+ 0xfe, 0x20, 0x0, 0x2, 0xff, 0xb0, 0x1f, 0xf7,
+ 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x1f, 0xf7, 0x0,
+ 0x0, 0x0, 0x4f, 0xf4, 0x1f, 0xf7, 0x0, 0x0,
+ 0x0, 0x2f, 0xf6, 0x1f, 0xf7, 0x0, 0x0, 0x0,
+ 0x1f, 0xf6, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x2f,
+ 0xf6, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x4f, 0xf4,
+ 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xaf, 0xf1, 0x1f,
+ 0xfe, 0x20, 0x0, 0x2, 0xff, 0xb0, 0x1f, 0xff,
+ 0xe7, 0x32, 0x6e, 0xff, 0x30, 0x1f, 0xf9, 0xff,
+ 0xff, 0xff, 0xf6, 0x0, 0x1f, 0xf4, 0x29, 0xef,
+ 0xea, 0x30, 0x0,
/* U+63 "c" */
- 0x0, 0x2, 0x9c, 0xff, 0xb6, 0x0, 0x0, 0x5,
- 0xef, 0xff, 0xff, 0xfb, 0x10, 0x4, 0xff, 0xf5,
- 0x23, 0x9f, 0xf9, 0x0, 0xcf, 0xf3, 0x0, 0x0,
- 0xaf, 0xf2, 0x3f, 0xf9, 0x0, 0x0, 0x4, 0xff,
- 0x47, 0xff, 0x40, 0x0, 0x0, 0x4, 0x42, 0x8f,
- 0xf2, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xf7, 0x0, 0x0, 0x2, 0xbb, 0x40,
- 0xef, 0xd1, 0x0, 0x0, 0x7f, 0xf3, 0x6, 0xff,
- 0xc2, 0x0, 0x5e, 0xfd, 0x0, 0x9, 0xff, 0xfd,
- 0xef, 0xff, 0x10, 0x0, 0x5, 0xdf, 0xff, 0xf9,
- 0x10, 0x0, 0x0, 0x0, 0x4, 0x30, 0x0, 0x0,
+ 0x0, 0x2, 0x9d, 0xff, 0xc7, 0x0, 0x0, 0x6,
+ 0xff, 0xff, 0xff, 0xfd, 0x10, 0x5, 0xff, 0xc4,
+ 0x12, 0x8f, 0xfc, 0x0, 0xef, 0xc0, 0x0, 0x0,
+ 0x5f, 0xf5, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0xdf,
+ 0x99, 0xff, 0x0, 0x0, 0x0, 0x2, 0x42, 0xbf,
+ 0xd0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xfc, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xbf, 0xd0, 0x0, 0x0,
+ 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0, 0xad, 0x80,
+ 0xef, 0xc0, 0x0, 0x0, 0x3f, 0xf6, 0x5, 0xff,
+ 0xc4, 0x12, 0x7f, 0xfd, 0x0, 0x7, 0xff, 0xff,
+ 0xff, 0xfd, 0x10, 0x0, 0x2, 0x9d, 0xff, 0xc6,
+ 0x0, 0x0,
/* U+64 "d" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x33, 0x30, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc0, 0x0,
0x0, 0x0, 0x0, 0xc, 0xfc, 0x0, 0x0, 0x0,
0x0, 0x0, 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0,
0xc, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
0xc0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfc, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc0, 0x0, 0x5a,
- 0xef, 0xd7, 0x1c, 0xfc, 0x0, 0x6f, 0xff, 0xff,
- 0xfc, 0xcf, 0xc0, 0x5f, 0xff, 0x74, 0x48, 0xff,
- 0xfc, 0xc, 0xff, 0x30, 0x0, 0x6, 0xff, 0xc3,
- 0xff, 0xa0, 0x0, 0x0, 0xc, 0xfc, 0x6f, 0xf5,
- 0x0, 0x0, 0x0, 0xcf, 0xc8, 0xff, 0x40, 0x0,
- 0x0, 0xc, 0xfc, 0xaf, 0xf0, 0x0, 0x0, 0x0,
- 0xcf, 0xca, 0xff, 0x0, 0x0, 0x0, 0xc, 0xfc,
- 0x8f, 0xf4, 0x0, 0x0, 0x0, 0xcf, 0xc5, 0xff,
- 0x60, 0x0, 0x0, 0xc, 0xfc, 0x1f, 0xfd, 0x0,
- 0x0, 0x3, 0xff, 0xc0, 0x8f, 0xfc, 0x30, 0x5,
- 0xef, 0xfc, 0x1, 0xdf, 0xff, 0xff, 0xff, 0xbf,
- 0xc0, 0x1, 0x9f, 0xff, 0xfc, 0x25, 0xfc, 0x0,
- 0x0, 0x3, 0x42, 0x0, 0x0, 0x0,
+ 0x4, 0xbe, 0xfd, 0x80, 0xcf, 0xc0, 0x8, 0xff,
+ 0xff, 0xff, 0xdd, 0xfc, 0x6, 0xff, 0xd5, 0x23,
+ 0x8f, 0xff, 0xc0, 0xef, 0xd1, 0x0, 0x0, 0x4f,
+ 0xfc, 0x4f, 0xf6, 0x0, 0x0, 0x0, 0xcf, 0xc8,
+ 0xff, 0x0, 0x0, 0x0, 0xc, 0xfc, 0xaf, 0xe0,
+ 0x0, 0x0, 0x0, 0xcf, 0xcb, 0xfd, 0x0, 0x0,
+ 0x0, 0xc, 0xfc, 0xaf, 0xe0, 0x0, 0x0, 0x0,
+ 0xcf, 0xc8, 0xff, 0x0, 0x0, 0x0, 0xc, 0xfc,
+ 0x4f, 0xf6, 0x0, 0x0, 0x0, 0xcf, 0xc0, 0xef,
+ 0xd0, 0x0, 0x0, 0x4f, 0xfc, 0x5, 0xff, 0xd5,
+ 0x23, 0x8f, 0xff, 0xc0, 0x8, 0xff, 0xff, 0xff,
+ 0xec, 0xfc, 0x0, 0x4, 0xbe, 0xfd, 0x81, 0x9f,
+ 0xc0,
/* U+65 "e" */
- 0x0, 0x1, 0x9c, 0xfe, 0xb5, 0x0, 0x0, 0x4,
- 0xef, 0xff, 0xff, 0xfa, 0x10, 0x2, 0xff, 0xf5,
- 0x14, 0xaf, 0xf8, 0x0, 0xcf, 0xf2, 0x0, 0x0,
- 0xcf, 0xe1, 0x3f, 0xf9, 0x0, 0x0, 0x5, 0xff,
- 0x46, 0xff, 0x50, 0x0, 0x0, 0x3f, 0xf8, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x9f, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0x7, 0xff, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x4f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
- 0xd4, 0x0, 0x2, 0x78, 0x0, 0x7, 0xff, 0xff,
- 0xbd, 0xff, 0xd0, 0x0, 0x3, 0xbf, 0xff, 0xff,
- 0xc4, 0x0, 0x0, 0x0, 0x2, 0x44, 0x10, 0x0,
+ 0x0, 0x1, 0x8d, 0xfe, 0xc6, 0x0, 0x0, 0x4,
+ 0xff, 0xff, 0xff, 0xfc, 0x10, 0x3, 0xff, 0xd4,
+ 0x12, 0x8f, 0xfa, 0x0, 0xcf, 0xd0, 0x0, 0x0,
+ 0x7f, 0xf3, 0x3f, 0xf4, 0x0, 0x0, 0x0, 0xff,
+ 0x88, 0xff, 0x0, 0x0, 0x0, 0xc, 0xfb, 0xaf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xcb, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfd, 0xbf, 0xd1, 0x11, 0x11,
+ 0x11, 0x11, 0x19, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0xe1, 0x0, 0x0, 0x6, 0xb1, 0x4, 0xff,
+ 0xe6, 0x11, 0x3a, 0xff, 0x50, 0x5, 0xff, 0xff,
+ 0xff, 0xff, 0x60, 0x0, 0x1, 0x8d, 0xff, 0xd9,
+ 0x20, 0x0,
/* U+66 "f" */
- 0x0, 0x0, 0x3, 0x77, 0x72, 0x0, 0x1, 0xaf,
- 0xff, 0xf4, 0x0, 0x9, 0xff, 0xea, 0xa0, 0x0,
- 0xf, 0xfe, 0x10, 0x0, 0x0, 0x3f, 0xf8, 0x0,
- 0x0, 0x0, 0x4f, 0xf8, 0x0, 0x0, 0x0, 0x4f,
- 0xf8, 0x0, 0x0, 0x6b, 0xcf, 0xfd, 0xbb, 0x0,
- 0x8f, 0xff, 0xff, 0xff, 0x0, 0x24, 0x7f, 0xfa,
- 0x44, 0x0, 0x0, 0x4f, 0xf8, 0x0, 0x0, 0x0,
- 0x4f, 0xf8, 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x0,
- 0x0, 0x0, 0x4f, 0xf8, 0x0, 0x0, 0x0, 0x4f,
- 0xf8, 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x0, 0x0,
- 0x0, 0x4f, 0xf8, 0x0, 0x0, 0x0, 0x4f, 0xf8,
- 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x0, 0x0, 0x0,
- 0x4f, 0xf8, 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x0,
- 0x0, 0x0, 0x4f, 0xf8, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, 0x19,
+ 0xff, 0xfb, 0x0, 0x0, 0xdf, 0xff, 0xfa, 0x0,
+ 0x7, 0xff, 0x91, 0x0, 0x0, 0xb, 0xfe, 0x0,
+ 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd,
+ 0xfb, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xd0,
+ 0x2f, 0xff, 0xff, 0xff, 0xc0, 0x0, 0xd, 0xfb,
+ 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0,
+ 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0,
+ 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd,
+ 0xfb, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0,
+ 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd, 0xfb,
+ 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0,
+ 0xd, 0xfb, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0,
+ 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0,
/* U+67 "g" */
- 0x0, 0x3, 0xad, 0xfe, 0x91, 0x3b, 0xb0, 0x6,
- 0xff, 0xff, 0xff, 0xc7, 0xff, 0x2, 0xff, 0xf9,
- 0x44, 0x8f, 0xff, 0xf0, 0xaf, 0xf6, 0x0, 0x0,
- 0x3f, 0xff, 0x1f, 0xfd, 0x0, 0x0, 0x0, 0xcf,
- 0xf4, 0xff, 0x70, 0x0, 0x0, 0xc, 0xff, 0x5f,
- 0xf4, 0x0, 0x0, 0x0, 0xcf, 0xf8, 0xff, 0x40,
- 0x0, 0x0, 0xc, 0xff, 0x8f, 0xf4, 0x0, 0x0,
- 0x0, 0xcf, 0xf5, 0xff, 0x40, 0x0, 0x0, 0xc,
- 0xff, 0x4f, 0xf9, 0x0, 0x0, 0x0, 0xcf, 0xf0,
- 0xef, 0xe1, 0x0, 0x0, 0x2e, 0xff, 0x6, 0xff,
- 0xc3, 0x0, 0x4c, 0xff, 0xf0, 0xb, 0xff, 0xff,
- 0xff, 0xfe, 0xff, 0x0, 0x9, 0xff, 0xff, 0xc3,
- 0xcf, 0xf0, 0x0, 0x0, 0x24, 0x20, 0xc, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xc0, 0x1,
- 0x0, 0x0, 0x0, 0x7f, 0xf9, 0x0, 0xac, 0x75,
- 0x36, 0xaf, 0xff, 0x10, 0xd, 0xff, 0xff, 0xff,
- 0xfe, 0x40, 0x0, 0x17, 0xcf, 0xfd, 0xc7, 0x10,
+ 0x0, 0x5, 0xbe, 0xfd, 0x80, 0x8f, 0xd0, 0x9,
+ 0xff, 0xff, 0xff, 0xdb, 0xfd, 0x6, 0xff, 0xd5,
+ 0x23, 0x8f, 0xff, 0xd0, 0xef, 0xe1, 0x0, 0x0,
+ 0x4f, 0xfd, 0x4f, 0xf7, 0x0, 0x0, 0x0, 0xbf,
+ 0xd8, 0xff, 0x10, 0x0, 0x0, 0xb, 0xfd, 0xaf,
+ 0xf0, 0x0, 0x0, 0x0, 0xbf, 0xda, 0xfd, 0x0,
+ 0x0, 0x0, 0xb, 0xfd, 0xaf, 0xf0, 0x0, 0x0,
+ 0x0, 0xbf, 0xd8, 0xff, 0x10, 0x0, 0x0, 0xb,
+ 0xfd, 0x4f, 0xf6, 0x0, 0x0, 0x0, 0xcf, 0xd0,
+ 0xef, 0xd1, 0x0, 0x0, 0x4f, 0xfd, 0x5, 0xff,
+ 0xd5, 0x23, 0x8f, 0xff, 0xd0, 0x8, 0xff, 0xff,
+ 0xff, 0xdd, 0xfd, 0x0, 0x4, 0xbe, 0xfd, 0x81,
+ 0xbf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfb,
+ 0x0, 0x10, 0x0, 0x0, 0x1, 0xff, 0x90, 0x4e,
+ 0x20, 0x0, 0x0, 0x9f, 0xf4, 0xb, 0xff, 0x72,
+ 0x13, 0xaf, 0xfb, 0x0, 0x1c, 0xff, 0xff, 0xff,
+ 0xfc, 0x10, 0x0, 0x5, 0xae, 0xfe, 0xb6, 0x0,
0x0,
/* U+68 "h" */
- 0x43, 0x30, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xc0, 0x6d, 0xff, 0xb6, 0x0,
- 0xff, 0xca, 0xff, 0xff, 0xff, 0xa0, 0xff, 0xff,
- 0x74, 0x46, 0xff, 0xf4, 0xff, 0xf1, 0x0, 0x0,
- 0x4f, 0xfc, 0xff, 0xc0, 0x0, 0x0, 0xd, 0xfc,
- 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0xc, 0xff,
+ 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff,
+ 0x70, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xff, 0x70, 0x0, 0x0,
+ 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x1f,
+ 0xf7, 0x7, 0xdf, 0xfc, 0x50, 0x1, 0xff, 0x8d,
+ 0xff, 0xff, 0xff, 0x70, 0x1f, 0xff, 0xf8, 0x33,
+ 0x7f, 0xff, 0x11, 0xff, 0xf3, 0x0, 0x0, 0x6f,
+ 0xf5, 0x1f, 0xf8, 0x0, 0x0, 0x1, 0xff, 0x71,
+ 0xff, 0x70, 0x0, 0x0, 0xf, 0xf8, 0x1f, 0xf7,
+ 0x0, 0x0, 0x0, 0xff, 0x81, 0xff, 0x70, 0x0,
+ 0x0, 0xf, 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0,
+ 0xff, 0x81, 0xff, 0x70, 0x0, 0x0, 0xf, 0xf8,
+ 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x81, 0xff,
+ 0x70, 0x0, 0x0, 0xf, 0xf8, 0x1f, 0xf7, 0x0,
+ 0x0, 0x0, 0xff, 0x81, 0xff, 0x70, 0x0, 0x0,
+ 0xf, 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff,
+ 0x80,
/* U+69 "i" */
- 0x33, 0x3c, 0xff, 0xcf, 0xf6, 0x88, 0x0, 0x0,
- 0x0, 0x0, 0x9, 0xbb, 0xcf, 0xfc, 0xff, 0xcf,
- 0xfc, 0xff, 0xcf, 0xfc, 0xff, 0xcf, 0xfc, 0xff,
- 0xcf, 0xfc, 0xff, 0xcf, 0xfc, 0xff, 0xcf, 0xfc,
- 0xff,
+ 0xa, 0xf8, 0xf, 0xfe, 0x8, 0xd6, 0x0, 0x0,
+ 0x0, 0x0, 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa,
+ 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa,
+ 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa,
+ 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa, 0xd, 0xfa,
/* U+6A "j" */
- 0x0, 0x3, 0x33, 0x0, 0xc, 0xff, 0x0, 0xc,
- 0xff, 0x0, 0x3, 0x44, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xbb,
- 0x0, 0xc, 0xff, 0x0, 0xc, 0xff, 0x0, 0xc,
- 0xff, 0x0, 0xc, 0xff, 0x0, 0xc, 0xff, 0x0,
- 0xc, 0xff, 0x0, 0xc, 0xff, 0x0, 0xc, 0xff,
- 0x0, 0xc, 0xff, 0x0, 0xc, 0xff, 0x0, 0xc,
- 0xff, 0x0, 0xc, 0xff, 0x0, 0xc, 0xff, 0x0,
- 0xc, 0xff, 0x0, 0xc, 0xff, 0x0, 0xc, 0xff,
- 0x0, 0xe, 0xfe, 0x33, 0x9f, 0xfa, 0xcf, 0xff,
- 0xf1, 0xbf, 0xda, 0x10,
+ 0x0, 0xc, 0xf5, 0x0, 0x3f, 0xfa, 0x0, 0xb,
+ 0xd4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8,
+ 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf,
+ 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0,
+ 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8,
+ 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf,
+ 0xf8, 0x0, 0xf, 0xf8, 0x0, 0xf, 0xf8, 0x0,
+ 0xf, 0xf8, 0x0, 0x1f, 0xf6, 0x23, 0xaf, 0xf4,
+ 0xef, 0xff, 0xc0, 0xcf, 0xea, 0x10,
/* U+6B "k" */
- 0x43, 0x30, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0xab, 0xb4,
- 0xff, 0xc0, 0x0, 0x8, 0xff, 0xb0, 0xff, 0xc0,
- 0x0, 0x3f, 0xfe, 0x10, 0xff, 0xc0, 0x1, 0xdf,
- 0xf3, 0x0, 0xff, 0xc0, 0xa, 0xff, 0x70, 0x0,
- 0xff, 0xc0, 0x5f, 0xfb, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xe1, 0x0, 0x0, 0xff, 0xff, 0xff, 0xd1,
- 0x0, 0x0, 0xff, 0xd4, 0x9f, 0xf9, 0x0, 0x0,
- 0xff, 0xc0, 0xc, 0xff, 0x50, 0x0, 0xff, 0xc0,
- 0x2, 0xff, 0xe1, 0x0, 0xff, 0xc0, 0x0, 0x7f,
- 0xfa, 0x0, 0xff, 0xc0, 0x0, 0xc, 0xff, 0x70,
- 0xff, 0xc0, 0x0, 0x2, 0xff, 0xe2, 0xff, 0xc0,
- 0x0, 0x0, 0x6f, 0xfc,
+ 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f,
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x2e, 0xfe,
+ 0x20, 0x1f, 0xf7, 0x0, 0x1, 0xdf, 0xe2, 0x0,
+ 0x1f, 0xf7, 0x0, 0x1d, 0xff, 0x30, 0x0, 0x1f,
+ 0xf7, 0x0, 0xcf, 0xf4, 0x0, 0x0, 0x1f, 0xf7,
+ 0xc, 0xff, 0x50, 0x0, 0x0, 0x1f, 0xf7, 0xaf,
+ 0xf7, 0x0, 0x0, 0x0, 0x1f, 0xfd, 0xff, 0xe0,
+ 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xfa, 0x0,
+ 0x0, 0x0, 0x1f, 0xff, 0xaa, 0xff, 0x60, 0x0,
+ 0x0, 0x1f, 0xfb, 0x0, 0xdf, 0xf2, 0x0, 0x0,
+ 0x1f, 0xf7, 0x0, 0x2f, 0xfd, 0x0, 0x0, 0x1f,
+ 0xf7, 0x0, 0x6, 0xff, 0x90, 0x0, 0x1f, 0xf7,
+ 0x0, 0x0, 0xaf, 0xf5, 0x0, 0x1f, 0xf7, 0x0,
+ 0x0, 0xd, 0xfe, 0x20, 0x1f, 0xf7, 0x0, 0x0,
+ 0x3, 0xff, 0xc0,
/* U+6C "l" */
- 0x45, 0x4d, 0xfd, 0xdf, 0xdd, 0xfd, 0xdf, 0xdd,
- 0xfd, 0xdf, 0xdd, 0xfd, 0xdf, 0xdd, 0xfd, 0xdf,
- 0xdd, 0xfd, 0xdf, 0xdd, 0xfd, 0xdf, 0xdd, 0xfd,
- 0xdf, 0xdd, 0xfd, 0xdf, 0xdd, 0xfd, 0xdf, 0xdd,
- 0xfd,
+ 0xdf, 0xad, 0xfa, 0xdf, 0xad, 0xfa, 0xdf, 0xad,
+ 0xfa, 0xdf, 0xad, 0xfa, 0xdf, 0xad, 0xfa, 0xdf,
+ 0xad, 0xfa, 0xdf, 0xad, 0xfa, 0xdf, 0xad, 0xfa,
+ 0xdf, 0xad, 0xfa, 0xdf, 0xad, 0xfa, 0xdf, 0xa0,
/* U+6D "m" */
- 0xcb, 0x61, 0x7d, 0xff, 0xd5, 0x0, 0x19, 0xef,
- 0xda, 0x20, 0xf, 0xf9, 0xcf, 0xff, 0xff, 0xf6,
- 0x2d, 0xff, 0xff, 0xfe, 0x30, 0xff, 0xfd, 0x64,
- 0x4a, 0xff, 0xeb, 0xf7, 0x44, 0xaf, 0xfb, 0xf,
- 0xff, 0x10, 0x0, 0xb, 0xff, 0xf5, 0x0, 0x0,
- 0xcf, 0xf3, 0xff, 0xc0, 0x0, 0x0, 0x5f, 0xfd,
- 0x0, 0x0, 0x5, 0xff, 0x4f, 0xfc, 0x0, 0x0,
- 0x4, 0xff, 0x90, 0x0, 0x0, 0x4f, 0xf8, 0xff,
- 0xc0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x4,
- 0xff, 0x8f, 0xfc, 0x0, 0x0, 0x0, 0xff, 0x80,
- 0x0, 0x0, 0x4f, 0xf8, 0xff, 0xc0, 0x0, 0x0,
- 0xf, 0xf8, 0x0, 0x0, 0x4, 0xff, 0x8f, 0xfc,
- 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x4f,
- 0xf8, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xf8, 0x0,
- 0x0, 0x4, 0xff, 0x8f, 0xfc, 0x0, 0x0, 0x0,
- 0xff, 0x80, 0x0, 0x0, 0x4f, 0xf8, 0xff, 0xc0,
- 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x4, 0xff,
- 0x8f, 0xfc, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0,
- 0x0, 0x4f, 0xf8, 0xff, 0xc0, 0x0, 0x0, 0xf,
- 0xf8, 0x0, 0x0, 0x4, 0xff, 0x80,
+ 0x1f, 0xf5, 0x19, 0xdf, 0xeb, 0x40, 0x1, 0x9d,
+ 0xff, 0xc5, 0x0, 0x1f, 0xf9, 0xff, 0xff, 0xff,
+ 0xf5, 0x4f, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff,
+ 0xd5, 0x23, 0x8f, 0xff, 0xff, 0x73, 0x36, 0xef,
+ 0xf2, 0x1f, 0xfd, 0x0, 0x0, 0x7, 0xff, 0xf3,
+ 0x0, 0x0, 0x4f, 0xf7, 0x1f, 0xf7, 0x0, 0x0,
+ 0x2, 0xff, 0xb0, 0x0, 0x0, 0xf, 0xf9, 0x1f,
+ 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0,
+ 0xe, 0xfa, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff,
+ 0x80, 0x0, 0x0, 0xe, 0xfa, 0x1f, 0xf7, 0x0,
+ 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0xe, 0xfa,
+ 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0,
+ 0x0, 0xe, 0xfa, 0x1f, 0xf7, 0x0, 0x0, 0x0,
+ 0xff, 0x80, 0x0, 0x0, 0xe, 0xfa, 0x1f, 0xf7,
+ 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0xe,
+ 0xfa, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80,
+ 0x0, 0x0, 0xe, 0xfa, 0x1f, 0xf7, 0x0, 0x0,
+ 0x0, 0xff, 0x80, 0x0, 0x0, 0xe, 0xfa, 0x1f,
+ 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0,
+ 0xe, 0xfa, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff,
+ 0x80, 0x0, 0x0, 0xe, 0xfa,
/* U+6E "n" */
- 0xcb, 0x50, 0x7d, 0xff, 0xb6, 0x0, 0xff, 0x8a,
- 0xff, 0xff, 0xff, 0xa0, 0xff, 0xef, 0x74, 0x46,
- 0xef, 0xf4, 0xff, 0xf2, 0x0, 0x0, 0x4f, 0xfc,
- 0xff, 0xc0, 0x0, 0x0, 0xe, 0xfc, 0xff, 0xc0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0xc0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0xc, 0xff,
+ 0x1f, 0xf5, 0x7, 0xdf, 0xfc, 0x50, 0x1, 0xff,
+ 0x7d, 0xff, 0xff, 0xff, 0x70, 0x1f, 0xff, 0xf8,
+ 0x33, 0x7f, 0xff, 0x11, 0xff, 0xf3, 0x0, 0x0,
+ 0x6f, 0xf5, 0x1f, 0xf8, 0x0, 0x0, 0x1, 0xff,
+ 0x71, 0xff, 0x70, 0x0, 0x0, 0xf, 0xf8, 0x1f,
+ 0xf7, 0x0, 0x0, 0x0, 0xff, 0x81, 0xff, 0x70,
+ 0x0, 0x0, 0xf, 0xf8, 0x1f, 0xf7, 0x0, 0x0,
+ 0x0, 0xff, 0x81, 0xff, 0x70, 0x0, 0x0, 0xf,
+ 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x81,
+ 0xff, 0x70, 0x0, 0x0, 0xf, 0xf8, 0x1f, 0xf7,
+ 0x0, 0x0, 0x0, 0xff, 0x81, 0xff, 0x70, 0x0,
+ 0x0, 0xf, 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0,
+ 0xff, 0x80,
/* U+6F "o" */
- 0x0, 0x1, 0x8b, 0xff, 0xb8, 0x10, 0x0, 0x0,
- 0x4e, 0xff, 0xff, 0xff, 0xd3, 0x0, 0x2, 0xff,
- 0xf6, 0x23, 0x7f, 0xfe, 0x10, 0xb, 0xff, 0x30,
- 0x0, 0x3, 0xff, 0xa0, 0x3f, 0xfa, 0x0, 0x0,
- 0x0, 0xcf, 0xf2, 0x6f, 0xf4, 0x0, 0x0, 0x0,
- 0x5f, 0xf4, 0x8f, 0xf2, 0x0, 0x0, 0x0, 0x4f,
- 0xf8, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x3f, 0xf8,
- 0x8f, 0xf1, 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x7f,
- 0xf4, 0x0, 0x0, 0x0, 0x4f, 0xf4, 0x4f, 0xf8,
- 0x0, 0x0, 0x0, 0xaf, 0xf3, 0xd, 0xfe, 0x10,
- 0x0, 0x1, 0xff, 0xc0, 0x4, 0xff, 0xc2, 0x0,
- 0x4d, 0xff, 0x30, 0x0, 0x7f, 0xff, 0xee, 0xff,
- 0xf6, 0x0, 0x0, 0x3, 0xdf, 0xff, 0xfb, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x33, 0x0, 0x0, 0x0,
-
- /* U+70 "p" */
- 0xcb, 0x11, 0x9e, 0xfd, 0xa4, 0x0, 0xf, 0xf7,
- 0xef, 0xff, 0xff, 0xf6, 0x0, 0xff, 0xff, 0x64,
- 0x49, 0xff, 0xf4, 0xf, 0xff, 0x30, 0x0, 0x6,
- 0xff, 0xa0, 0xff, 0xc0, 0x0, 0x0, 0xd, 0xff,
- 0x2f, 0xfc, 0x0, 0x0, 0x0, 0x6f, 0xf4, 0xff,
- 0xc0, 0x0, 0x0, 0x4, 0xff, 0x7f, 0xfc, 0x0,
- 0x0, 0x0, 0x4f, 0xf8, 0xff, 0xc0, 0x0, 0x0,
- 0x3, 0xff, 0x8f, 0xfc, 0x0, 0x0, 0x0, 0x4f,
- 0xf6, 0xff, 0xc0, 0x0, 0x0, 0x8, 0xff, 0x4f,
- 0xfd, 0x0, 0x0, 0x1, 0xef, 0xf1, 0xff, 0xfa,
- 0x20, 0x2, 0xcf, 0xf8, 0xf, 0xff, 0xff, 0xde,
- 0xff, 0xfc, 0x10, 0xff, 0xc4, 0xef, 0xff, 0xf9,
- 0x0, 0xf, 0xfc, 0x0, 0x24, 0x20, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xcc, 0x90, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0x8d, 0xff, 0xd8, 0x10, 0x0, 0x0,
+ 0x5f, 0xff, 0xff, 0xff, 0xe4, 0x0, 0x3, 0xff,
+ 0xe5, 0x11, 0x6e, 0xff, 0x30, 0xd, 0xfe, 0x10,
+ 0x0, 0x2, 0xef, 0xd0, 0x4f, 0xf6, 0x0, 0x0,
+ 0x0, 0x6f, 0xf3, 0x8f, 0xf0, 0x0, 0x0, 0x0,
+ 0x1f, 0xf8, 0xaf, 0xd0, 0x0, 0x0, 0x0, 0xe,
+ 0xfa, 0xbf, 0xc0, 0x0, 0x0, 0x0, 0xd, 0xfb,
+ 0xbf, 0xd0, 0x0, 0x0, 0x0, 0xd, 0xfa, 0x8f,
+ 0xf0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x4f, 0xf6,
+ 0x0, 0x0, 0x0, 0x6f, 0xf4, 0xd, 0xfe, 0x10,
+ 0x0, 0x1, 0xef, 0xd0, 0x3, 0xff, 0xd5, 0x11,
+ 0x5e, 0xff, 0x30, 0x0, 0x5f, 0xff, 0xff, 0xff,
+ 0xf4, 0x0, 0x0, 0x1, 0x8d, 0xff, 0xd8, 0x10,
0x0,
+ /* U+70 "p" */
+ 0x1f, 0xf4, 0x29, 0xef, 0xea, 0x30, 0x0, 0x1f,
+ 0xf9, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x1f, 0xff,
+ 0xd6, 0x33, 0x8f, 0xff, 0x30, 0x1f, 0xfd, 0x10,
+ 0x0, 0x4, 0xff, 0xb0, 0x1f, 0xf7, 0x0, 0x0,
+ 0x0, 0xaf, 0xf0, 0x1f, 0xf7, 0x0, 0x0, 0x0,
+ 0x5f, 0xf3, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x3f,
+ 0xf5, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x2f, 0xf6,
+ 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x3f, 0xf5, 0x1f,
+ 0xf7, 0x0, 0x0, 0x0, 0x5f, 0xf3, 0x1f, 0xf7,
+ 0x0, 0x0, 0x0, 0xaf, 0xf0, 0x1f, 0xfc, 0x0,
+ 0x0, 0x3, 0xff, 0xa0, 0x1f, 0xff, 0xc4, 0x11,
+ 0x6f, 0xff, 0x20, 0x1f, 0xfc, 0xff, 0xff, 0xff,
+ 0xf5, 0x0, 0x1f, 0xf7, 0x2a, 0xef, 0xea, 0x30,
+ 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f,
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0,
+ 0x0, 0x0, 0x0,
+
/* U+71 "q" */
- 0x0, 0x5, 0xae, 0xfd, 0x71, 0x6b, 0x90, 0x6,
- 0xff, 0xff, 0xff, 0xcc, 0xfc, 0x5, 0xff, 0xf6,
- 0x22, 0x8f, 0xff, 0xc0, 0xcf, 0xf3, 0x0, 0x0,
- 0x5f, 0xfc, 0x3f, 0xfa, 0x0, 0x0, 0x0, 0xff,
- 0xc6, 0xff, 0x50, 0x0, 0x0, 0xf, 0xfc, 0x8f,
- 0xf4, 0x0, 0x0, 0x0, 0xff, 0xca, 0xff, 0x0,
- 0x0, 0x0, 0xf, 0xfc, 0xaf, 0xf0, 0x0, 0x0,
- 0x0, 0xff, 0xc8, 0xff, 0x40, 0x0, 0x0, 0xf,
- 0xfc, 0x5f, 0xf6, 0x0, 0x0, 0x0, 0xff, 0xc1,
- 0xff, 0xd0, 0x0, 0x0, 0x3f, 0xfc, 0x8, 0xff,
- 0xa1, 0x0, 0x4d, 0xff, 0xc0, 0x1d, 0xff, 0xfd,
- 0xef, 0xff, 0xfc, 0x0, 0x19, 0xff, 0xff, 0xc3,
- 0xff, 0xc0, 0x0, 0x0, 0x34, 0x20, 0xf, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0,
- 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
- 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc,
- 0x90,
+ 0x0, 0x5, 0xbe, 0xfd, 0x81, 0x9f, 0xc0, 0x9,
+ 0xff, 0xff, 0xff, 0xec, 0xfc, 0x7, 0xff, 0xd5,
+ 0x12, 0x7f, 0xff, 0xc0, 0xef, 0xd1, 0x0, 0x0,
+ 0x3f, 0xfc, 0x5f, 0xf6, 0x0, 0x0, 0x0, 0xcf,
+ 0xc8, 0xff, 0x10, 0x0, 0x0, 0xc, 0xfc, 0xaf,
+ 0xe0, 0x0, 0x0, 0x0, 0xcf, 0xcb, 0xfd, 0x0,
+ 0x0, 0x0, 0xc, 0xfc, 0xaf, 0xe0, 0x0, 0x0,
+ 0x0, 0xcf, 0xc8, 0xff, 0x0, 0x0, 0x0, 0xc,
+ 0xfc, 0x4f, 0xf6, 0x0, 0x0, 0x0, 0xcf, 0xc0,
+ 0xef, 0xd0, 0x0, 0x0, 0x3f, 0xfc, 0x6, 0xff,
+ 0xd4, 0x12, 0x6f, 0xff, 0xc0, 0x9, 0xff, 0xff,
+ 0xff, 0xee, 0xfc, 0x0, 0x5, 0xbe, 0xfd, 0x81,
+ 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfc,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc0, 0x0,
+ 0x0, 0x0, 0x0, 0xc, 0xfc, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
+ 0xc0,
/* U+72 "r" */
- 0xcb, 0x51, 0x9f, 0xf4, 0xff, 0x8d, 0xff, 0xf2,
- 0xff, 0xdf, 0xa8, 0x80, 0xff, 0xf6, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0,
- 0xff, 0xc0, 0x0, 0x0,
+ 0x1f, 0xf6, 0x3b, 0xfe, 0x1, 0xff, 0xaf, 0xff,
+ 0xf1, 0x1f, 0xff, 0xfa, 0x77, 0x1, 0xff, 0xf3,
+ 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x1, 0xff,
+ 0x70, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0, 0x1,
+ 0xff, 0x70, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x0,
+ 0x1, 0xff, 0x70, 0x0, 0x0, 0x1f, 0xf7, 0x0,
+ 0x0, 0x1, 0xff, 0x70, 0x0, 0x0, 0x1f, 0xf7,
+ 0x0, 0x0, 0x1, 0xff, 0x70, 0x0, 0x0, 0x1f,
+ 0xf7, 0x0, 0x0, 0x0,
/* U+73 "s" */
- 0x0, 0x6, 0xbe, 0xfe, 0xa4, 0x0, 0x0, 0xd,
- 0xff, 0xff, 0xff, 0xf9, 0x0, 0x9, 0xff, 0xb3,
- 0x5, 0xdf, 0xf7, 0x0, 0xff, 0xd0, 0x0, 0x1,
- 0xef, 0xc0, 0xf, 0xfa, 0x0, 0x0, 0x6, 0x88,
- 0x0, 0xdf, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xff, 0xfd, 0x94, 0x10, 0x0, 0x0, 0x2, 0xaf,
- 0xff, 0xff, 0x92, 0x0, 0x0, 0x0, 0x16, 0xaf,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xe0, 0x47, 0x72, 0x0, 0x0, 0x9, 0xff, 0x35,
- 0xff, 0x60, 0x0, 0x0, 0x9f, 0xf2, 0x1f, 0xfe,
- 0x50, 0x0, 0x5e, 0xfe, 0x0, 0x4f, 0xff, 0xfb,
- 0xff, 0xff, 0x30, 0x0, 0x2b, 0xff, 0xff, 0xfa,
- 0x20, 0x0, 0x0, 0x0, 0x24, 0x30, 0x0, 0x0,
+ 0x0, 0x7, 0xcf, 0xfe, 0xa4, 0x0, 0x0, 0x1d,
+ 0xff, 0xff, 0xff, 0xf8, 0x0, 0xb, 0xff, 0x72,
+ 0x14, 0xdf, 0xf5, 0x1, 0xff, 0x80, 0x0, 0x1,
+ 0xef, 0xc0, 0x2f, 0xf6, 0x0, 0x0, 0x5, 0x87,
+ 0x0, 0xef, 0xe3, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xff, 0xfe, 0xa6, 0x10, 0x0, 0x0, 0x2, 0x9e,
+ 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x3, 0x7b,
+ 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef,
+ 0xd0, 0x7b, 0xa0, 0x0, 0x0, 0x8, 0xff, 0x7,
+ 0xff, 0x30, 0x0, 0x0, 0xaf, 0xf0, 0x1e, 0xff,
+ 0x72, 0x13, 0x9f, 0xf9, 0x0, 0x3e, 0xff, 0xff,
+ 0xff, 0xfc, 0x0, 0x0, 0x17, 0xcf, 0xfe, 0xb5,
+ 0x0, 0x0,
/* U+74 "t" */
- 0x0, 0x13, 0x32, 0x0, 0x0, 0x4, 0xff, 0x80,
- 0x0, 0x0, 0x4f, 0xf8, 0x0, 0x0, 0x4, 0xff,
- 0x80, 0x0, 0x9b, 0xcf, 0xfd, 0xbb, 0x3c, 0xff,
- 0xff, 0xff, 0xf4, 0x34, 0x7f, 0xfa, 0x44, 0x10,
- 0x4, 0xff, 0x80, 0x0, 0x0, 0x4f, 0xf8, 0x0,
- 0x0, 0x4, 0xff, 0x80, 0x0, 0x0, 0x4f, 0xf8,
- 0x0, 0x0, 0x4, 0xff, 0x80, 0x0, 0x0, 0x4f,
- 0xf8, 0x0, 0x0, 0x4, 0xff, 0x80, 0x0, 0x0,
- 0x4f, 0xf8, 0x0, 0x0, 0x4, 0xff, 0x80, 0x0,
- 0x0, 0x2f, 0xfb, 0x10, 0x0, 0x0, 0xcf, 0xff,
- 0xf1, 0x0, 0x3, 0xdf, 0xff, 0x30, 0x0, 0x0,
- 0x34, 0x20,
+ 0x0, 0x18, 0x82, 0x0, 0x0, 0x3, 0xff, 0x50,
+ 0x0, 0x0, 0x3f, 0xf5, 0x0, 0x0, 0x3, 0xff,
+ 0x50, 0x0, 0xef, 0xff, 0xff, 0xff, 0x1d, 0xff,
+ 0xff, 0xff, 0xf1, 0x0, 0x3f, 0xf5, 0x0, 0x0,
+ 0x3, 0xff, 0x50, 0x0, 0x0, 0x3f, 0xf5, 0x0,
+ 0x0, 0x3, 0xff, 0x50, 0x0, 0x0, 0x3f, 0xf5,
+ 0x0, 0x0, 0x3, 0xff, 0x50, 0x0, 0x0, 0x3f,
+ 0xf5, 0x0, 0x0, 0x3, 0xff, 0x50, 0x0, 0x0,
+ 0x3f, 0xf5, 0x0, 0x0, 0x2, 0xff, 0x60, 0x0,
+ 0x0, 0xf, 0xfc, 0x33, 0x0, 0x0, 0xaf, 0xff,
+ 0xf2, 0x0, 0x0, 0x9e, 0xfd, 0x20,
/* U+75 "u" */
- 0xcb, 0x60, 0x0, 0x0, 0x9, 0xbb, 0xff, 0x80,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0x80, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0x80, 0x0, 0x0, 0xc, 0xff, 0xff, 0x80,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0x80, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0x80, 0x0, 0x0, 0xc, 0xff,
- 0xff, 0x80, 0x0, 0x0, 0xc, 0xff, 0xff, 0xb0,
- 0x0, 0x0, 0xc, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0xc, 0xff, 0xcf, 0xe1, 0x0, 0x0, 0x3f, 0xff,
- 0x6f, 0xf9, 0x10, 0x6, 0xef, 0xff, 0xd, 0xff,
- 0xff, 0xff, 0xd9, 0xff, 0x1, 0xaf, 0xff, 0xfa,
- 0x18, 0xff, 0x0, 0x0, 0x34, 0x10, 0x0, 0x0,
+ 0x2f, 0xf6, 0x0, 0x0, 0x0, 0xff, 0x82, 0xff,
+ 0x60, 0x0, 0x0, 0xf, 0xf8, 0x2f, 0xf6, 0x0,
+ 0x0, 0x0, 0xff, 0x82, 0xff, 0x60, 0x0, 0x0,
+ 0xf, 0xf8, 0x2f, 0xf6, 0x0, 0x0, 0x0, 0xff,
+ 0x82, 0xff, 0x60, 0x0, 0x0, 0xf, 0xf8, 0x2f,
+ 0xf6, 0x0, 0x0, 0x0, 0xff, 0x82, 0xff, 0x60,
+ 0x0, 0x0, 0xf, 0xf8, 0x2f, 0xf6, 0x0, 0x0,
+ 0x0, 0xff, 0x82, 0xff, 0x60, 0x0, 0x0, 0xf,
+ 0xf8, 0x1f, 0xf7, 0x0, 0x0, 0x0, 0xff, 0x80,
+ 0xef, 0xc0, 0x0, 0x0, 0x8f, 0xf8, 0x9, 0xff,
+ 0xa3, 0x24, 0xbf, 0xff, 0x80, 0x1e, 0xff, 0xff,
+ 0xff, 0xcf, 0xf8, 0x0, 0x19, 0xef, 0xfc, 0x60,
+ 0xef, 0x80,
/* U+76 "v" */
- 0x3b, 0xb6, 0x0, 0x0, 0x0, 0x3b, 0xb5, 0xe,
- 0xfc, 0x0, 0x0, 0x0, 0x9f, 0xf2, 0x9, 0xff,
- 0x20, 0x0, 0x0, 0xef, 0xd0, 0x2, 0xff, 0x70,
- 0x0, 0x3, 0xff, 0x60, 0x0, 0xdf, 0xc0, 0x0,
- 0x9, 0xff, 0x10, 0x0, 0x6f, 0xf2, 0x0, 0xe,
- 0xfa, 0x0, 0x0, 0x1f, 0xf7, 0x0, 0x3f, 0xf5,
- 0x0, 0x0, 0xa, 0xfd, 0x0, 0x9f, 0xf0, 0x0,
- 0x0, 0x5, 0xff, 0x30, 0xef, 0x90, 0x0, 0x0,
- 0x0, 0xef, 0x92, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x9f, 0xd7, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x2f,
- 0xfc, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff,
- 0xf2, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xb0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x60, 0x0,
+ 0x5f, 0xf3, 0x0, 0x0, 0x0, 0xbf, 0xd0, 0xf,
+ 0xf8, 0x0, 0x0, 0x0, 0xff, 0x80, 0xa, 0xfd,
+ 0x0, 0x0, 0x5, 0xff, 0x20, 0x4, 0xff, 0x30,
+ 0x0, 0xa, 0xfc, 0x0, 0x0, 0xef, 0x80, 0x0,
+ 0xf, 0xf7, 0x0, 0x0, 0x9f, 0xd0, 0x0, 0x5f,
+ 0xf1, 0x0, 0x0, 0x3f, 0xf3, 0x0, 0xaf, 0xb0,
+ 0x0, 0x0, 0xd, 0xf8, 0x0, 0xff, 0x60, 0x0,
+ 0x0, 0x8, 0xfd, 0x4, 0xff, 0x10, 0x0, 0x0,
+ 0x2, 0xff, 0x39, 0xfa, 0x0, 0x0, 0x0, 0x0,
+ 0xcf, 0x8e, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x7f,
+ 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff,
+ 0x90, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0xfe, 0x0, 0x0,
0x0,
/* U+77 "w" */
- 0x3b, 0xb6, 0x0, 0x0, 0x8, 0xb9, 0x0, 0x0,
- 0x5, 0xbb, 0x51, 0xff, 0xc0, 0x0, 0x0, 0xff,
- 0xf1, 0x0, 0x0, 0xaf, 0xf2, 0xb, 0xff, 0x0,
- 0x0, 0x4f, 0xff, 0x60, 0x0, 0xe, 0xfe, 0x0,
- 0x7f, 0xf4, 0x0, 0x9, 0xff, 0xfb, 0x0, 0x1,
- 0xff, 0x90, 0x2, 0xff, 0x80, 0x0, 0xef, 0x8f,
- 0xe0, 0x0, 0x5f, 0xf5, 0x0, 0xe, 0xfc, 0x0,
- 0x3f, 0xf1, 0xff, 0x50, 0x9, 0xff, 0x0, 0x0,
- 0x9f, 0xf0, 0x9, 0xfd, 0xb, 0xfa, 0x0, 0xcf,
- 0xb0, 0x0, 0x5, 0xff, 0x40, 0xdf, 0x70, 0x6f,
- 0xe0, 0xf, 0xf6, 0x0, 0x0, 0xf, 0xf8, 0x2f,
- 0xf2, 0x1, 0xff, 0x44, 0xff, 0x20, 0x0, 0x0,
- 0xbf, 0xc7, 0xfd, 0x0, 0xc, 0xf9, 0x8f, 0xd0,
- 0x0, 0x0, 0x6, 0xfe, 0xaf, 0x90, 0x0, 0x7f,
- 0xcb, 0xf9, 0x0, 0x0, 0x0, 0x2f, 0xfd, 0xf3,
- 0x0, 0x2, 0xfe, 0xdf, 0x40, 0x0, 0x0, 0x0,
- 0xdf, 0xfe, 0x0, 0x0, 0xd, 0xff, 0xf0, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0x90, 0x0, 0x0, 0x7f,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf3, 0x0,
- 0x0, 0x2, 0xff, 0x60, 0x0, 0x0,
+ 0x4f, 0xf3, 0x0, 0x0, 0xa, 0xfa, 0x0, 0x0,
+ 0x4, 0xff, 0x30, 0xff, 0x70, 0x0, 0x0, 0xff,
+ 0xf0, 0x0, 0x0, 0x8f, 0xf0, 0xb, 0xfc, 0x0,
+ 0x0, 0x4f, 0xff, 0x40, 0x0, 0xc, 0xfa, 0x0,
+ 0x6f, 0xf0, 0x0, 0x9, 0xff, 0xf9, 0x0, 0x0,
+ 0xff, 0x60, 0x1, 0xff, 0x40, 0x0, 0xef, 0x7f,
+ 0xe0, 0x0, 0x4f, 0xf1, 0x0, 0xd, 0xf8, 0x0,
+ 0x3f, 0xd0, 0xff, 0x30, 0x8, 0xfc, 0x0, 0x0,
+ 0x8f, 0xc0, 0x8, 0xf8, 0xa, 0xf8, 0x0, 0xcf,
+ 0x80, 0x0, 0x4, 0xff, 0x0, 0xdf, 0x30, 0x5f,
+ 0xd0, 0xf, 0xf3, 0x0, 0x0, 0xf, 0xf4, 0x2f,
+ 0xe0, 0x0, 0xff, 0x24, 0xfe, 0x0, 0x0, 0x0,
+ 0xbf, 0x97, 0xfa, 0x0, 0xb, 0xf7, 0x8f, 0xa0,
+ 0x0, 0x0, 0x6, 0xfd, 0xcf, 0x50, 0x0, 0x6f,
+ 0xcc, 0xf5, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xf0,
+ 0x0, 0x1, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0,
+ 0xdf, 0xfb, 0x0, 0x0, 0xc, 0xff, 0xc0, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0x60, 0x0, 0x0, 0x7f,
+ 0xf8, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf1, 0x0,
+ 0x0, 0x2, 0xff, 0x30, 0x0, 0x0,
/* U+78 "x" */
- 0xb, 0xbb, 0x10, 0x0, 0x1, 0xbb, 0xb1, 0x7,
- 0xff, 0xa0, 0x0, 0xa, 0xff, 0x70, 0x0, 0xcf,
- 0xf3, 0x0, 0x4f, 0xfc, 0x0, 0x0, 0x2f, 0xfb,
- 0x0, 0xcf, 0xf2, 0x0, 0x0, 0x7, 0xff, 0x56,
- 0xff, 0x70, 0x0, 0x0, 0x0, 0xcf, 0xdd, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xf3, 0x0,
- 0x0, 0x0, 0x0, 0xa, 0xff, 0xa0, 0x0, 0x0,
- 0x0, 0x0, 0x2e, 0xff, 0xe2, 0x0, 0x0, 0x0,
- 0x0, 0xcf, 0xfe, 0xfb, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0x65, 0xff, 0x70, 0x0, 0x0, 0x2e, 0xfd,
- 0x0, 0xcf, 0xe2, 0x0, 0x0, 0xcf, 0xf4, 0x0,
- 0x3f, 0xfb, 0x0, 0x7, 0xff, 0xa0, 0x0, 0x9,
- 0xff, 0x70, 0x2e, 0xff, 0x10, 0x0, 0x1, 0xff,
- 0xe2,
+ 0xe, 0xfe, 0x0, 0x0, 0x2, 0xff, 0xc0, 0x4,
+ 0xff, 0x80, 0x0, 0xc, 0xff, 0x20, 0x0, 0xaf,
+ 0xf2, 0x0, 0x5f, 0xf7, 0x0, 0x0, 0x1e, 0xfb,
+ 0x1, 0xef, 0xc0, 0x0, 0x0, 0x5, 0xff, 0x59,
+ 0xff, 0x30, 0x0, 0x0, 0x0, 0xbf, 0xef, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xd0, 0x0,
+ 0x0, 0x0, 0x0, 0x9, 0xff, 0x60, 0x0, 0x0,
+ 0x0, 0x0, 0x2f, 0xff, 0xe1, 0x0, 0x0, 0x0,
+ 0x0, 0xcf, 0xde, 0xfa, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0x36, 0xff, 0x40, 0x0, 0x0, 0x2f, 0xfa,
+ 0x0, 0xcf, 0xe0, 0x0, 0x0, 0xcf, 0xe1, 0x0,
+ 0x3f, 0xf9, 0x0, 0x7, 0xff, 0x60, 0x0, 0x9,
+ 0xff, 0x40, 0x2f, 0xfc, 0x0, 0x0, 0x0, 0xef,
+ 0xe0,
/* U+79 "y" */
- 0x6b, 0xb6, 0x0, 0x0, 0x0, 0x6b, 0xb6, 0x2f,
- 0xfc, 0x0, 0x0, 0x0, 0xcf, 0xf3, 0xd, 0xff,
- 0x20, 0x0, 0x1, 0xff, 0xe0, 0x6, 0xff, 0x70,
- 0x0, 0x6, 0xff, 0x70, 0x1, 0xff, 0xc0, 0x0,
- 0xb, 0xff, 0x20, 0x0, 0xaf, 0xf2, 0x0, 0x1f,
- 0xfb, 0x0, 0x0, 0x4f, 0xf7, 0x0, 0x6f, 0xf6,
- 0x0, 0x0, 0xe, 0xfc, 0x0, 0xbf, 0xf1, 0x0,
- 0x0, 0x8, 0xff, 0x21, 0xff, 0xa0, 0x0, 0x0,
- 0x2, 0xff, 0x76, 0xff, 0x50, 0x0, 0x0, 0x0,
- 0xcf, 0xcb, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xfe, 0xf9, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
- 0xf3, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xd0,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x70, 0x0,
- 0x0, 0x0, 0x0, 0x8, 0xff, 0x20, 0x0, 0x0,
- 0x0, 0x0, 0xe, 0xfb, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7f, 0xf6, 0x0, 0x0, 0x0, 0x1, 0x37,
- 0xff, 0xd0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0x0, 0x6, 0xfe, 0xb2, 0x0,
- 0x0, 0x0, 0x0,
+ 0x8f, 0xf3, 0x0, 0x0, 0x0, 0xef, 0xb2, 0xff,
+ 0x80, 0x0, 0x0, 0x4f, 0xf6, 0xd, 0xfe, 0x0,
+ 0x0, 0x9, 0xff, 0x10, 0x7f, 0xf3, 0x0, 0x0,
+ 0xef, 0xb0, 0x1, 0xff, 0x90, 0x0, 0x3f, 0xf5,
+ 0x0, 0xb, 0xfe, 0x0, 0x8, 0xff, 0x0, 0x0,
+ 0x6f, 0xf3, 0x0, 0xdf, 0xa0, 0x0, 0x0, 0xff,
+ 0x90, 0x2f, 0xf5, 0x0, 0x0, 0xa, 0xfe, 0x7,
+ 0xff, 0x0, 0x0, 0x0, 0x5f, 0xf3, 0xcf, 0xa0,
+ 0x0, 0x0, 0x0, 0xef, 0xaf, 0xf4, 0x0, 0x0,
+ 0x0, 0x9, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0xef,
+ 0xf4, 0x0, 0x0, 0x0, 0x0, 0x8, 0xfe, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xaf, 0x80, 0x0, 0x0,
+ 0x0, 0x0, 0x1f, 0xf3, 0x0, 0x0, 0x0, 0x0,
+ 0x9, 0xfd, 0x0, 0x0, 0x0, 0x3, 0x49, 0xff,
+ 0x50, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xa0, 0x0,
+ 0x0, 0x0, 0xb, 0xfe, 0x70, 0x0, 0x0, 0x0,
+ 0x0,
/* U+7A "z" */
- 0x6b, 0xbb, 0xbb, 0xbb, 0xbb, 0xb6, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x24, 0x44, 0x44, 0x44,
- 0xff, 0xf4, 0x0, 0x0, 0x0, 0x9, 0xff, 0x80,
- 0x0, 0x0, 0x0, 0x5f, 0xfc, 0x0, 0x0, 0x0,
- 0x2, 0xef, 0xf1, 0x0, 0x0, 0x0, 0xd, 0xff,
- 0x40, 0x0, 0x0, 0x0, 0x9f, 0xf8, 0x0, 0x0,
- 0x0, 0x5, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x2e,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0xcf, 0xf4, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x90, 0x0, 0x0, 0x0,
- 0x4f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff,
+ 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xaf, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0x1, 0x11, 0x11, 0x12,
+ 0xef, 0xe1, 0x0, 0x0, 0x0, 0xa, 0xff, 0x40,
+ 0x0, 0x0, 0x0, 0x6f, 0xf8, 0x0, 0x0, 0x0,
+ 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0xd, 0xfe,
+ 0x10, 0x0, 0x0, 0x0, 0xaf, 0xf4, 0x0, 0x0,
+ 0x0, 0x6, 0xff, 0x90, 0x0, 0x0, 0x0, 0x2f,
+ 0xfc, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xf2, 0x0,
+ 0x0, 0x0, 0x9, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0x5f, 0xfa, 0x11, 0x11, 0x11, 0x10, 0xcf, 0xff,
0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff,
0xff, 0xff,
/* U+7B "{" */
- 0x0, 0x0, 0x0, 0x6, 0x80, 0x0, 0x0, 0x3,
- 0xdf, 0xf0, 0x0, 0x0, 0x2e, 0xfd, 0x20, 0x0,
- 0x0, 0xaf, 0xf2, 0x0, 0x0, 0x0, 0xff, 0xb0,
- 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, 0x4,
- 0xff, 0x80, 0x0, 0x0, 0x4, 0xff, 0x80, 0x0,
- 0x0, 0x4, 0xff, 0x80, 0x0, 0x0, 0x4, 0xff,
- 0x70, 0x0, 0x0, 0x8, 0xff, 0x40, 0x0, 0x0,
- 0x1d, 0xff, 0x0, 0x0, 0x27, 0xdf, 0xf6, 0x0,
- 0x0, 0x4f, 0xff, 0x70, 0x0, 0x0, 0x2b, 0xff,
- 0xe4, 0x0, 0x0, 0x0, 0x2f, 0xfd, 0x0, 0x0,
- 0x0, 0x9, 0xff, 0x40, 0x0, 0x0, 0x4, 0xff,
- 0x60, 0x0, 0x0, 0x4, 0xff, 0x80, 0x0, 0x0,
- 0x4, 0xff, 0x80, 0x0, 0x0, 0x4, 0xff, 0x80,
- 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0xaf, 0xe1, 0x0,
- 0x0, 0x0, 0x2f, 0xfb, 0x10, 0x0, 0x0, 0x3,
- 0xff, 0xe1, 0x0, 0x0, 0x0, 0x18, 0xb0,
+ 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0,
+ 0x6e, 0xe0, 0x0, 0x0, 0x9, 0xff, 0x90, 0x0,
+ 0x0, 0x6f, 0xf5, 0x0, 0x0, 0x0, 0xdf, 0xc0,
+ 0x0, 0x0, 0x0, 0xff, 0x70, 0x0, 0x0, 0x2,
+ 0xff, 0x50, 0x0, 0x0, 0x3, 0xff, 0x40, 0x0,
+ 0x0, 0x3, 0xff, 0x40, 0x0, 0x0, 0x3, 0xff,
+ 0x40, 0x0, 0x0, 0x4, 0xff, 0x30, 0x0, 0x0,
+ 0x9, 0xff, 0x0, 0x0, 0x1, 0x6f, 0xf9, 0x0,
+ 0x0, 0x1f, 0xff, 0xa0, 0x0, 0x0, 0x2f, 0xff,
+ 0xa0, 0x0, 0x0, 0x1, 0x7f, 0xf8, 0x0, 0x0,
+ 0x0, 0x9, 0xff, 0x0, 0x0, 0x0, 0x5, 0xff,
+ 0x30, 0x0, 0x0, 0x3, 0xff, 0x40, 0x0, 0x0,
+ 0x3, 0xff, 0x40, 0x0, 0x0, 0x3, 0xff, 0x40,
+ 0x0, 0x0, 0x2, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0xff, 0x70, 0x0, 0x0, 0x0, 0xdf, 0xb0, 0x0,
+ 0x0, 0x0, 0x6f, 0xf5, 0x0, 0x0, 0x0, 0xa,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x6e, 0xe0, 0x0,
+ 0x0, 0x0, 0x0, 0x30,
/* U+7C "|" */
- 0xee, 0x9f, 0xfa, 0xff, 0xaf, 0xfa, 0xff, 0xaf,
- 0xfa, 0xff, 0xaf, 0xfa, 0xff, 0xaf, 0xfa, 0xff,
- 0xaf, 0xfa, 0xff, 0xaf, 0xfa, 0xff, 0xaf, 0xfa,
- 0xff, 0xaf, 0xfa, 0xff, 0xaf, 0xfa, 0xff, 0xaf,
- 0xfa, 0xff, 0xaa, 0xa7,
+ 0x9f, 0x79, 0xf7, 0x9f, 0x79, 0xf7, 0x9f, 0x79,
+ 0xf7, 0x9f, 0x79, 0xf7, 0x9f, 0x79, 0xf7, 0x9f,
+ 0x79, 0xf7, 0x9f, 0x79, 0xf7, 0x9f, 0x79, 0xf7,
+ 0x9f, 0x79, 0xf7, 0x9f, 0x79, 0xf7, 0x9f, 0x79,
+ 0xf7, 0x9f, 0x74, 0x83,
/* U+7D "}" */
- 0x48, 0x20, 0x0, 0x0, 0x9, 0xff, 0x70, 0x0,
- 0x0, 0x7, 0xff, 0x90, 0x0, 0x0, 0xa, 0xff,
- 0x10, 0x0, 0x0, 0x3f, 0xf7, 0x0, 0x0, 0x0,
- 0xff, 0xa0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0,
- 0x0, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xfc, 0x0,
- 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0xc, 0xfe,
- 0x0, 0x0, 0x0, 0x8f, 0xf7, 0x0, 0x0, 0x1,
- 0xdf, 0xf9, 0x40, 0x0, 0x1, 0xdf, 0xf8, 0x0,
- 0x0, 0xaf, 0xfd, 0x50, 0x0, 0x6f, 0xf7, 0x0,
- 0x0, 0xc, 0xff, 0x0, 0x0, 0x0, 0xff, 0xc0,
- 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0xff,
- 0xc0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0,
- 0xff, 0xa0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0,
- 0x9, 0xff, 0x20, 0x0, 0x6, 0xff, 0x90, 0x0,
- 0x9, 0xff, 0xa0, 0x0, 0x0, 0x5b, 0x40, 0x0,
- 0x0, 0x0,
+ 0x11, 0x0, 0x0, 0x0, 0x7, 0xfa, 0x10, 0x0,
+ 0x0, 0x4d, 0xfe, 0x20, 0x0, 0x0, 0x1d, 0xfd,
+ 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, 0x0,
+ 0xff, 0x70, 0x0, 0x0, 0xe, 0xf9, 0x0, 0x0,
+ 0x0, 0xef, 0xa0, 0x0, 0x0, 0xe, 0xfa, 0x0,
+ 0x0, 0x0, 0xdf, 0xa0, 0x0, 0x0, 0xc, 0xfb,
+ 0x0, 0x0, 0x0, 0x9f, 0xe0, 0x0, 0x0, 0x2,
+ 0xff, 0xb2, 0x0, 0x0, 0x4, 0xef, 0xf8, 0x0,
+ 0x0, 0x3d, 0xff, 0x90, 0x0, 0x2f, 0xfc, 0x30,
+ 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0xcf, 0xb0,
+ 0x0, 0x0, 0xd, 0xfa, 0x0, 0x0, 0x0, 0xef,
+ 0xa0, 0x0, 0x0, 0xe, 0xfa, 0x0, 0x0, 0x0,
+ 0xef, 0x90, 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0,
+ 0x5, 0xff, 0x40, 0x0, 0x0, 0xdf, 0xd0, 0x0,
+ 0x4, 0xdf, 0xe2, 0x0, 0x0, 0x8f, 0xb1, 0x0,
+ 0x0, 0x1, 0x20, 0x0, 0x0, 0x0,
/* U+7E "~" */
- 0x0, 0x3a, 0xef, 0xa4, 0x0, 0x0, 0x0, 0x33,
- 0x10, 0x3e, 0xff, 0xff, 0xfa, 0x10, 0x0, 0xd,
- 0xf3, 0xc, 0xfd, 0x66, 0xcf, 0xfd, 0x40, 0x6,
- 0xff, 0x1, 0xff, 0x10, 0x0, 0x7f, 0xff, 0xcc,
- 0xff, 0x80, 0x2a, 0x90, 0x0, 0x0, 0x3e, 0xff,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0x87, 0x30, 0x0,
+ 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xdf, 0xff, 0xa1, 0x0, 0x0, 0xc,
+ 0xd3, 0x3, 0xff, 0xff, 0xff, 0xe4, 0x0, 0x2,
+ 0xff, 0x10, 0xcf, 0xc2, 0x6, 0xef, 0xf9, 0x45,
+ 0xdf, 0xb0, 0x1f, 0xf2, 0x0, 0x1, 0xcf, 0xff,
+ 0xff, 0xe2, 0x1, 0x88, 0x0, 0x0, 0x0, 0x6c,
+ 0xfe, 0xa1, 0x0,
/* U+F001 "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0x6c, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x38, 0xdf, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x9e,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x30, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x38, 0xdf, 0xf9, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0xae, 0xff,
+ 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0x16, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xb6, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xfa, 0x50, 0x0, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xfe, 0x93,
- 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xd7, 0x20, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x2,
- 0x8c, 0xff, 0xc8, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x2, 0x8c, 0xff, 0xc8, 0xff, 0x0, 0x0, 0x6f,
- 0xff, 0xff, 0xff, 0xf6, 0x6f, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x2, 0x9d, 0xff, 0xd9, 0x20,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2, 0x9d, 0xff, 0xd9,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe9, 0xbf, 0xff, 0x0, 0x0,
+ 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
+ 0x73, 0x0, 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf,
+ 0xff, 0xff, 0xff, 0xfe, 0xa5, 0x10, 0x0, 0x0,
+ 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
+ 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0x0, 0x0, 0x0, 0xf, 0xff, 0xa2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0,
+ 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0x80,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0x0, 0x0, 0x0, 0xf, 0xff, 0x80, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0,
+ 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xff, 0x0, 0x0, 0x0, 0xf,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x1, 0x7a, 0xcb,
+ 0xcf, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0x80,
+ 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0x0, 0xf, 0xff, 0x80, 0x0, 0x0,
+ 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x1,
+ 0x33, 0x2f, 0xff, 0x80, 0x0, 0x0, 0x7, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x3, 0xcf, 0xff, 0xff,
+ 0xff, 0x80, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0x5f, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xf4,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
+ 0x0, 0x7, 0xef, 0xff, 0xfb, 0x20, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x32, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xe4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x27, 0xaa, 0x95, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F008 "" */
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x30,
- 0x3, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0x30, 0x3, 0xff, 0xff, 0x0, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0xff, 0xff, 0x30, 0x3, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x30,
- 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x30, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x30, 0x3, 0xff, 0xff,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x0, 0x0, 0xff, 0xff, 0x30, 0x3,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
- 0xff, 0x30, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x30, 0x3, 0xff, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x30, 0x3,
- 0xff, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0xff,
- 0x30, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0x30, 0x3, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x3, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x30, 0x3, 0xff, 0xff, 0x0, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0,
- 0xff, 0xff, 0x30, 0x3, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3, 0xff, 0x30, 0x3, 0xff,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1c,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
+ 0x9b, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xb0, 0x0, 0xb9, 0xfe, 0x44,
+ 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xe4, 0x44, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x88, 0x8f, 0xfd, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xef, 0xf8, 0x88, 0xff,
+ 0xfc, 0x0, 0xc, 0xfd, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xb0, 0x0, 0xcf, 0xfc, 0x0,
+ 0xc, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0xb0, 0x0, 0xcf, 0xfd, 0x0, 0xd, 0xfd,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0,
+ 0x0, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xcc, 0xcf, 0xfe, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xfc, 0xcc, 0xff, 0xfc, 0x0,
+ 0xc, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xff, 0xc0, 0x0, 0xcf, 0xfc, 0x0, 0xc, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0,
+ 0x0, 0xcf, 0xfc, 0x0, 0xc, 0xff, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xff, 0xc0, 0x0, 0xcf,
+ 0xff, 0xcc, 0xcf, 0xfe, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xfc, 0xcc, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0xff, 0xff, 0xff, 0xfd, 0x0, 0xd, 0xfd,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0,
+ 0x0, 0xdf, 0xfc, 0x0, 0xc, 0xfd, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xef, 0xb0, 0x0, 0xcf,
+ 0xfc, 0x0, 0xc, 0xfd, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xb0, 0x0, 0xcf, 0xff, 0x88,
+ 0x8f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0xf8, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0x44, 0x4e, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4, 0x44, 0xef,
+ 0xab, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xb0, 0x0, 0xb9,
/* U+F00B "" */
- 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x9f, 0xff, 0xff, 0xfb, 0x0, 0xaf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
+ 0xff, 0xff, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
+ 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xf8, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0x21, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xfc,
+ 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
+ 0xff, 0xfb, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff,
+ 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x21, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xaf, 0xff, 0xff, 0xfc, 0x0, 0xbf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xfc,
+ 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0x21, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x21, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xf8, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
+ 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
- 0xff, 0xf8, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8,
+ 0x9f, 0xff, 0xff, 0xfb, 0x0, 0xaf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
/* U+F00C "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x60,
+ 0x0, 0x0, 0x0, 0x5, 0xe9, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6f, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xf3,
- 0x0, 0xaf, 0xb1, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xff, 0xff, 0x30, 0xa, 0xff, 0xfc, 0x10,
- 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xf3, 0x0,
- 0xaf, 0xff, 0xff, 0xc1, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0xff, 0x30, 0x0, 0xff, 0xff, 0xff, 0xfc,
- 0x0, 0x6f, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0xaf, 0xff, 0xff, 0xff, 0x96, 0xff, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x9b, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
+ 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff,
+ 0xf8, 0x0, 0x0, 0x8e, 0x50, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0x80, 0x0,
+ 0xa, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6,
+ 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x9f, 0xff,
+ 0xff, 0x60, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
+ 0xff, 0x80, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf6,
+ 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xf8, 0x0,
+ 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0x60, 0x0,
+ 0x6f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
+ 0x8, 0xff, 0xff, 0xff, 0xf6, 0x6, 0xff, 0xff,
+ 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
+ 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0x80,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8f, 0xff, 0xff, 0xff, 0x70, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff,
+ 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7, 0xe7, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F00D "" */
- 0x0, 0x1, 0x30, 0x0, 0x0, 0x0, 0x0, 0x4,
- 0x10, 0x0, 0x0, 0x3e, 0xfb, 0x10, 0x0, 0x0,
- 0x0, 0xaf, 0xe3, 0x0, 0x3, 0xef, 0xff, 0xc1,
- 0x0, 0x0, 0xa, 0xff, 0xfe, 0x30, 0x1e, 0xff,
- 0xff, 0xfc, 0x10, 0x0, 0xaf, 0xff, 0xff, 0xe1,
- 0x4f, 0xff, 0xff, 0xff, 0xc1, 0xa, 0xff, 0xff,
- 0xff, 0xf4, 0xa, 0xff, 0xff, 0xff, 0xfc, 0x9f,
- 0xff, 0xff, 0xff, 0xc0, 0x0, 0xaf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10, 0x0, 0xa,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0x0,
- 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x10, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff,
- 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff,
- 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x0,
- 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xc1, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x10, 0xa, 0xff, 0xff, 0xff,
- 0xfd, 0xaf, 0xff, 0xff, 0xff, 0xb0, 0x4f, 0xff,
- 0xff, 0xff, 0xd1, 0xa, 0xff, 0xff, 0xff, 0xf4,
- 0x1f, 0xff, 0xff, 0xfd, 0x10, 0x0, 0xaf, 0xff,
- 0xff, 0xf1, 0x3, 0xff, 0xff, 0xd1, 0x0, 0x0,
- 0xa, 0xff, 0xff, 0x30, 0x0, 0x3f, 0xfc, 0x10,
- 0x0, 0x0, 0x0, 0xaf, 0xf3, 0x0, 0x0, 0x1,
- 0x40, 0x0, 0x0, 0x0, 0x0, 0x4, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x10, 0x0, 0x6, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0x0, 0x2d, 0xfa, 0x0, 0x6f, 0xff, 0xf5, 0x0,
+ 0x0, 0x0, 0x2, 0xef, 0xff, 0xa0, 0xef, 0xff,
+ 0xff, 0x50, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xf2,
+ 0xcf, 0xff, 0xff, 0xf5, 0x0, 0x2, 0xef, 0xff,
+ 0xff, 0xf1, 0x2e, 0xff, 0xff, 0xff, 0x50, 0x2e,
+ 0xff, 0xff, 0xff, 0x50, 0x2, 0xef, 0xff, 0xff,
+ 0xf7, 0xef, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x2e,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0,
+ 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff,
+ 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
+ 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2e, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0,
+ 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x50, 0x0, 0x2, 0xef, 0xff, 0xff,
+ 0xf6, 0xef, 0xff, 0xff, 0xf5, 0x0, 0x2e, 0xff,
+ 0xff, 0xff, 0x40, 0x2e, 0xff, 0xff, 0xff, 0x50,
+ 0xcf, 0xff, 0xff, 0xf4, 0x0, 0x2, 0xef, 0xff,
+ 0xff, 0xf1, 0xef, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x2e, 0xff, 0xff, 0xf2, 0x6f, 0xff, 0xf4, 0x0,
+ 0x0, 0x0, 0x2, 0xef, 0xff, 0xa0, 0x6, 0xff,
+ 0x40, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xfa, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x10, 0x0,
/* U+F011 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xe4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x69, 0x96,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0x20, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5e, 0xd4, 0x0, 0xff, 0xff, 0x0,
- 0x4d, 0xe5, 0x0, 0x0, 0x0, 0x6, 0xff, 0xfd,
- 0x0, 0xff, 0xff, 0x0, 0xef, 0xff, 0x60, 0x0,
- 0x0, 0x5f, 0xff, 0xfe, 0x0, 0xff, 0xff, 0x0,
- 0xef, 0xff, 0xf5, 0x0, 0x1, 0xef, 0xff, 0xf6,
- 0x0, 0xff, 0xff, 0x0, 0x6f, 0xff, 0xfe, 0x10,
- 0xa, 0xff, 0xff, 0x60, 0x0, 0xff, 0xff, 0x0,
- 0x6, 0xff, 0xff, 0xa0, 0x1f, 0xff, 0xf7, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xf1,
- 0x6f, 0xff, 0xd0, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0x0, 0xe, 0xff, 0xf6, 0xcf, 0xff, 0x70, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x7, 0xff, 0xfc,
- 0xcf, 0xff, 0x30, 0x0, 0x0, 0xff, 0xfe, 0x0,
- 0x0, 0x4, 0xff, 0xfc, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x4f, 0xf4, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xdf, 0xff, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfd,
- 0xbf, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7, 0xff, 0xfb, 0x6f, 0xff, 0xd0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xf6,
- 0x2f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x7f, 0xff, 0xf2, 0xa, 0xff, 0xff, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xa0,
- 0x1, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xff, 0xff, 0x10, 0x0, 0x5f, 0xff, 0xff,
- 0xd6, 0x30, 0x3, 0x6d, 0xff, 0xff, 0xf5, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x5f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x6b, 0xdf, 0xfd, 0xb6, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xa8, 0x0, 0x3,
+ 0xff, 0xff, 0x30, 0x0, 0x8a, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x3e, 0xff, 0x60, 0x3, 0xff, 0xff,
+ 0x30, 0x6, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x2,
+ 0xef, 0xff, 0xe0, 0x3, 0xff, 0xff, 0x30, 0xe,
+ 0xff, 0xff, 0x30, 0x0, 0x0, 0xd, 0xff, 0xff,
+ 0xe0, 0x3, 0xff, 0xff, 0x30, 0xe, 0xff, 0xff,
+ 0xd1, 0x0, 0x0, 0x9f, 0xff, 0xfe, 0x30, 0x3,
+ 0xff, 0xff, 0x30, 0x3, 0xef, 0xff, 0xf9, 0x0,
+ 0x2, 0xff, 0xff, 0xe2, 0x0, 0x3, 0xff, 0xff,
+ 0x30, 0x0, 0x2e, 0xff, 0xff, 0x20, 0x9, 0xff,
+ 0xff, 0x50, 0x0, 0x3, 0xff, 0xff, 0x30, 0x0,
+ 0x5, 0xff, 0xff, 0x90, 0xe, 0xff, 0xfc, 0x0,
+ 0x0, 0x3, 0xff, 0xff, 0x30, 0x0, 0x0, 0xcf,
+ 0xff, 0xe0, 0x3f, 0xff, 0xf5, 0x0, 0x0, 0x3,
+ 0xff, 0xff, 0x30, 0x0, 0x0, 0x6f, 0xff, 0xf3,
+ 0x6f, 0xff, 0xf0, 0x0, 0x0, 0x3, 0xff, 0xff,
+ 0x30, 0x0, 0x0, 0xf, 0xff, 0xf6, 0x7f, 0xff,
+ 0xe0, 0x0, 0x0, 0x3, 0xff, 0xff, 0x30, 0x0,
+ 0x0, 0xe, 0xff, 0xf8, 0x8f, 0xff, 0xd0, 0x0,
+ 0x0, 0x2, 0xff, 0xff, 0x20, 0x0, 0x0, 0xd,
+ 0xff, 0xf8, 0x8f, 0xff, 0xe0, 0x0, 0x0, 0x0,
+ 0xef, 0xfe, 0x0, 0x0, 0x0, 0xe, 0xff, 0xf7,
+ 0x6f, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x2, 0x20,
+ 0x0, 0x0, 0x0, 0xf, 0xff, 0xf6, 0x3f, 0xff,
+ 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xff, 0xf3, 0xe, 0xff, 0xfb, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xff, 0xe0, 0x9, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x90,
+ 0x2, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2e, 0xff, 0xff, 0x20, 0x0, 0x9f,
+ 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0xef, 0xff, 0xf9, 0x0, 0x0, 0x1e, 0xff, 0xff,
+ 0xf8, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
+ 0xd1, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xfa,
+ 0x75, 0x57, 0xaf, 0xff, 0xff, 0xfe, 0x20, 0x0,
+ 0x0, 0x0, 0x3e, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9d,
+ 0xff, 0xfe, 0xd9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F013 "" */
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x30,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6a, 0x30, 0xa, 0xff, 0xff, 0x90,
- 0x3, 0xa6, 0x0, 0x0, 0x0, 0x6, 0xff, 0xe5,
- 0x6d, 0xff, 0xff, 0xd5, 0x6e, 0xff, 0x60, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0x0, 0xbf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0,
- 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf1, 0x0, 0x0, 0x5, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xfe, 0x51, 0x15, 0xef,
- 0xff, 0xff, 0x60, 0x0, 0x47, 0x9e, 0xff, 0xff,
- 0xe1, 0x0, 0x0, 0x1e, 0xff, 0xff, 0xd8, 0x63,
- 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x5,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x10, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, 0x1,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x50, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xff,
- 0x37, 0x8e, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x1d,
- 0xff, 0xff, 0xfa, 0x85, 0x0, 0x6, 0xff, 0xff,
- 0xfd, 0x41, 0x14, 0xdf, 0xff, 0xff, 0x60, 0x0,
- 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x50, 0x0, 0x0, 0x1e, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x0,
- 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0,
- 0x0, 0x6, 0xff, 0xf6, 0x6e, 0xff, 0xff, 0xe6,
- 0x5f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x6b, 0x30,
- 0xa, 0xff, 0xff, 0xa0, 0x3, 0xb6, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0x80,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F014 "" */
- 0x0, 0x0, 0x0, 0x1b, 0xff, 0xff, 0xff, 0xb1,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff,
- 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xff, 0x20, 0x0, 0x2, 0xff, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x7, 0xfb, 0x0, 0x0, 0x0,
- 0xbf, 0x70, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+ 0x0, 0x0, 0x2c, 0xff, 0xff, 0xd6, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff,
+ 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xc1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xc8, 0x0, 0x5d,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x6d, 0x40,
+ 0x0, 0x0, 0xcf, 0xfe, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0xcf, 0xfe, 0x20, 0x0, 0x7f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xfe, 0x0,
- 0xfe, 0x0, 0xfe, 0x0, 0xff, 0x0, 0x0, 0xff,
- 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff,
- 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xff,
- 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff,
- 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0,
- 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff,
- 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xff,
- 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0,
- 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0xfe, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x1b, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa1, 0x0,
+ 0xff, 0xff, 0xfb, 0x0, 0x1f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf4, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xcf,
+ 0xff, 0xff, 0xff, 0xff, 0xe7, 0x32, 0x5d, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x13, 0xcf, 0xff, 0xff,
+ 0xff, 0xe1, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
+ 0xfe, 0x60, 0x0, 0x7f, 0xff, 0xff, 0xf4, 0x0,
+ 0x0, 0x0, 0xe, 0xff, 0xff, 0xfb, 0x10, 0x0,
+ 0x4, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
+ 0x9f, 0xff, 0xff, 0x90, 0x0, 0x0, 0x5f, 0xff,
+ 0xff, 0xc0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xfa, 0x0, 0x0, 0x4, 0xff, 0xff, 0xfe, 0x0,
+ 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0x80, 0x0,
+ 0x0, 0x7f, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
+ 0xe, 0xff, 0xff, 0xfb, 0x10, 0x3, 0xcf, 0xff,
+ 0xff, 0xff, 0xe1, 0x0, 0x0, 0xb, 0xff, 0xff,
+ 0xff, 0xfe, 0x60, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0xe7, 0x32, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x1e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf4, 0x0, 0x7f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+ 0x0, 0x0, 0xcf, 0xfe, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0xcf, 0xfe, 0x10, 0x0, 0x1,
+ 0xc8, 0x0, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0x0, 0x5d, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff,
+ 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xa0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2c, 0xff, 0xff, 0xd6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F015 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xee, 0x60,
- 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x9f, 0xff, 0xf8, 0x0, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xff,
- 0xff, 0xff, 0xa1, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x2, 0xcf, 0xfd, 0x22, 0xdf, 0xfc,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e,
- 0xff, 0xb1, 0xa9, 0x1b, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0xf9, 0x1b, 0xff,
- 0xb1, 0x9f, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x9f, 0xff, 0x63, 0xdf, 0xff, 0xfd, 0x36, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x1a, 0xff, 0xf3, 0x5e,
- 0xff, 0xff, 0xff, 0xe5, 0x3f, 0xff, 0xa1, 0x0,
- 0x2, 0xcf, 0xfd, 0x27, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x62, 0xdf, 0xfc, 0x20, 0x3e, 0xff, 0xb2,
- 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x1b,
- 0xff, 0xe3, 0x5f, 0xf9, 0x1c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xc1, 0x9f, 0xf5, 0x9,
- 0x60, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0x6, 0x90, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xf0, 0x0, 0xf, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xf0, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf0,
- 0x0, 0xf, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xdf, 0xff, 0xff, 0xf0, 0x0, 0xf, 0xff,
- 0xff, 0xfd, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37,
+ 0x60, 0x0, 0x0, 0x48, 0x88, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
+ 0xfd, 0x10, 0x0, 0xaf, 0xff, 0xa0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff,
+ 0xff, 0xe3, 0x0, 0xbf, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff,
+ 0xff, 0xff, 0x60, 0xbf, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0xf8,
+ 0xcf, 0xff, 0xf9, 0xbf, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x30,
+ 0xa, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xd2, 0x3,
+ 0x10, 0x7f, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xbf, 0xff, 0xfa, 0x0, 0x8f,
+ 0xd2, 0x4, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x2d, 0xff, 0xff, 0x80, 0xb, 0xff,
+ 0xff, 0x40, 0x2d, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x4, 0xff, 0xff, 0xf5, 0x2, 0xdf, 0xff,
+ 0xff, 0xf7, 0x1, 0xbf, 0xff, 0xfa, 0x0, 0x0,
+ 0x0, 0x7f, 0xff, 0xfe, 0x30, 0x3e, 0xff, 0xff,
+ 0xff, 0xff, 0xa0, 0x9, 0xff, 0xff, 0xc1, 0x0,
+ 0xa, 0xff, 0xff, 0xc1, 0x6, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x10, 0x6f, 0xff, 0xfe, 0x30,
+ 0xbf, 0xff, 0xfa, 0x0, 0x9f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe3, 0x4, 0xef, 0xff, 0xf4,
+ 0xbf, 0xff, 0x70, 0x1b, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x50, 0x2d, 0xff, 0xf3,
+ 0xd, 0xf4, 0x2, 0xdf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xbf, 0x60,
+ 0x1, 0x20, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x3, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf4, 0x0,
+ 0x0, 0xcf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
+ 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
+ 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
+ 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
+ 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf2, 0x0,
+ 0x0, 0xaf, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xd0, 0x0,
+ 0x0, 0x6f, 0xff, 0xff, 0xfe, 0x10, 0x0, 0x0,
/* U+F019 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xfc,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x55, 0x55,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xf5, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
+ 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
+ 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0,
+ 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
+ 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
+ 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xd,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1d, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xdf, 0xff, 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff,
- 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xdf, 0xff, 0xfd, 0x10, 0x0,
+ 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1c, 0xdd, 0xdd, 0xef,
+ 0xff, 0xff, 0xfe, 0xdd, 0xdd, 0xc1, 0x0, 0x0,
+ 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
+ 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0x80,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1d, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0xff, 0xf6, 0x1, 0xdd, 0x10,
- 0x3e, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x50, 0x0, 0x3, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7,
- 0x11, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x11, 0x11, 0x11, 0x10, 0x8,
+ 0xff, 0xff, 0x80, 0x1, 0x11, 0x11, 0x11, 0x10,
+ 0xbf, 0xff, 0xff, 0xff, 0xfd, 0x10, 0x8f, 0xf8,
+ 0x1, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe2, 0x6, 0x60, 0x2d, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x30, 0x3, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0xff, 0x33,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x33, 0xff, 0x33, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0x1e, 0xb0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x2e, 0xc1,
+ 0x8f, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0x37, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x73,
/* U+F01C "" */
- 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0x2, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x0,
- 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x90, 0x0, 0x0, 0x1e, 0xff, 0x40,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xe1, 0x0,
- 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xef, 0xf7, 0x0, 0x0, 0xef, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xfd, 0x0,
- 0x5, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1f, 0xff, 0x50, 0xc, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xb0,
- 0x2f, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x2, 0xff, 0xf2, 0xaf, 0xfb, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfa,
- 0xef, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4f, 0xfd, 0xff, 0xff, 0xff, 0xff,
- 0x40, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0xc,
+ 0x0, 0x0, 0x0, 0x2b, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x80, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0,
+ 0x0, 0x0, 0x5f, 0xff, 0xd8, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x9f, 0xff, 0xd0, 0x0, 0x0,
+ 0x0, 0x1, 0xef, 0xff, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xb, 0xff, 0xf8, 0x0, 0x0,
+ 0x0, 0xa, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0xef, 0xff, 0x30, 0x0,
+ 0x0, 0x5f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xd0, 0x0,
+ 0x1, 0xef, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf8, 0x0,
+ 0xa, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xff, 0x20,
+ 0x5f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xd0,
+ 0xdf, 0xff, 0xb8, 0x88, 0x88, 0x70, 0x0, 0x0,
+ 0x0, 0x0, 0x48, 0x88, 0x88, 0x8e, 0xff, 0xf5,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x0,
+ 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x50,
/* U+F021 "" */
- 0x0, 0x0, 0x0, 0x2, 0x78, 0xbe, 0xfc, 0xa5,
- 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x7e,
- 0xff, 0xff, 0xff, 0xff, 0xf9, 0x20, 0x1, 0xcc,
- 0x0, 0x0, 0x5e, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe5, 0x1c, 0xff, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
- 0x0, 0x3e, 0xff, 0xff, 0xe7, 0x40, 0x14, 0x8e,
- 0xff, 0xff, 0xff, 0xff, 0x2, 0xef, 0xff, 0xf7,
- 0x0, 0x0, 0x0, 0x1, 0x8f, 0xff, 0xff, 0xff,
- 0x8, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
- 0x1c, 0xff, 0xff, 0xff, 0xf, 0xff, 0xf7, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xff,
- 0x6f, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xd,
- 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xfd,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x58, 0x86, 0x0, 0x0,
+ 0x0, 0x0, 0x4, 0x9d, 0xef, 0xfe, 0xb7, 0x20,
+ 0x0, 0x0, 0xdf, 0xff, 0x0, 0x0, 0x0, 0x6,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x30, 0x0,
+ 0xdf, 0xff, 0x0, 0x0, 0x1, 0xbf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfa, 0x10, 0xcf, 0xff,
+ 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff, 0xfe, 0xef,
+ 0xff, 0xff, 0xff, 0xe3, 0xbf, 0xff, 0x0, 0x2,
+ 0xef, 0xff, 0xff, 0x94, 0x0, 0x0, 0x4b, 0xff,
+ 0xff, 0xfe, 0xdf, 0xff, 0x0, 0xd, 0xff, 0xff,
+ 0xc2, 0x0, 0x0, 0x0, 0x0, 0x3c, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0x9f, 0xff, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
+ 0x2, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
+ 0x11, 0x0, 0x8, 0xff, 0xff, 0xff, 0x9, 0xff,
+ 0xfd, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
+ 0xee, 0xff, 0xff, 0xff, 0xe, 0xff, 0xf4, 0x0,
+ 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x3f, 0xff, 0xe0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x2b, 0xcc, 0x60, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xca, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff,
- 0xd0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xf4,
- 0xff, 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x7f, 0xff, 0xd0, 0xff, 0xff, 0xff, 0xd1,
- 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x60,
- 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x7f, 0xff, 0xfd, 0x10, 0xff, 0xff, 0xff, 0xff,
- 0xd6, 0x30, 0x4, 0x6d, 0xff, 0xff, 0xf3, 0x0,
- 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x30, 0x0, 0xff, 0xd1, 0x5f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x0, 0x0,
- 0xdd, 0x10, 0x2, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
- 0x7b, 0xdf, 0xfc, 0x97, 0x10, 0x0, 0x0, 0x0,
+ 0xac, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x6, 0xbc, 0xb2, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0,
+ 0x0, 0xe, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x5f,
+ 0xff, 0xe0, 0xff, 0xff, 0xff, 0xee, 0xff, 0xff,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xff, 0x90,
+ 0xff, 0xff, 0xff, 0x80, 0x0, 0x11, 0x0, 0x0,
+ 0x0, 0x0, 0xa, 0xff, 0xff, 0x20, 0xff, 0xff,
+ 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x9f, 0xff, 0xf9, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xb2, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xff, 0xff,
+ 0xd0, 0x0, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xa4,
+ 0x0, 0x0, 0x4a, 0xff, 0xff, 0xfe, 0x20, 0x0,
+ 0xff, 0xfb, 0x3e, 0xff, 0xff, 0xff, 0xfe, 0xef,
+ 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0, 0xff, 0xfc,
+ 0x1, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfb, 0x10, 0x0, 0x0, 0xff, 0xfd, 0x0, 0x3,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x60, 0x0,
+ 0x0, 0x0, 0xff, 0xfd, 0x0, 0x0, 0x2, 0x7c,
+ 0xff, 0xff, 0xd9, 0x40, 0x0, 0x0, 0x0, 0x0,
+ 0x68, 0x85, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F026 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xb6, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3f, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0x0, 0x0, 0x0, 0x3, 0xff,
+ 0xff, 0xff, 0x38, 0x88, 0x88, 0x8f, 0xff, 0xff,
+ 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x55,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x10,
/* U+F027 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x6a, 0x20, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xbf, 0xe3,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x1b,
- 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x1, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x1a, 0xfa, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0xbf, 0xf2, 0xdf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x6b, 0x20, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x55, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3b, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3e, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
+ 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x38,
+ 0x88, 0x88, 0x8f, 0xff, 0xff, 0xff, 0x0, 0x0,
+ 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x1, 0xb9, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x0, 0x6f, 0xfc, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1, 0xcf,
+ 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0xef, 0xdf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf0, 0x0, 0xa, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xdf,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0x0, 0xbf, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0x6f, 0xfd, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf0, 0x2, 0xdb, 0x10,
+ 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8f, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
+ 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0,
+ 0x0, 0x0,
/* U+F028 "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xf8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x55, 0x0, 0x0, 0x5, 0xff, 0xd5,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0x0, 0x0, 0x0, 0x2b, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0x0, 0x0, 0x62,
- 0x0, 0x7f, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0x0, 0x4, 0xff, 0x71, 0x7, 0xfe,
- 0x10, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0x0,
- 0x0, 0x9f, 0xfa, 0x0, 0xcf, 0x80, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0x0, 0x0, 0x3, 0xff,
- 0x90, 0x2f, 0xe1, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x6a, 0x20, 0x3f, 0xf2, 0xb, 0xf7,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xbf,
- 0xe3, 0x9, 0xfa, 0x6, 0xfa, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x1b, 0xfa, 0x4, 0xfc,
- 0x4, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x1, 0xfe, 0x0, 0xfe, 0x0, 0xfe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x1, 0xff,
- 0x0, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x1a, 0xfa, 0x4, 0xfc, 0x4,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0xbf, 0xf2, 0x9, 0xfa, 0x6, 0xfa, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x6b, 0x20, 0x3f,
- 0xf2, 0xb, 0xf7, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x3, 0xef, 0x90, 0x2f, 0xf1,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0x0, 0x0,
- 0x9f, 0xfb, 0x0, 0xcf, 0x80, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0x0, 0x4, 0xff, 0x81, 0x7,
- 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0x0, 0x0, 0x62, 0x0, 0x7f, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x0,
- 0x2a, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x55, 0x0, 0x0, 0x5, 0xff, 0xe5, 0x0,
+ 0x0, 0x0, 0x0, 0x18, 0x50, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xf9, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0xfa, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xb6, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0xdf, 0xfc, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x0,
+ 0x0, 0x0, 0x21, 0x0, 0x1c, 0xff, 0x90, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0x0,
+ 0x0, 0x4, 0xfe, 0x50, 0x1, 0xef, 0xf3, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0x0,
+ 0x0, 0x5, 0xff, 0xf6, 0x0, 0x4f, 0xfc, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x7f, 0xff, 0x40, 0xa, 0xff, 0x40,
+ 0x38, 0x88, 0x88, 0x8f, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x5, 0xff, 0xe0, 0x2, 0xff, 0xa0,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x1c, 0xa1, 0x0, 0x8f, 0xf6, 0x0, 0xcf, 0xf0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x6f, 0xfd, 0x0, 0x1f, 0xfc, 0x0, 0x8f, 0xf2,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x1c, 0xff, 0x80, 0xa, 0xff, 0x0, 0x4f, 0xf5,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0xdf, 0xd0, 0x7, 0xff, 0x20, 0x3f, 0xf7,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0xaf, 0xf0, 0x6, 0xff, 0x30, 0x2f, 0xf7,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0xdf, 0xd0, 0x7, 0xff, 0x20, 0x3f, 0xf7,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x1c, 0xff, 0x80, 0xa, 0xff, 0x0, 0x4f, 0xf5,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x6f, 0xfd, 0x0, 0x1f, 0xfc, 0x0, 0x8f, 0xf2,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x1c, 0xa1, 0x0, 0x9f, 0xf6, 0x0, 0xdf, 0xe0,
+ 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x5, 0xff, 0xe0, 0x3, 0xff, 0xa0,
+ 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x7f, 0xff, 0x40, 0xa, 0xff, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0x0,
+ 0x0, 0x5, 0xff, 0xf6, 0x0, 0x4f, 0xfc, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0x0,
+ 0x0, 0x4, 0xfe, 0x50, 0x1, 0xef, 0xf3, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x0,
+ 0x0, 0x0, 0x21, 0x0, 0x1d, 0xff, 0x90, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xfc, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0xdf, 0xfc, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0xfa, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x18, 0x50, 0x0, 0x0, 0x0,
/* U+F03E "" */
0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1, 0xcf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1, 0xbf, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x10,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x18, 0xee,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0x0, 0x9f, 0xff, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xfe, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0x90, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x9f, 0xff, 0xf9, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xf9, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0x0, 0x19, 0xff, 0x90, 0x0, 0x0, 0x0, 0x6f,
- 0xff, 0xff, 0x90, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff,
- 0xff, 0x90, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x69, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x0, 0xff, 0xff, 0x0, 0x0, 0x6, 0xff,
- 0x90, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x6f, 0xff, 0xfb,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0xff, 0xff, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
- 0xff, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0,
+ 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x93, 0x27, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0xff, 0xf9, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2,
+ 0x0, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0,
+ 0xe, 0xff, 0xff, 0xff, 0xff, 0xd8, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x3f, 0xff,
+ 0xff, 0xff, 0xfc, 0x10, 0x6f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x50, 0x3, 0xdf, 0xff, 0xff, 0xff,
+ 0xc1, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0xef, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x0,
+ 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x6,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x3e, 0xff,
+ 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
+ 0xff, 0xff, 0xfc, 0x10, 0x3, 0xef, 0xc1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
+ 0xc1, 0x0, 0x0, 0x3b, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xff, 0xff, 0xfd, 0x10, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xfc,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfc, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
-
- /* U+F040 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x18, 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xcf, 0xfe, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c,
- 0xff, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xfe, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x1d,
- 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xce, 0x31, 0xdf, 0xff, 0xff, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xe3,
- 0x1d, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xcf, 0xf8, 0xfe, 0x31, 0xdf, 0xff, 0xf1,
- 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0x4c, 0xff,
- 0xe3, 0x1d, 0xff, 0x30, 0x0, 0x0, 0x0, 0x1,
- 0xcf, 0xf4, 0xcf, 0xff, 0xfe, 0x31, 0xc3, 0x0,
- 0x0, 0x0, 0x0, 0x1c, 0xff, 0x4c, 0xff, 0xff,
- 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf,
- 0xf4, 0xcf, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0x1c, 0xff, 0x4c, 0xff, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xf4,
- 0xcf, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0,
- 0x0, 0x1c, 0xff, 0x4c, 0xff, 0xff, 0xff, 0xff,
- 0x30, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xf4, 0xcf,
- 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0,
- 0x1c, 0xff, 0xed, 0xff, 0xff, 0xff, 0xff, 0x30,
- 0x0, 0x0, 0x0, 0x0, 0xdf, 0xd2, 0xdf, 0xff,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x10, 0x1d, 0xff, 0xff, 0xff, 0x30, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x1, 0xdf,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0x0, 0x2f, 0xff, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x1, 0xcf,
- 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf3,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+ 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1,
/* U+F048 "" */
- 0xdf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x1c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x1c, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x1, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x1d, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x1, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x1d, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x1, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x1d, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf,
- 0xdf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d,
-
- /* U+F04B "" */
- 0xfa, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xf7, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xd5, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xb4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x92, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x71, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x60, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x50, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfb, 0x40, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
- 0x20, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfa, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0x40, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x50, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x81, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xa2, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xc4, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xe6,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xf9, 0x10, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xfb, 0x20, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F04C "" */
- 0xdf, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0xdf,
- 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
- 0xfd, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xfd,
-
- /* U+F04D "" */
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
-
- /* U+F051 "" */
- 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfc,
- 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xe3, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x30, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe3, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x30, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xe3, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x30, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0x30, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfd,
-
- /* U+F052 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xd3, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xcf, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff, 0xe3,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xcf, 0xff, 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff, 0xff, 0xff,
- 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x0, 0x0,
- 0x0, 0x0, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe3, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x0,
- 0x0, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xe3, 0x0, 0x1, 0xcf, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x30,
- 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe3, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
-
- /* U+F053 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x55, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x5f, 0xff,
- 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x5, 0xff,
- 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xf9, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x5, 0x60, 0x0,
-
- /* U+F054 "" */
- 0x0, 0x5, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0,
- 0x0, 0x5, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0,
- 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0x90,
- 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xf6, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xfa, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x56, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F067 "" */
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf8, 0x0, 0x0,
+ 0x48, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0x70, 0xbf, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xf9, 0xbf, 0xff, 0x30, 0x0, 0x0, 0x0,
+ 0x1c, 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0, 0x0,
+ 0x1, 0xdf, 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0,
+ 0x0, 0x2e, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0x30,
+ 0x0, 0x3, 0xef, 0xff, 0xff, 0xfc, 0xbf, 0xff,
+ 0x30, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xfc, 0xbf,
+ 0xff, 0x30, 0x5, 0xff, 0xff, 0xff, 0xff, 0xfc,
+ 0xbf, 0xff, 0x30, 0x6f, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0xbf, 0xff, 0x37, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfc, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xbf,
+ 0xff, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
+ 0xbf, 0xff, 0x31, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0xbf, 0xff, 0x30, 0xb, 0xff, 0xff, 0xff,
+ 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0, 0xaf, 0xff,
+ 0xff, 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0, 0x9,
+ 0xff, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0x30, 0x0,
+ 0x0, 0x8f, 0xff, 0xff, 0xfc, 0xbf, 0xff, 0x30,
+ 0x0, 0x0, 0x6, 0xff, 0xff, 0xfc, 0xbf, 0xff,
+ 0x30, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xfc, 0xbf,
+ 0xff, 0x30, 0x0, 0x0, 0x0, 0x4, 0xff, 0xfb,
+ 0x9f, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x3d,
+ 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0,
- /* U+F068 "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ /* U+F04B "" */
+ 0x3, 0x75, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfc, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xef, 0xff, 0xff, 0x91, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
+ 0xff, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xa1, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x40,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x50,
+ 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf7, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf7, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0x50, 0x0, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xa1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xf, 0xff, 0xff, 0xff, 0xe6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xff,
+ 0x91, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6, 0xff, 0xfc, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x74,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0,
+
+ /* U+F04C "" */
+ 0x1a, 0xef, 0xff, 0xff, 0xd5, 0x0, 0x0, 0x1a,
+ 0xef, 0xff, 0xff, 0xd5, 0xa, 0xff, 0xff, 0xff,
+ 0xff, 0xf2, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff,
+ 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+ 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff, 0xff,
0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x80, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
+ 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
+ 0xff, 0xff, 0xff, 0xf7, 0x0, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0x60, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0x66,
+ 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x6, 0xff,
+ 0xff, 0xff, 0xff, 0xd0, 0x4, 0x89, 0x99, 0x98,
+ 0x71, 0x0, 0x0, 0x4, 0x89, 0x99, 0x98, 0x71,
+ 0x0,
+
+ /* U+F04D "" */
+ 0x3, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x60, 0x6, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf2, 0x1a, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5,
+ 0x0,
+
+ /* U+F051 "" */
+ 0x5, 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x68,
+ 0x87, 0x5f, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0xff, 0x7f, 0xff, 0xe3, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0x40, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff,
+ 0xff, 0x60, 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff,
+ 0xff, 0xff, 0xf8, 0x0, 0x0, 0xff, 0xff, 0x8f,
+ 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0, 0xff,
+ 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0,
+ 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
+ 0x8f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0xff,
+ 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0,
+ 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xfd, 0x10,
+ 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xc1,
+ 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff, 0xff,
+ 0xa0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x8f, 0xff,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x7f,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
+ 0x1c, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
+ 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0,
+
+ /* U+F052 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x9a, 0x50,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1e, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf,
+ 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x5, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xc0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x3,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xa0, 0xc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf5, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xa, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf3, 0x1, 0xbf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf7, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6,
+ 0x5, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xb0,
+
+ /* U+F053 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x93, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xe0,
+ 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xc0,
+ 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xfd, 0x10,
+ 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xd1, 0x0,
+ 0x0, 0x0, 0x4, 0xff, 0xff, 0xfd, 0x10, 0x0,
+ 0x0, 0x0, 0x4f, 0xff, 0xff, 0xd1, 0x0, 0x0,
+ 0x0, 0x4, 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0,
+ 0x0, 0x4f, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0xb, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xbf, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0,
+ 0x0, 0xb, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xff, 0xff, 0x60, 0x0, 0x0,
+ 0x0, 0x0, 0xb, 0xff, 0xff, 0xf6, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0x60, 0x0,
+ 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xf6, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0x60,
+ 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xf0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xa0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xfa, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0,
+
+ /* U+F054 "" */
+ 0x0, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xa, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x6f, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4f, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
+ 0x7, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x7f, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x7f, 0xff, 0xff, 0xb0, 0x0, 0x0,
+ 0x0, 0x0, 0x7, 0xff, 0xff, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xb0, 0x0,
+ 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xfb, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xa0,
+ 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xff, 0xf0,
+ 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0x50,
+ 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff, 0xf5, 0x0,
+ 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x1c, 0xff, 0xff, 0xf5, 0x0, 0x0,
+ 0x0, 0x1, 0xcf, 0xff, 0xff, 0x50, 0x0, 0x0,
+ 0x0, 0x1c, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0,
+ 0x1, 0xdf, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0x1d, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0,
+ 0x2f, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F067 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xa8, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3f, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff,
+ 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
+ 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x6, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x9f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0x20, 0x23, 0x33, 0x33, 0x33,
+ 0x8f, 0xff, 0xfe, 0x33, 0x33, 0x33, 0x33, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xe0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
+ 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfe, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
+ 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xfc, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8d, 0xdc, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
+
+ /* U+F068 "" */
+ 0x1, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x10, 0x8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xe1, 0x1, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x0,
+
+ /* U+F06E "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xad, 0xef,
+ 0xfe, 0xc9, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xa2, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3c, 0xff, 0xff, 0xff, 0xba,
+ 0xbd, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0xff, 0xfd, 0x50, 0x0,
+ 0x0, 0x18, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xff, 0xff, 0xa0, 0x0, 0x0,
+ 0x0, 0x0, 0x3e, 0xff, 0xff, 0xf6, 0x0, 0x0,
+ 0x0, 0xc, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x39,
+ 0x95, 0x0, 0x2, 0xef, 0xff, 0xff, 0x70, 0x0,
+ 0x0, 0xaf, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x3f,
+ 0xff, 0xd2, 0x0, 0x5f, 0xff, 0xff, 0xf5, 0x0,
+ 0x7, 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x3f,
+ 0xff, 0xfe, 0x10, 0xd, 0xff, 0xff, 0xff, 0x20,
+ 0x2f, 0xff, 0xff, 0xff, 0x20, 0x0, 0x0, 0xaf,
+ 0xff, 0xff, 0x80, 0x8, 0xff, 0xff, 0xff, 0xc0,
+ 0xbf, 0xff, 0xff, 0xff, 0x0, 0x48, 0x6b, 0xff,
+ 0xff, 0xff, 0xd0, 0x5, 0xff, 0xff, 0xff, 0xf5,
+ 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7f, 0xff, 0xff,
+ 0xff, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xff, 0xf9,
+ 0xbf, 0xff, 0xff, 0xff, 0x0, 0x6f, 0xff, 0xff,
+ 0xff, 0xff, 0xe0, 0x5, 0xff, 0xff, 0xff, 0xf5,
+ 0x1f, 0xff, 0xff, 0xff, 0x20, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0x90, 0x8, 0xff, 0xff, 0xff, 0xc0,
+ 0x6, 0xff, 0xff, 0xff, 0x70, 0x8, 0xff, 0xff,
+ 0xff, 0xff, 0x20, 0xd, 0xff, 0xff, 0xff, 0x20,
+ 0x0, 0xaf, 0xff, 0xff, 0xe0, 0x0, 0xaf, 0xff,
+ 0xff, 0xf4, 0x0, 0x5f, 0xff, 0xff, 0xf5, 0x0,
+ 0x0, 0xb, 0xff, 0xff, 0xfb, 0x0, 0x4, 0xad,
+ 0xc8, 0x10, 0x2, 0xef, 0xff, 0xff, 0x70, 0x0,
+ 0x0, 0x0, 0xbf, 0xff, 0xff, 0xa0, 0x0, 0x0,
+ 0x0, 0x0, 0x3e, 0xff, 0xff, 0xf6, 0x0, 0x0,
+ 0x0, 0x0, 0x7, 0xff, 0xff, 0xfd, 0x50, 0x0,
+ 0x0, 0x18, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3c, 0xff, 0xff, 0xff, 0xba,
+ 0xac, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4c, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xa2, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0xad, 0xff,
+ 0xfe, 0xc9, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F070 "" */
+ 0x4, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xef, 0xff, 0xc1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xe3,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff,
+ 0xff, 0xf7, 0x0, 0x0, 0x26, 0xad, 0xff, 0xed,
+ 0xb7, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xdf, 0xff, 0xfa, 0x16, 0xdf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xd7, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xba, 0xbe, 0xff, 0xff, 0xfe, 0x60, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
+ 0xff, 0xc5, 0x0, 0x0, 0x3, 0xbf, 0xff, 0xff,
+ 0xb1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e,
+ 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x7f,
+ 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1b, 0xff, 0xff, 0xc1, 0x6, 0xba, 0x50,
+ 0x0, 0x7f, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xe4, 0x7f,
+ 0xff, 0xc1, 0x0, 0xbf, 0xff, 0xff, 0xd1, 0x0,
+ 0x0, 0x0, 0xad, 0x20, 0x0, 0x4, 0xff, 0xff,
+ 0xfc, 0xff, 0xff, 0xc0, 0x3, 0xff, 0xff, 0xff,
+ 0xb0, 0x0, 0x0, 0x5f, 0xff, 0x50, 0x0, 0x2,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0x50, 0xe, 0xff,
+ 0xff, 0xff, 0x50, 0x0, 0xe, 0xff, 0xff, 0x90,
+ 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xfa, 0x0,
+ 0xbf, 0xff, 0xff, 0xfe, 0x0, 0x2, 0xff, 0xff,
+ 0xff, 0xc2, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff,
+ 0xb0, 0xa, 0xff, 0xff, 0xff, 0xf2, 0x0, 0xe,
+ 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x3e, 0xff,
+ 0xff, 0xfa, 0x0, 0xcf, 0xff, 0xff, 0xfe, 0x0,
+ 0x0, 0x5f, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x1b, 0xff, 0xff, 0xd2, 0xe, 0xff, 0xff, 0xff,
+ 0x50, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0,
+ 0x0, 0x0, 0x7, 0xff, 0xff, 0xf8, 0xff, 0xff,
+ 0xff, 0x90, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff,
+ 0xc0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x2, 0xef,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x1, 0xcf,
+ 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xdf, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0,
+ 0x0, 0x9f, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xbf, 0xff, 0xff, 0xc4, 0x0,
+ 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0x60, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xff, 0xff,
+ 0xfe, 0xba, 0xb5, 0x0, 0x0, 0x2d, 0xff, 0xff,
+ 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xdf, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0xa,
+ 0xff, 0xff, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x37, 0xbd, 0xef, 0xfd, 0xb4, 0x0,
+ 0x0, 0x7, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0xf8, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff,
+ 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x44, 0x0,
/* U+F071 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xe5,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0x87, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
+ 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xef, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xef, 0xfe, 0x10, 0x0,
+ 0x8f, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x8, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f,
- 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0x30,
+ 0x2f, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xc, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfd, 0x0, 0x0,
- 0xdf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xff, 0xfc, 0x0, 0x0, 0xcf, 0xff,
- 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe,
- 0xff, 0xfc, 0x0, 0x0, 0xcf, 0xff, 0xd0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xfc,
- 0x0, 0x0, 0xef, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xef, 0xff, 0xff, 0x0, 0x0,
- 0xff, 0xff, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x8, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf2,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff,
- 0x10, 0x1, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0,
- 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0xc,
+ 0xb, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x9, 0xff, 0xff, 0x80, 0x0, 0x1e, 0xff,
+ 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0xff, 0xff, 0xf6, 0x0, 0x0, 0xef,
+ 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xbf, 0xff, 0xff, 0x70, 0x0, 0xf,
+ 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4f, 0xff, 0xff, 0xf8, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0x80, 0x0,
+ 0xf, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xf9, 0x0,
+ 0x1, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xa0,
+ 0x0, 0x2f, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xfb,
+ 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0,
+ 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff,
+ 0xd1, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xa0,
+ 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xb0, 0x0, 0x0, 0x4f, 0xff, 0xff,
- 0xff, 0xff, 0x10, 0x1, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0xe, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x10, 0x1, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xd0, 0x8f, 0xff, 0xff, 0xff,
+ 0x30, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf5, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xf7, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xf6, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x40, 0x0, 0xc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xe0, 0x0, 0x1f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf8, 0x0, 0x1, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80, 0x9, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf6, 0x13, 0xcf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x10, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x6f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf7, 0xe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf6,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x7f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x48,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x98, 0x71, 0x0,
/* U+F074 "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x6, 0xa2, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf9, 0x0,
- 0xff, 0xff, 0xfb, 0x82, 0x0, 0x0, 0x0, 0x28,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0x90, 0xff, 0xff,
- 0xff, 0xff, 0x60, 0x0, 0x9, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x36,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0,
- 0x0, 0x0, 0x6, 0xff, 0xfe, 0x1e, 0xff, 0xff,
- 0x50, 0x0, 0x0, 0xff, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x2f, 0xf5, 0xaf, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xe2, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x48, 0xff,
- 0xfe, 0x0, 0x0, 0x0, 0x0, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xf6, 0x0,
+ 0xf, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
+ 0xe3, 0x0, 0x24, 0x44, 0x44, 0x30, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0x44, 0x4f, 0xff, 0xfe, 0x30,
+ 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
+ 0xff, 0xff, 0xa0, 0x0, 0x0, 0x3, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xf9, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0x1, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1,
+ 0x12, 0x22, 0x26, 0xff, 0xff, 0xa0, 0x1d, 0xff,
+ 0xff, 0xd2, 0x2f, 0xff, 0xfd, 0x10, 0x0, 0x0,
+ 0x0, 0x7f, 0xfb, 0x1, 0xdf, 0xff, 0xfd, 0x10,
+ 0xf, 0xff, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x8,
+ 0xc0, 0xc, 0xff, 0xff, 0xe2, 0x0, 0xe, 0xfd,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xff, 0xfe, 0x20, 0x0, 0x4, 0x81, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xf3,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xf1, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x9f, 0xff, 0xff, 0x40, 0x0, 0x0,
+ 0x4, 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8,
+ 0xff, 0xff, 0xf5, 0x5, 0xe2, 0x0, 0xe, 0xfe,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
+ 0x60, 0x4f, 0xfd, 0x10, 0xf, 0xff, 0xe2, 0x0,
+ 0x12, 0x22, 0x26, 0xff, 0xff, 0xf7, 0x3, 0xff,
+ 0xff, 0xd2, 0x2f, 0xff, 0xfe, 0x20, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80, 0x1, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe2, 0xff, 0xff, 0xff, 0xff,
+ 0xf9, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0,
+ 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+ 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x24, 0x44,
+ 0x44, 0x30, 0x0, 0x0, 0x0, 0x0, 0x2, 0x44,
+ 0x4f, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff,
+ 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x30, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xef, 0xff, 0x84, 0x0, 0x0, 0x0, 0x0, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff,
- 0x2e, 0x70, 0x0, 0x0, 0x0, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x3e, 0xff, 0xfa, 0x5f, 0xe3,
- 0x0, 0x0, 0x0, 0xff, 0x90, 0x0, 0x0, 0x0,
- 0x5, 0xef, 0xff, 0xf1, 0xef, 0xfe, 0x50, 0x0,
- 0x0, 0xff, 0xf9, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x90, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff,
- 0xfd, 0x92, 0x0, 0x0, 0x0, 0x2a, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x60, 0x0, 0x0,
+ 0x0, 0x0, 0x6, 0xa2, 0x0, 0x0,
/* U+F077 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x55, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xb2, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xaa, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0xff, 0xfa, 0x0, 0xaf, 0xff, 0xff, 0xff,
- 0x60, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xa0,
- 0x0, 0xa, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0xaf,
- 0xff, 0xff, 0xff, 0x60, 0x5f, 0xff, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff,
- 0xf5, 0x7f, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xaf, 0xff, 0xff, 0xf7, 0xa, 0xff,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,
- 0xff, 0xff, 0xa0, 0x0, 0xaf, 0xfa, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfa, 0x0,
- 0x0, 0x8, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0x80, 0x0,
+ 0x0, 0x8, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xfa, 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0xfa, 0x0, 0x3f, 0xff,
+ 0xff, 0xe2, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xfa, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xe2, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0,
+ 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x8, 0xff, 0xff,
+ 0xfa, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff,
+ 0xe2, 0x6, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xff, 0xff, 0xe0, 0x9f, 0xff,
+ 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
+ 0xff, 0xff, 0x11, 0xdf, 0xfa, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x60, 0x1,
+ 0xa8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3b, 0x50, 0x0,
/* U+F078 "" */
- 0x0, 0x8, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0x70, 0x0, 0x0, 0xaf, 0xf9,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0xf9, 0x0, 0xa, 0xff, 0xff, 0x90, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0x90, 0x7f,
- 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xaf, 0xff, 0xff, 0xf7, 0x5f, 0xff, 0xff, 0xff,
- 0x90, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff,
- 0xf5, 0x6, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0x60, 0x0, 0x6f,
- 0xff, 0xff, 0xff, 0x90, 0x0, 0xa, 0xff, 0xff,
- 0xff, 0xf6, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff,
- 0xf9, 0x0, 0xaf, 0xff, 0xff, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0x9a, 0xff,
- 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6f, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x55, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3b, 0x60, 0x1, 0xdf, 0xfa, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
+ 0x60, 0x9f, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xff, 0xff, 0x16, 0xff, 0xff,
+ 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
+ 0xff, 0xd0, 0x8, 0xff, 0xff, 0xfa, 0x0, 0x0,
+ 0x0, 0x0, 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x8,
+ 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x3f, 0xff,
+ 0xff, 0xe2, 0x0, 0x0, 0x8, 0xff, 0xff, 0xfa,
+ 0x0, 0x0, 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0xfa, 0x0, 0x3f, 0xff,
+ 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
+ 0xff, 0xfa, 0x3f, 0xff, 0xff, 0xe2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xff, 0xff, 0xe2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8,
+ 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x6, 0xa2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0,
/* U+F079 "" */
- 0x0, 0x0, 0x1c, 0xc1, 0x0, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0,
- 0x0, 0xbf, 0xfa, 0x0, 0x6f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x9,
- 0xff, 0xff, 0x90, 0x8, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0xf6, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff,
- 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff,
- 0xff, 0xff, 0xf2, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf9, 0x0, 0x6f, 0xff, 0xff, 0xf6,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x80, 0x9, 0xff, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf6, 0x0, 0xbf, 0xfb, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0x0, 0x1d, 0xd1, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x42, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf4, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xf4,
+ 0x0, 0x0, 0x57, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x60, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
+ 0xff, 0xf4, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x9f,
+ 0xff, 0xff, 0xff, 0xf4, 0x2, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0,
+ 0x9f, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x4, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0,
+ 0x0, 0x9f, 0xff, 0xff, 0xff, 0xef, 0xff, 0xf4,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9,
+ 0x0, 0x0, 0xf, 0xff, 0xf4, 0xef, 0xf9, 0x9f,
+ 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe,
+ 0xff, 0x90, 0x0, 0x0, 0x7f, 0xf5, 0xe, 0xff,
+ 0x90, 0xaf, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xef, 0xf9, 0x0, 0x0, 0x0, 0x32, 0x0,
+ 0xef, 0xf9, 0x0, 0x41, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xe, 0xff, 0x90, 0x0, 0x0, 0x0,
+ 0x0, 0xe, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xef, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x90,
+ 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x90, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, 0x80,
+ 0xe, 0xff, 0x90, 0x2a, 0x70, 0x0, 0x0, 0xe,
+ 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
+ 0xff, 0xa0, 0xef, 0xf9, 0x2e, 0xff, 0x60, 0x0,
+ 0x0, 0xef, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xef, 0xff, 0x9e, 0xff, 0xad, 0xff, 0xf9,
+ 0x0, 0x0, 0xe, 0xff, 0xc7, 0x77, 0x77, 0x77,
+ 0x77, 0x73, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x10, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf5, 0x4, 0xff, 0xff, 0xff,
+ 0xff, 0xfc, 0x10, 0x0, 0x0, 0xe, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x4, 0xff,
+ 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x9f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
+ 0x3, 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x3, 0xff, 0xfc, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xdb, 0x0, 0x0,
+ 0x0,
/* U+F07B "" */
- 0x4, 0xcf, 0xff, 0xff, 0xfc, 0x40, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff,
- 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
+ 0x1b, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xd8, 0x88, 0x88, 0x88, 0x88, 0x87, 0x30,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
@@ -2788,377 +3009,502 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfd, 0x5f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf4, 0x5, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfd, 0x40,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+ 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1,
/* U+F093 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcc, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x10,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1c, 0xff, 0xc1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf,
- 0xff, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff, 0xff, 0xc1,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xcf, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0,
- 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe2, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f,
+ 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff,
+ 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe2,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0,
+ 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x22, 0xcf,
+ 0xff, 0xff, 0xf6, 0x22, 0x22, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff,
+ 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xfd,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x10,
- 0x0, 0x1, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff,
+ 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xbf, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x11, 0x11, 0x11, 0x0, 0xbf,
+ 0xff, 0xff, 0xf4, 0x0, 0x11, 0x11, 0x11, 0x10,
+ 0xbf, 0xff, 0xff, 0xff, 0xc0, 0xaf, 0xff, 0xff,
+ 0xf3, 0xc, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+ 0xff, 0xff, 0xf1, 0x18, 0x99, 0x99, 0x60, 0x1f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x10, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
+ 0xcc, 0xcc, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x33, 0xff, 0x33, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33,
- 0xff, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0x1e, 0xb0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x2e, 0xc1,
+ 0x8f, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0x37, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x73,
/* U+F095 "" */
- 0x0, 0x8c, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x9, 0xff, 0xfd, 0x10, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xff, 0xfa,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xef, 0xff, 0xff, 0xf3, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xfd,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x4f, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xe, 0xff, 0xf9, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
- 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf9,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xa, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xf9, 0x0,
- 0x0, 0x3, 0xea, 0x10, 0x0, 0x0, 0x0, 0x1d,
- 0xff, 0xff, 0xc4, 0x0, 0x1e, 0xff, 0xe7, 0x10,
- 0x0, 0x0, 0x1, 0xdf, 0xff, 0xff, 0x83, 0xcf,
- 0xff, 0xff, 0xd5, 0x0, 0x0, 0x0, 0x1d, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x1, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfd, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x17, 0xef, 0xff, 0xff, 0xff, 0x90, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xae, 0xfe,
- 0xa4, 0x0,
+ 0x0, 0x0, 0x6, 0x62, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0xfe, 0xb7, 0x30, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x9, 0xff, 0xff, 0xff, 0xff,
+ 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff,
+ 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff,
+ 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff,
+ 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x7f, 0xff, 0xff, 0x90, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xa, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
+ 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
+ 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xc0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x6f, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x26, 0x10, 0x0, 0x0, 0x0, 0x5f,
+ 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xbf, 0xfc, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
+ 0xfc, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff, 0xff,
+ 0xfa, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xfe, 0x10,
+ 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xf7,
+ 0x5, 0xef, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+ 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0xc,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfd, 0x20, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x91, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xe9,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x9, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17,
+ 0x76, 0x53, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F0C4 "" */
- 0x1, 0x7b, 0xfd, 0xb5, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff,
- 0xff, 0xff, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfc, 0x8a, 0xef,
- 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
- 0xdd, 0x50, 0xff, 0xb0, 0x0, 0x6, 0xff, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0x3, 0xbe, 0x44, 0xcc,
- 0xff, 0x90, 0x0, 0x0, 0x3f, 0xfb, 0x0, 0x0,
- 0x0, 0x2, 0x9f, 0x60, 0x0, 0xad, 0xbf, 0xe3,
- 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, 0x1, 0x7e,
- 0x81, 0x0, 0x2c, 0xa1, 0x4f, 0xfe, 0x50, 0x0,
- 0xb, 0xff, 0x0, 0x0, 0x6d, 0xa2, 0x0, 0x4,
- 0xe7, 0x0, 0x6, 0xff, 0xfd, 0x97, 0xbf, 0xff,
- 0x81, 0x4c, 0xc4, 0x0, 0x0, 0x8f, 0x30, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0xff, 0xf4, 0xbf, 0xe5,
- 0x0, 0x0, 0x1a, 0xd1, 0x0, 0x0, 0x0, 0x0,
- 0x6c, 0xef, 0xea, 0xf5, 0xf8, 0x0, 0x0, 0x3,
- 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x3c, 0xf0, 0xdc, 0x0, 0x6e, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b,
- 0xc0, 0xdd, 0x9, 0xee, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x6b, 0xdf, 0xd9, 0xf6, 0x4, 0x52,
- 0xcb, 0x13, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x6e,
- 0xff, 0xff, 0xff, 0xe4, 0x9f, 0xff, 0x80, 0x0,
- 0x1b, 0xc1, 0x0, 0x0, 0x6, 0xff, 0xfe, 0xa8,
- 0xcf, 0xff, 0x91, 0x4d, 0xb4, 0x0, 0x0, 0x7f,
- 0x30, 0x0, 0x4f, 0xff, 0x60, 0x0, 0xb, 0xfe,
- 0x0, 0x0, 0x6e, 0x92, 0x0, 0x4, 0xf6, 0x0,
- 0xbf, 0xf3, 0x0, 0x0, 0x9, 0xff, 0x0, 0x0,
- 0x1, 0x8f, 0x71, 0x0, 0x2d, 0x91, 0xff, 0x90,
- 0x0, 0x0, 0x3e, 0xfb, 0x0, 0x0, 0x0, 0x2,
- 0xaf, 0x50, 0x0, 0xac, 0xef, 0xa0, 0x0, 0x6,
- 0xef, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x3, 0xcd,
- 0x44, 0xbd, 0xaf, 0xfb, 0x79, 0xdf, 0xff, 0x60,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xee, 0x60,
- 0x1d, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x8c,
- 0xfe, 0xc6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0x99, 0x72, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff,
+ 0xf7, 0x0, 0x0, 0x0, 0x0, 0x1, 0x7b, 0xb8,
+ 0x10, 0x1e, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0,
+ 0x0, 0x2, 0xef, 0xff, 0xfe, 0x38, 0xff, 0xff,
+ 0xef, 0xff, 0xf1, 0x0, 0x0, 0x2, 0xef, 0xff,
+ 0xff, 0xf4, 0xdf, 0xfe, 0x10, 0x7f, 0xff, 0x50,
+ 0x0, 0x2, 0xef, 0xff, 0xff, 0xf5, 0xf, 0xff,
+ 0x80, 0x0, 0xff, 0xf7, 0x0, 0x2, 0xef, 0xff,
+ 0xff, 0xf5, 0x0, 0xef, 0xfc, 0x0, 0x4f, 0xff,
+ 0x60, 0x2, 0xef, 0xff, 0xff, 0xf5, 0x0, 0xa,
+ 0xff, 0xfd, 0xbf, 0xff, 0xf4, 0x3, 0xef, 0xff,
+ 0xff, 0xf5, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff,
+ 0xff, 0xe5, 0xef, 0xff, 0xff, 0xf5, 0x0, 0x0,
+ 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x18, 0xcd,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff,
+ 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x7, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff,
+ 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5, 0x99, 0xef, 0xff, 0xff, 0xff, 0xff, 0xe2,
+ 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
+ 0x1e, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
+ 0xff, 0xe2, 0x0, 0x0, 0x8, 0xff, 0xff, 0xef,
+ 0xff, 0xf6, 0x5, 0xff, 0xff, 0xff, 0xe2, 0x0,
+ 0x0, 0xdf, 0xfe, 0x10, 0x7f, 0xff, 0x50, 0x5,
+ 0xff, 0xff, 0xff, 0xe2, 0x0, 0xf, 0xff, 0x80,
+ 0x0, 0xff, 0xf7, 0x0, 0x5, 0xff, 0xff, 0xff,
+ 0xe2, 0x0, 0xef, 0xfc, 0x0, 0x4f, 0xff, 0x60,
+ 0x0, 0x5, 0xff, 0xff, 0xff, 0xe2, 0xa, 0xff,
+ 0xfd, 0xbf, 0xff, 0xf2, 0x0, 0x0, 0x5, 0xff,
+ 0xff, 0xff, 0xe2, 0x2f, 0xff, 0xff, 0xff, 0xf9,
+ 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0x40,
+ 0x4f, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0xbe, 0xfb, 0x30, 0x0, 0x18, 0xcd, 0xb5,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0,
/* U+F0C5 "" */
- 0x0, 0x0, 0x0, 0x1, 0x9e, 0xff, 0xff, 0xff,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf,
- 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1c, 0xfd, 0xff, 0x0,
- 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xcf, 0xd1, 0xff, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c,
- 0xfd, 0x10, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xd1, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0xff, 0x9e, 0xff, 0xff,
- 0xff, 0xf8, 0x1c, 0xfd, 0x10, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xaf, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x1,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xf8, 0x0, 0x0, 0x1c, 0xfd, 0xff,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xcf, 0xd1, 0xff, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1c, 0xfd, 0x10, 0xff, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xd1,
- 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x1c, 0xfd, 0x10, 0x0, 0xff,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0x0, 0x0, 0x0, 0x1, 0x44, 0x44, 0x44, 0x44,
+ 0x42, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xdf, 0xff, 0xff, 0xff, 0xff, 0x80, 0xeb, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0xe, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xef,
+ 0xfb, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0xf8, 0xe, 0xff, 0xfb, 0x0, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0xef, 0xff, 0xf4, 0xaf, 0xff, 0xf4, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0xf,
+ 0xff, 0xff, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0xbb, 0xbb, 0xb3, 0xff, 0xff, 0xf4, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x5f, 0xff, 0xff, 0x40, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xf4,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x5f, 0xff, 0xff, 0x40, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff,
+ 0xf4, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x5f, 0xff, 0xff, 0x40, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff,
+ 0xff, 0xf4, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0x40, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5,
+ 0xff, 0xff, 0xf4, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0x40,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf5, 0xff, 0xff, 0xf4, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff,
+ 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf5, 0xff, 0xff, 0xf4, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff,
+ 0xff, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf5, 0xff, 0xff, 0xf5, 0xa, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1f,
+ 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xa2,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0,
+ 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x37, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x60, 0x0,
+ 0x0, 0x0, 0x0,
/* U+F0C7 "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xe9, 0x10, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0x10, 0x1, 0xff,
- 0x2d, 0xfe, 0x30, 0x0, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0x1, 0xdf, 0xe3, 0x0,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0x0, 0x1d, 0xfe, 0x30, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0x0, 0x1, 0xdf, 0xe1,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0x0, 0x0, 0x1d, 0xfa, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0x10, 0x1, 0xff, 0x0, 0x0, 0x2, 0xfe,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf8, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff,
+ 0x4, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x87, 0x20, 0x0, 0x0, 0x6, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0,
+ 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x40, 0x0, 0xf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0x40, 0x0, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xd, 0xff, 0xff, 0x40, 0xf, 0xff,
+ 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
+ 0xff, 0xff, 0x30, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xfe, 0xf,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xff, 0xff, 0xf3, 0xff, 0xf8, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
+ 0x4f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xbf, 0xff, 0xff, 0xf4, 0xff, 0xfd, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x7e, 0xff, 0xff,
+ 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x82, 0x15, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff,
+ 0x70, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0xb,
+ 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff, 0xff,
+ 0xfc, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff,
+ 0xf4, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0,
+ 0x9, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff,
+ 0xff, 0xff, 0x30, 0x0, 0x0, 0xef, 0xff, 0xff,
+ 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10,
+ 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0xa9, 0xdf, 0xff, 0xff,
+ 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3a,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe0, 0x1a, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3,
+ 0x0,
/* U+F0E7 "" */
- 0x0, 0xc, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
- 0x1f, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x5f,
- 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x9f, 0xff,
- 0xff, 0xa0, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff,
- 0x50, 0x0, 0x0, 0x1, 0xff, 0xff, 0xfe, 0x0,
- 0x0, 0x0, 0x5, 0xff, 0xff, 0xf9, 0x0, 0x0,
- 0x33, 0x9, 0xff, 0xff, 0xf2, 0x46, 0xae, 0xff,
- 0xd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x4f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x8f, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x20, 0xcf, 0xff, 0xff, 0xce,
- 0xff, 0xfa, 0x0, 0xff, 0xc8, 0x40, 0xf, 0xff,
- 0xf2, 0x0, 0x20, 0x0, 0x0, 0x4f, 0xff, 0xa0,
- 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x40, 0x0,
- 0x0, 0x0, 0x0, 0xcf, 0xfc, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
- 0x3, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x7,
- 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0xb, 0xfe,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf6, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xbf, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xb8, 0x0, 0x0, 0x0, 0x0,
-
- /* U+F0F3 "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xdd, 0x20,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x8, 0xff, 0x80, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8d,
- 0xff, 0xd8, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, 0xaf, 0xff, 0xff, 0xff, 0xfa,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2d,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x60, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xf,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
- 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0,
- 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
- 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf9, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, 0x0,
- 0x0, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x20, 0x0, 0x0, 0xa, 0xff,
+ 0x0, 0x8, 0xbb, 0xbb, 0xbb, 0xbb, 0x80, 0x0,
+ 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x20, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0xaf,
+ 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0xc, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0,
+ 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xfb, 0x0,
+ 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0x60, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
+ 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x7,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xa0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0,
- 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0x8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x80, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfe, 0x4f, 0xff, 0xff, 0xff, 0xff,
- 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
- 0x0, 0x0, 0x0, 0x0, 0xf, 0x8f, 0xff, 0xff,
- 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xb, 0xba, 0xff, 0xff, 0xb0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xfb,
- 0x7d, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x2b, 0xff, 0xb2, 0x0,
+ 0x70, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf1, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf7, 0x0, 0xdf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfd, 0x0, 0xf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0xaf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xf2,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
+ 0xff, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xf, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf4, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xfb, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x6, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xaf, 0xf6, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x9, 0xfc, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0,
+ /* U+F0EA "" */
+ 0x0, 0x0, 0x0, 0x1, 0x43, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x49, 0x99, 0x99, 0xff, 0xef, 0xfe, 0x99,
+ 0x99, 0x81, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff,
+ 0xff, 0xa0, 0x1e, 0xff, 0xff, 0xff, 0x90, 0x0,
+ 0x0, 0x0, 0xff, 0xff, 0xff, 0xfa, 0x1, 0xef,
+ 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0xf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0,
+ 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0xf,
+ 0xff, 0xff, 0xff, 0xfc, 0x64, 0x44, 0x44, 0x44,
+ 0x30, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xf, 0xff, 0xff, 0xff, 0x20, 0xaf, 0xff, 0xff,
+ 0xff, 0xa0, 0xd6, 0x0, 0x0, 0xff, 0xff, 0xff,
+ 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xfa, 0xe, 0xf6,
+ 0x0, 0xf, 0xff, 0xff, 0xff, 0x1, 0xff, 0xff,
+ 0xff, 0xff, 0xa0, 0xef, 0xf6, 0x0, 0xff, 0xff,
+ 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xfa, 0xe,
+ 0xff, 0xf6, 0xf, 0xff, 0xff, 0xff, 0x1, 0xff,
+ 0xff, 0xff, 0xff, 0xa0, 0xef, 0xff, 0xf3, 0xff,
+ 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xfa,
+ 0x4, 0x44, 0x44, 0x1f, 0xff, 0xff, 0xff, 0x1,
+ 0xff, 0xff, 0xff, 0xff, 0xe1, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff,
+ 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf5, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff,
+ 0xff, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf5, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff,
+ 0xff, 0xff, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf5, 0xaf, 0xff, 0xff, 0xf0, 0x1f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50,
+ 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0,
+ 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x50, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0,
+ 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x42, 0x0,
+
+ /* U+F0F3 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xa2, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0x8d, 0xff, 0xfa, 0x50, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xff,
+ 0xff, 0xff, 0xd4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0,
+ 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x6, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
+ 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0,
+ 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf4, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x0,
+ 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfb, 0x0, 0x0, 0x9, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
+ 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xa0, 0x1, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x70, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf7, 0x6f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
+ 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xe, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0xff,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x15, 0x73, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0,
+
/* U+F11C "" */
- 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4, 0xff,
+ 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x50,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0xff,
- 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0xff,
- 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+ 0xff, 0xfd, 0x88, 0x9f, 0xf8, 0x88, 0xff, 0x98,
+ 0x8e, 0xfa, 0x88, 0xbf, 0xd8, 0x89, 0xff, 0xf8,
+ 0xff, 0xf8, 0x0, 0xf, 0xc0, 0x0, 0xcf, 0x0,
+ 0xa, 0xf1, 0x0, 0x4f, 0x70, 0x0, 0xff, 0xf8,
+ 0xff, 0xf8, 0x0, 0xf, 0xc0, 0x0, 0xcf, 0x0,
+ 0xa, 0xf1, 0x0, 0x4f, 0x70, 0x0, 0xff, 0xf8,
+ 0xff, 0xf9, 0x0, 0x1f, 0xd0, 0x0, 0xdf, 0x10,
+ 0xc, 0xf3, 0x0, 0x6f, 0x90, 0x1, 0xff, 0xf8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xdc, 0xce, 0xfe, 0xcc, 0xdf,
+ 0xfc, 0xcd, 0xff, 0xcc, 0xcf, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0x20, 0x6, 0xf6, 0x0, 0x3f,
+ 0x80, 0x0, 0xfd, 0x0, 0xa, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0x20, 0x6, 0xf6, 0x0, 0x2f,
+ 0x80, 0x0, 0xed, 0x0, 0xa, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0x20, 0x6, 0xf6, 0x0, 0x3f,
+ 0x80, 0x0, 0xfd, 0x0, 0xa, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xdc, 0xce, 0xfe, 0xcc, 0xdf,
+ 0xfc, 0xcd, 0xff, 0xcc, 0xcf, 0xff, 0xff, 0xf8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xf9, 0x0, 0x1f, 0xd0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x6f, 0x90, 0x1, 0xff, 0xf8,
+ 0xff, 0xf8, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4f, 0x70, 0x0, 0xff, 0xf8,
+ 0xff, 0xf8, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4f, 0x70, 0x0, 0xff, 0xf8,
+ 0xff, 0xfd, 0x88, 0x9f, 0xf8, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0xbf, 0xd8, 0x89, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+ 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x50,
/* U+F124 "" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xdf, 0xfe, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xdf, 0xff,
- 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
- 0xdf, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x6, 0xdf, 0xff, 0xff, 0xff, 0x60, 0x0,
- 0x0, 0x0, 0x0, 0x6, 0xdf, 0xff, 0xff, 0xff,
- 0xfe, 0x0, 0x0, 0x0, 0x0, 0x6, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x6,
- 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0,
- 0x0, 0x6, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x60, 0x0, 0x6, 0xdf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0xdf, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0,
- 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xfe, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x60,
+ 0x0, 0x0, 0x0, 0x0, 0x5, 0x72, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xf6, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0,
+ 0x0, 0x0, 0x6, 0xef, 0xff, 0x40, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0,
- 0x0, 0x0,
+ 0x18, 0xef, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x29, 0xff,
+ 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x3a, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x7e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x8f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0,
+ 0x0, 0x2, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x4,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfd, 0x0, 0x0, 0x1, 0xbf, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf6, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70,
+ 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0,
+ 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x3, 0x44, 0x44, 0x44, 0x44, 0x4d, 0xff,
+ 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
+ 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xff,
+ 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xfb,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xf4, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xc, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
+ 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff,
+ 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff,
+ 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0x80,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x2, 0xff, 0xfd, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x17, 0x60, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0,
/* U+F15B "" */
- 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x10, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xf3, 0x0, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0xfe, 0x30, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xff, 0xe3, 0x0, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0xff, 0xfe, 0x30, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xe3, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0xff, 0xff, 0xfe, 0x30, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xe1,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
+ 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x10, 0x30,
+ 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf4, 0xf, 0xa0, 0x0, 0x0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x40, 0xff, 0xa0, 0x0, 0xf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf, 0xff,
+ 0xa0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x40, 0xff, 0xff, 0xa0, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf4, 0xf, 0xff, 0xff, 0xa0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0xff, 0xff,
+ 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
+ 0xb, 0xbb, 0xbb, 0xbb, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0xf, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
@@ -3182,332 +3528,614 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x14, 0x44,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x10,
/* U+F1EB "" */
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0xbb, 0xcf,
- 0xfc, 0xbb, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4, 0x9e, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe9, 0x40, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x4, 0xbf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfb, 0x40, 0x0, 0x0,
- 0x0, 0x2, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x20, 0x0,
- 0x0, 0x4e, 0xff, 0xff, 0xff, 0xfa, 0x54, 0x20,
- 0x2, 0x45, 0xaf, 0xff, 0xff, 0xff, 0xe4, 0x0,
- 0x7, 0xff, 0xff, 0xff, 0xc4, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x4c, 0xff, 0xff, 0xff, 0x60,
- 0x3f, 0xff, 0xff, 0xc4, 0x0, 0x5, 0x8b, 0xcf,
- 0xfc, 0xb8, 0x40, 0x0, 0x4c, 0xff, 0xff, 0xf3,
- 0xa, 0xff, 0xf8, 0x0, 0x29, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x92, 0x0, 0x8f, 0xff, 0xa0,
- 0x0, 0x9f, 0x40, 0x9, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x80, 0x4, 0xf9, 0x0,
- 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xa5, 0x20,
- 0x2, 0x59, 0xef, 0xff, 0xff, 0xe0, 0x0, 0x0,
- 0x0, 0x0, 0x9, 0xff, 0xff, 0x60, 0x0, 0x0,
- 0x0, 0x0, 0x18, 0xff, 0xff, 0x90, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xaf, 0xa1, 0x0, 0x69, 0xcf,
- 0xfc, 0x95, 0x0, 0x2c, 0xfa, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x2, 0x0, 0x5d, 0xff, 0xff,
- 0xff, 0xff, 0xd5, 0x0, 0x30, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfa, 0x40,
- 0x4, 0xaf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x20, 0x0,
- 0x0, 0x2, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xae,
- 0xea, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff,
- 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
- 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8,
- 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0x69, 0xab, 0xcb, 0xa9, 0x63, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27,
+ 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfc, 0x20, 0x0, 0x0,
+ 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xba,
+ 0xaa, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0x0, 0x1, 0xdf, 0xff, 0xff, 0xff, 0xc7, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x37, 0xcf, 0xff, 0xff,
+ 0xff, 0xd1, 0x3, 0xef, 0xff, 0xff, 0xf9, 0x20,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x29,
+ 0xff, 0xff, 0xff, 0xe3, 0xef, 0xff, 0xff, 0xb2,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x2, 0xbf, 0xff, 0xff, 0xe7, 0xff, 0xff,
+ 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf7, 0x7,
+ 0xfe, 0x20, 0x0, 0x0, 0x0, 0x48, 0xbe, 0xff,
+ 0xfd, 0xb8, 0x40, 0x0, 0x0, 0x0, 0x2d, 0xf7,
+ 0x0, 0x4, 0x10, 0x0, 0x0, 0x18, 0xef, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe8, 0x10, 0x0, 0x0,
+ 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x60,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xb1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xbf, 0xff, 0xff, 0xff, 0xc8, 0x76, 0x78, 0xcf,
+ 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0xe7, 0x0, 0x0, 0x0,
+ 0x0, 0x7, 0xef, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8, 0xff, 0x90, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf9, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x47, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x70, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff,
+ 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff,
+ 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xc, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0x40, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b, 0xdb, 0x30,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F240 "" */
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
+ 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb1, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0xff, 0x10, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
+ 0xff, 0xff, 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0xcf, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0xc, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
+ 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0x0, 0x8f, 0xff, 0xff,
+ 0xf8, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x8, 0xff,
+ 0xff, 0xff, 0x80, 0xcf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f,
+ 0xff, 0xff, 0xff, 0xf8, 0xc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xff, 0xe4, 0xff, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xff, 0xfe, 0xff, 0x0,
+ 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0xff, 0xf4, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0x0, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x1c, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F241 "" */
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
+ 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb1, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0xff, 0x10, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0xff, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
+ 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x4,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0,
+ 0x0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0xe, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90,
+ 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf9, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
+ 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x8, 0xff,
+ 0xff, 0xff, 0x80, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x3f,
+ 0xff, 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0,
+ 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xe4, 0xff, 0x0, 0xff, 0xff,
+ 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xff, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
+ 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xf4, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0x0, 0xcf, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x1c, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F242 "" */
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
+ 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb1, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0xff, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xe4, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xf4, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0x0, 0xcf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x1c, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
+ 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0xe, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
+ 0xf8, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
+ 0xff, 0xff, 0x80, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
+ 0xff, 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F243 "" */
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
+ 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb1, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0xff, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xe4, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff,
- 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xf4, 0xff, 0x0,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0x0, 0xcf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x1c, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
+ 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff, 0x10,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0xef, 0xff, 0xff,
+ 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0xe, 0xff,
+ 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
+ 0xef, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
+ 0xf8, 0xe, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
+ 0xff, 0xff, 0x80, 0xef, 0xff, 0xff, 0xf1, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
+ 0xff, 0xff, 0xff, 0xf8, 0xe, 0xff, 0xff, 0xff,
+ 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F244 "" */
- 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x2, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74,
+ 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xb1, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf9, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xfb, 0x0, 0xff, 0x10, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xe4, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0xff, 0xf4, 0xff, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0,
- 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xff, 0x0, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xff, 0x0, 0xcf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf1, 0xf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x1c, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xff, 0xf8,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x9f,
+ 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
+ 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x28, 0xcf, 0xff, 0xff, 0xf8, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0x80,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff,
+ 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
+ 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4f, 0xff, 0xfe, 0xff, 0xfb, 0x77,
+ 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x79, 0xff, 0xfa, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30,
+ 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe0, 0x1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F287 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x5e, 0xfe, 0x40, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x1, 0x23, 0xff, 0xff, 0xf1,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xff, 0xff,
+ 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0xcd, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x5f, 0xe1, 0x0, 0xcf, 0xff, 0xc0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xdf, 0x50, 0x0, 0x7, 0xa7, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+ 0x10, 0x0, 0x0, 0x4, 0xfd, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4, 0xef, 0xfc, 0x20, 0x0, 0xc, 0xf5, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x40,
+ 0x0, 0x0, 0x4f, 0xff, 0xff, 0xe1, 0x0, 0x4f,
+ 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xfb, 0x20, 0x0, 0xcf, 0xff, 0xff, 0xfa,
+ 0x35, 0xef, 0x94, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x4d, 0xff, 0xf7, 0x0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0,
+ 0xef, 0xff, 0xff, 0xfe, 0xbb, 0xbb, 0xbc, 0xff,
+ 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbf, 0xff,
+ 0xfe, 0x50, 0x8f, 0xff, 0xff, 0xf4, 0x0, 0x0,
+ 0x0, 0x9f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xc, 0xff, 0x80, 0x0, 0xb, 0xff, 0xff, 0x80,
+ 0x0, 0x0, 0x0, 0xe, 0xf2, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xc, 0xb2, 0x0, 0x0, 0x0, 0x58,
+ 0x73, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfa, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0xff, 0x20, 0x6, 0xdd, 0xdd, 0xc2, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x8f, 0xc0, 0x9, 0xff, 0xff, 0xf4,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xde, 0xff,
+ 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xaf,
+ 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x19, 0xff, 0xff, 0xf4, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xf4,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+F293 "" */
- 0x0, 0x0, 0x0, 0x39, 0xbf, 0xff, 0xfb, 0x93,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x2b, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x3,
- 0xef, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xfe, 0x30,
- 0x0, 0x0, 0x1d, 0xff, 0xff, 0xff, 0x6, 0xff,
- 0xff, 0xff, 0xd1, 0x0, 0x0, 0x8f, 0xff, 0xff,
- 0xff, 0x0, 0x6f, 0xff, 0xff, 0xf8, 0x0, 0x1,
- 0xef, 0xff, 0xff, 0xff, 0x0, 0x6, 0xff, 0xff,
- 0xfe, 0x10, 0x6, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x0, 0x6f, 0xff, 0xff, 0x60, 0xa, 0xff, 0xff,
- 0xdf, 0xff, 0x0, 0x60, 0x6, 0xff, 0xff, 0xa0,
- 0xe, 0xff, 0xf3, 0x1d, 0xff, 0x0, 0xc9, 0x0,
- 0x6f, 0xff, 0xd0, 0xf, 0xff, 0xe3, 0x1, 0xdf,
- 0x0, 0xcf, 0x20, 0x1d, 0xff, 0xf0, 0x3f, 0xff,
- 0xfe, 0x30, 0x1d, 0x0, 0xb3, 0x1, 0xcf, 0xff,
- 0xf2, 0x4f, 0xff, 0xff, 0xe3, 0x1, 0x0, 0x10,
- 0x1c, 0xff, 0xff, 0xf4, 0x4f, 0xff, 0xff, 0xfe,
- 0x30, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xf4, 0x4f,
- 0xff, 0xff, 0xff, 0xe3, 0x0, 0x1c, 0xff, 0xff,
- 0xff, 0xf4, 0x4f, 0xff, 0xff, 0xff, 0xf3, 0x0,
- 0x1d, 0xff, 0xff, 0xff, 0xf4, 0x4f, 0xff, 0xff,
- 0xff, 0x30, 0x0, 0x1, 0xdf, 0xff, 0xff, 0xf4,
- 0x4f, 0xff, 0xff, 0xf3, 0x1, 0x0, 0x10, 0x1d,
- 0xff, 0xff, 0xf4, 0x2f, 0xff, 0xff, 0x30, 0x1c,
- 0x0, 0xb3, 0x1, 0xdf, 0xff, 0xf2, 0xf, 0xff,
- 0xf3, 0x1, 0xcf, 0x0, 0xce, 0x20, 0x1e, 0xff,
- 0xf0, 0xe, 0xff, 0xe3, 0x1c, 0xff, 0x0, 0xca,
- 0x0, 0x6f, 0xff, 0xd0, 0xa, 0xff, 0xfe, 0xcf,
- 0xff, 0x0, 0xa0, 0x6, 0xff, 0xff, 0xa0, 0x6,
- 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x6f, 0xff,
- 0xff, 0x60, 0x1, 0xff, 0xff, 0xff, 0xff, 0x0,
- 0x6, 0xff, 0xff, 0xff, 0x10, 0x0, 0x8f, 0xff,
- 0xff, 0xff, 0x0, 0x6f, 0xff, 0xff, 0xf8, 0x0,
- 0x0, 0x1e, 0xff, 0xff, 0xff, 0x6, 0xff, 0xff,
- 0xff, 0xe1, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff,
- 0x6f, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
- 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc2, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3a, 0xcf, 0xff, 0xfc,
- 0xa3, 0x0, 0x0, 0x0
+ 0x0, 0x0, 0x0, 0x0, 0x1, 0x34, 0x32, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a, 0xef,
+ 0xff, 0xff, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0,
+ 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10,
+ 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xc7, 0xff,
+ 0xff, 0xff, 0xd1, 0x0, 0x0, 0xb, 0xff, 0xff,
+ 0xff, 0xc0, 0x8f, 0xff, 0xff, 0xfc, 0x0, 0x0,
+ 0x5f, 0xff, 0xff, 0xff, 0xc0, 0x9, 0xff, 0xff,
+ 0xff, 0x50, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xc0,
+ 0x0, 0xaf, 0xff, 0xff, 0xb0, 0x2, 0xff, 0xff,
+ 0xff, 0xff, 0xc0, 0x0, 0xb, 0xff, 0xff, 0xf1,
+ 0x6, 0xff, 0xff, 0xaf, 0xff, 0xc0, 0x39, 0x0,
+ 0xcf, 0xff, 0xf5, 0xa, 0xff, 0xf9, 0x3, 0xef,
+ 0xc0, 0x3f, 0x90, 0x1d, 0xff, 0xf8, 0xc, 0xff,
+ 0xfd, 0x10, 0x3e, 0xc0, 0x2f, 0xb0, 0xc, 0xff,
+ 0xfa, 0xe, 0xff, 0xff, 0xd1, 0x3, 0xb0, 0x2b,
+ 0x0, 0xaf, 0xff, 0xfc, 0xf, 0xff, 0xff, 0xfd,
+ 0x10, 0x10, 0x0, 0x9, 0xff, 0xff, 0xfd, 0xf,
+ 0xff, 0xff, 0xff, 0xd1, 0x0, 0x0, 0x7f, 0xff,
+ 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xfd, 0x10,
+ 0x5, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xff,
+ 0xff, 0xfb, 0x0, 0x3, 0xff, 0xff, 0xff, 0xfe,
+ 0xf, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x3f,
+ 0xff, 0xff, 0xfd, 0xf, 0xff, 0xff, 0xfb, 0x0,
+ 0x20, 0x11, 0x4, 0xff, 0xff, 0xfd, 0xe, 0xff,
+ 0xff, 0xb0, 0x5, 0xc0, 0x2d, 0x10, 0x5f, 0xff,
+ 0xfc, 0xc, 0xff, 0xfb, 0x0, 0x5f, 0xc0, 0x2f,
+ 0xd0, 0x7, 0xff, 0xfa, 0x9, 0xff, 0xfb, 0x5,
+ 0xff, 0xc0, 0x3f, 0x60, 0x1d, 0xff, 0xf7, 0x5,
+ 0xff, 0xff, 0xdf, 0xff, 0xc0, 0x36, 0x1, 0xdf,
+ 0xff, 0xf4, 0x1, 0xff, 0xff, 0xff, 0xff, 0xd0,
+ 0x0, 0x1d, 0xff, 0xff, 0xf0, 0x0, 0xaf, 0xff,
+ 0xff, 0xff, 0xd0, 0x1, 0xdf, 0xff, 0xff, 0xa0,
+ 0x0, 0x2f, 0xff, 0xff, 0xff, 0xd0, 0x1d, 0xff,
+ 0xff, 0xff, 0x20, 0x0, 0x6, 0xff, 0xff, 0xff,
+ 0xd1, 0xcf, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0,
+ 0x6f, 0xff, 0xff, 0xec, 0xff, 0xff, 0xff, 0xb0,
+ 0x0, 0x0, 0x0, 0x2, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xe7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x58, 0xab, 0xba, 0x84, 0x0, 0x0, 0x0,
+
+ /* U+F2ED "" */
+ 0x0, 0x0, 0x0, 0x0, 0x14, 0x44, 0x44, 0x43,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1f, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0,
+ 0x0, 0x58, 0x88, 0x88, 0x8c, 0xff, 0xff, 0xff,
+ 0xff, 0xf8, 0x88, 0x88, 0x88, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x28, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x86, 0x0, 0x4, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
+ 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0x0, 0x4, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xc0, 0x0, 0x4f, 0xff, 0xf5, 0x5f, 0xff, 0x92,
+ 0xff, 0xfc, 0x1c, 0xff, 0xfc, 0x0, 0x4, 0xff,
+ 0xff, 0x22, 0xff, 0xf6, 0xe, 0xff, 0xa0, 0xaf,
+ 0xff, 0xc0, 0x0, 0x4f, 0xff, 0xf2, 0x2f, 0xff,
+ 0x60, 0xef, 0xfa, 0xa, 0xff, 0xfc, 0x0, 0x4,
+ 0xff, 0xff, 0x22, 0xff, 0xf6, 0xe, 0xff, 0xa0,
+ 0xaf, 0xff, 0xc0, 0x0, 0x4f, 0xff, 0xf2, 0x2f,
+ 0xff, 0x60, 0xef, 0xfa, 0xa, 0xff, 0xfc, 0x0,
+ 0x4, 0xff, 0xff, 0x22, 0xff, 0xf6, 0xe, 0xff,
+ 0xa0, 0xaf, 0xff, 0xc0, 0x0, 0x4f, 0xff, 0xf2,
+ 0x2f, 0xff, 0x60, 0xef, 0xfa, 0xa, 0xff, 0xfc,
+ 0x0, 0x4, 0xff, 0xff, 0x22, 0xff, 0xf6, 0xe,
+ 0xff, 0xa0, 0xaf, 0xff, 0xc0, 0x0, 0x4f, 0xff,
+ 0xf2, 0x2f, 0xff, 0x60, 0xef, 0xfa, 0xa, 0xff,
+ 0xfc, 0x0, 0x4, 0xff, 0xff, 0x22, 0xff, 0xf6,
+ 0xe, 0xff, 0xa0, 0xaf, 0xff, 0xc0, 0x0, 0x4f,
+ 0xff, 0xf2, 0x2f, 0xff, 0x60, 0xef, 0xfa, 0xa,
+ 0xff, 0xfc, 0x0, 0x4, 0xff, 0xff, 0x22, 0xff,
+ 0xf6, 0xe, 0xff, 0xa0, 0xaf, 0xff, 0xc0, 0x0,
+ 0x4f, 0xff, 0xf2, 0x2f, 0xff, 0x60, 0xef, 0xfa,
+ 0xa, 0xff, 0xfc, 0x0, 0x4, 0xff, 0xff, 0x55,
+ 0xff, 0xf9, 0x2f, 0xff, 0xc1, 0xcf, 0xff, 0xc0,
+ 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfb, 0x0, 0x2, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xa0, 0x0, 0x9, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x4,
+ 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x61, 0x0, 0x0,
+
+ /* U+F304 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x66, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xdf, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef,
+ 0xff, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0xff,
+ 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff,
+ 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xfc, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xec,
+ 0x0, 0xbf, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xfc, 0x0,
+ 0xbf, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0xef, 0xff, 0xfc, 0x0, 0xbf,
+ 0xff, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xef, 0xff, 0xff, 0xfc, 0x0, 0xbf, 0xfe,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef,
+ 0xff, 0xff, 0xff, 0xfc, 0x0, 0xbe, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x0, 0x10, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x2, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x1, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xfe,
+ 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xf, 0xff, 0xff, 0xff, 0xfe, 0x20, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0xef, 0xff, 0xff, 0xec, 0x20, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x76,
+ 0x42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0,
+
+ /* U+F55A "" */
+ 0x0, 0x0, 0x0, 0x0, 0x8, 0xef, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd5, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0, 0xb,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0,
+ 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0xff,
+ 0xff, 0xff, 0x99, 0xff, 0xff, 0xff, 0xff, 0xf0,
+ 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0x8, 0xff, 0xff, 0x80, 0x7, 0xff, 0xff, 0xff,
+ 0xff, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe0, 0x0, 0x8, 0xff, 0x80, 0x0, 0xe, 0xff,
+ 0xff, 0xff, 0xf0, 0xb, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x8, 0x80, 0x0, 0x8,
+ 0xff, 0xff, 0xff, 0xff, 0xb, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
+ 0x8, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0,
+ 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x40, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x8, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0xb, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80, 0x0, 0x8, 0x80, 0x0,
+ 0x8, 0xff, 0xff, 0xff, 0xff, 0x0, 0xb, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x8, 0xff,
+ 0x80, 0x0, 0xe, 0xff, 0xff, 0xff, 0xf0, 0x0,
+ 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x8,
+ 0xff, 0xff, 0x80, 0x8, 0xff, 0xff, 0xff, 0xff,
+ 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x99, 0xff, 0xff, 0xff, 0x99, 0xff, 0xff, 0xff,
+ 0xff, 0xf0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0xb, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
+ 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0,
+ 0x0, 0x0, 0x8, 0xef, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x0,
+
+ /* U+F7C2 "" */
+ 0x0, 0x0, 0x0, 0x17, 0x88, 0x88, 0x88, 0x88,
+ 0x87, 0x50, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x2d,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0,
+ 0x0, 0x2e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x0, 0x2e, 0xff, 0x20, 0x1f, 0xa0,
+ 0xe, 0xd0, 0x8, 0xff, 0xf0, 0x2e, 0xff, 0xf2,
+ 0x1, 0xfa, 0x0, 0xed, 0x0, 0x8f, 0xff, 0x3e,
+ 0xff, 0xff, 0x20, 0x1f, 0xa0, 0xe, 0xd0, 0x8,
+ 0xff, 0xfe, 0xff, 0xff, 0xf2, 0x1, 0xfa, 0x0,
+ 0xed, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x20,
+ 0x1f, 0xa0, 0xe, 0xd0, 0x8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80, 0xaf, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x24,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x20,
+ 0x0,
+
+ /* U+F8A2 "" */
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x9, 0xf1, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9,
+ 0xff, 0xf1, 0x0, 0x0, 0x0, 0x5c, 0x50, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
+ 0x10, 0x0, 0x0, 0x7f, 0xfd, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xf1, 0x0,
+ 0x0, 0x8f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x4, 0xff, 0xff, 0x10, 0x0, 0x9f,
+ 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x4f, 0xff, 0xf1, 0x0, 0xaf, 0xff, 0xff,
+ 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+ 0xff, 0xff, 0x10, 0xbf, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf1, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x2e, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x0, 0x1d, 0xff, 0xff,
+ 0xfe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x10, 0x0, 0x1c, 0xff, 0xff, 0xd0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0xc, 0xff, 0xfd, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xb, 0xff, 0xd0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0xa, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0
};
@@ -3516,152 +4144,159 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
- {.bitmap_index = 0, .adv_w = 0, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
- {.bitmap_index = 0, .adv_w = 111, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 0, .adv_w = 118, .box_h = 20, .box_w = 3, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 30, .adv_w = 160, .box_h = 8, .box_w = 8, .ofs_x = 1, .ofs_y = 12},
- {.bitmap_index = 62, .adv_w = 279, .box_h = 20, .box_w = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 222, .adv_w = 261, .box_h = 27, .box_w = 14, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 411, .adv_w = 328, .box_h = 22, .box_w = 19, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 620, .adv_w = 279, .box_h = 22, .box_w = 16, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 796, .adv_w = 97, .box_h = 7, .box_w = 4, .ofs_x = 1, .ofs_y = 13},
- {.bitmap_index = 810, .adv_w = 149, .box_h = 30, .box_w = 9, .ofs_x = 1, .ofs_y = -7},
- {.bitmap_index = 945, .adv_w = 150, .box_h = 30, .box_w = 8, .ofs_x = 0, .ofs_y = -7},
- {.bitmap_index = 1065, .adv_w = 193, .box_h = 10, .box_w = 10, .ofs_x = 1, .ofs_y = 5},
- {.bitmap_index = 1115, .adv_w = 254, .box_h = 15, .box_w = 14, .ofs_x = 1, .ofs_y = 2},
- {.bitmap_index = 1220, .adv_w = 100, .box_h = 7, .box_w = 4, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 1234, .adv_w = 202, .box_h = 3, .box_w = 9, .ofs_x = 2, .ofs_y = 7},
- {.bitmap_index = 1248, .adv_w = 120, .box_h = 3, .box_w = 3, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 1253, .adv_w = 186, .box_h = 22, .box_w = 11, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 1374, .adv_w = 252, .box_h = 22, .box_w = 14, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 1528, .adv_w = 252, .box_h = 21, .box_w = 8, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 1612, .adv_w = 252, .box_h = 21, .box_w = 13, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 1749, .adv_w = 252, .box_h = 22, .box_w = 14, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 1903, .adv_w = 252, .box_h = 20, .box_w = 14, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2043, .adv_w = 252, .box_h = 21, .box_w = 13, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 2180, .adv_w = 252, .box_h = 22, .box_w = 14, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2334, .adv_w = 252, .box_h = 20, .box_w = 14, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 2474, .adv_w = 252, .box_h = 22, .box_w = 14, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2628, .adv_w = 252, .box_h = 22, .box_w = 13, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 2771, .adv_w = 113, .box_h = 15, .box_w = 3, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 2794, .adv_w = 115, .box_h = 19, .box_w = 4, .ofs_x = 2, .ofs_y = -4},
- {.bitmap_index = 2832, .adv_w = 228, .box_h = 13, .box_w = 12, .ofs_x = 1, .ofs_y = 1},
- {.bitmap_index = 2910, .adv_w = 252, .box_h = 9, .box_w = 12, .ofs_x = 2, .ofs_y = 5},
- {.bitmap_index = 2964, .adv_w = 235, .box_h = 13, .box_w = 13, .ofs_x = 1, .ofs_y = 1},
- {.bitmap_index = 3049, .adv_w = 213, .box_h = 21, .box_w = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3175, .adv_w = 401, .box_h = 27, .box_w = 23, .ofs_x = 1, .ofs_y = -7},
- {.bitmap_index = 3486, .adv_w = 283, .box_h = 20, .box_w = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 3656, .adv_w = 283, .box_h = 20, .box_w = 15, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 3806, .adv_w = 284, .box_h = 22, .box_w = 16, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 3982, .adv_w = 303, .box_h = 20, .box_w = 16, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4142, .adv_w = 246, .box_h = 20, .box_w = 13, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4272, .adv_w = 246, .box_h = 20, .box_w = 13, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4402, .adv_w = 303, .box_h = 22, .box_w = 16, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 4578, .adv_w = 315, .box_h = 20, .box_w = 16, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4738, .adv_w = 126, .box_h = 20, .box_w = 4, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 4778, .adv_w = 246, .box_h = 21, .box_w = 12, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 4904, .adv_w = 283, .box_h = 20, .box_w = 16, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 5064, .adv_w = 246, .box_h = 20, .box_w = 13, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 5194, .adv_w = 386, .box_h = 20, .box_w = 20, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 5394, .adv_w = 315, .box_h = 20, .box_w = 16, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 5554, .adv_w = 305, .box_h = 22, .box_w = 17, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 5741, .adv_w = 283, .box_h = 20, .box_w = 15, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 5891, .adv_w = 312, .box_h = 23, .box_w = 18, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 6098, .adv_w = 284, .box_h = 20, .box_w = 15, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 6248, .adv_w = 274, .box_h = 22, .box_w = 15, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 6413, .adv_w = 268, .box_h = 20, .box_w = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6583, .adv_w = 303, .box_h = 21, .box_w = 15, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 6741, .adv_w = 283, .box_h = 20, .box_w = 18, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 6921, .adv_w = 386, .box_h = 20, .box_w = 24, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7161, .adv_w = 283, .box_h = 20, .box_w = 16, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 7321, .adv_w = 283, .box_h = 20, .box_w = 17, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 7491, .adv_w = 268, .box_h = 20, .box_w = 15, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 7641, .adv_w = 121, .box_h = 28, .box_w = 6, .ofs_x = 2, .ofs_y = -5},
- {.bitmap_index = 7725, .adv_w = 185, .box_h = 22, .box_w = 12, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 7857, .adv_w = 121, .box_h = 28, .box_w = 6, .ofs_x = 0, .ofs_y = -5},
- {.bitmap_index = 7941, .adv_w = 187, .box_h = 10, .box_w = 10, .ofs_x = 1, .ofs_y = 10},
- {.bitmap_index = 7991, .adv_w = 204, .box_h = 3, .box_w = 13, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 8011, .adv_w = 140, .box_h = 4, .box_w = 6, .ofs_x = 1, .ofs_y = 17},
- {.bitmap_index = 8023, .adv_w = 246, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 8127, .adv_w = 255, .box_h = 23, .box_w = 13, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 8277, .adv_w = 235, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 8381, .adv_w = 255, .box_h = 23, .box_w = 13, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 8531, .adv_w = 235, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 8635, .adv_w = 137, .box_h = 22, .box_w = 10, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 8745, .adv_w = 255, .box_h = 21, .box_w = 13, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 8882, .adv_w = 255, .box_h = 22, .box_w = 12, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 9014, .adv_w = 113, .box_h = 22, .box_w = 3, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 9047, .adv_w = 116, .box_h = 28, .box_w = 6, .ofs_x = -1, .ofs_y = -6},
- {.bitmap_index = 9131, .adv_w = 230, .box_h = 22, .box_w = 12, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 9263, .adv_w = 113, .box_h = 22, .box_w = 3, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 9296, .adv_w = 392, .box_h = 15, .box_w = 21, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 9454, .adv_w = 255, .box_h = 15, .box_w = 12, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 9544, .adv_w = 255, .box_h = 16, .box_w = 14, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 9656, .adv_w = 255, .box_h = 21, .box_w = 13, .ofs_x = 2, .ofs_y = -6},
- {.bitmap_index = 9793, .adv_w = 255, .box_h = 21, .box_w = 13, .ofs_x = 1, .ofs_y = -6},
- {.bitmap_index = 9930, .adv_w = 157, .box_h = 15, .box_w = 8, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 9990, .adv_w = 234, .box_h = 16, .box_w = 13, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 10094, .adv_w = 143, .box_h = 20, .box_w = 9, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 10184, .adv_w = 255, .box_h = 16, .box_w = 12, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 10280, .adv_w = 225, .box_h = 15, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 10385, .adv_w = 339, .box_h = 15, .box_w = 21, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 10543, .adv_w = 225, .box_h = 15, .box_w = 14, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 10648, .adv_w = 225, .box_h = 21, .box_w = 14, .ofs_x = 0, .ofs_y = -6},
- {.bitmap_index = 10795, .adv_w = 225, .box_h = 15, .box_w = 12, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 10885, .adv_w = 152, .box_h = 27, .box_w = 10, .ofs_x = 0, .ofs_y = -5},
- {.bitmap_index = 11020, .adv_w = 111, .box_h = 24, .box_w = 3, .ofs_x = 2, .ofs_y = -4},
- {.bitmap_index = 11056, .adv_w = 152, .box_h = 27, .box_w = 9, .ofs_x = 0, .ofs_y = -5},
- {.bitmap_index = 11178, .adv_w = 304, .box_h = 6, .box_w = 17, .ofs_x = 1, .ofs_y = 5},
- {.bitmap_index = 11229, .adv_w = 384, .box_h = 26, .box_w = 24, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 11541, .adv_w = 480, .box_h = 26, .box_w = 30, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 11931, .adv_w = 448, .box_h = 22, .box_w = 28, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 12239, .adv_w = 448, .box_h = 19, .box_w = 24, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 12467, .adv_w = 352, .box_h = 20, .box_w = 20, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 12667, .adv_w = 384, .box_h = 26, .box_w = 24, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 12979, .adv_w = 384, .box_h = 24, .box_w = 24, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 13267, .adv_w = 352, .box_h = 24, .box_w = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 13531, .adv_w = 416, .box_h = 20, .box_w = 26, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 13791, .adv_w = 416, .box_h = 24, .box_w = 26, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 14103, .adv_w = 384, .box_h = 20, .box_w = 24, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 14343, .adv_w = 384, .box_h = 24, .box_w = 24, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 14631, .adv_w = 192, .box_h = 20, .box_w = 12, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 14751, .adv_w = 288, .box_h = 20, .box_w = 18, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 14931, .adv_w = 416, .box_h = 22, .box_w = 26, .ofs_x = 0, .ofs_y = -1},
- {.bitmap_index = 15217, .adv_w = 480, .box_h = 24, .box_w = 30, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 15577, .adv_w = 384, .box_h = 24, .box_w = 24, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 15865, .adv_w = 256, .box_h = 24, .box_w = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 16057, .adv_w = 352, .box_h = 24, .box_w = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 16321, .adv_w = 384, .box_h = 24, .box_w = 24, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 16609, .adv_w = 384, .box_h = 24, .box_w = 24, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 16897, .adv_w = 256, .box_h = 24, .box_w = 16, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 17089, .adv_w = 385, .box_h = 20, .box_w = 24, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 17329, .adv_w = 320, .box_h = 26, .box_w = 17, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 17550, .adv_w = 320, .box_h = 26, .box_w = 17, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 17771, .adv_w = 352, .box_h = 22, .box_w = 22, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 18013, .adv_w = 352, .box_h = 6, .box_w = 22, .ofs_x = 0, .ofs_y = 8},
- {.bitmap_index = 18079, .adv_w = 448, .box_h = 26, .box_w = 28, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 18443, .adv_w = 448, .box_h = 26, .box_w = 28, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 18807, .adv_w = 448, .box_h = 17, .box_w = 26, .ofs_x = 1, .ofs_y = 0},
- {.bitmap_index = 19028, .adv_w = 448, .box_h = 17, .box_w = 26, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 19249, .adv_w = 480, .box_h = 18, .box_w = 30, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 19519, .adv_w = 416, .box_h = 22, .box_w = 26, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 19805, .adv_w = 416, .box_h = 25, .box_w = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 20130, .adv_w = 352, .box_h = 22, .box_w = 22, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 20372, .adv_w = 448, .box_h = 22, .box_w = 28, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 20680, .adv_w = 448, .box_h = 28, .box_w = 28, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 21072, .adv_w = 384, .box_h = 24, .box_w = 24, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 21360, .adv_w = 224, .box_h = 26, .box_w = 14, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 21542, .adv_w = 448, .box_h = 28, .box_w = 26, .ofs_x = 1, .ofs_y = -4},
- {.bitmap_index = 21906, .adv_w = 480, .box_h = 18, .box_w = 30, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 22176, .adv_w = 352, .box_h = 22, .box_w = 22, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 22418, .adv_w = 384, .box_h = 28, .box_w = 24, .ofs_x = 0, .ofs_y = -4},
- {.bitmap_index = 22754, .adv_w = 512, .box_h = 22, .box_w = 32, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 23106, .adv_w = 576, .box_h = 20, .box_w = 36, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 23466, .adv_w = 576, .box_h = 20, .box_w = 36, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 23826, .adv_w = 576, .box_h = 20, .box_w = 36, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 24186, .adv_w = 576, .box_h = 20, .box_w = 36, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 24546, .adv_w = 576, .box_h = 20, .box_w = 36, .ofs_x = 0, .ofs_y = 0},
- {.bitmap_index = 24906, .adv_w = 384, .box_h = 28, .box_w = 22, .ofs_x = 1, .ofs_y = -4}
+ {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 111, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 0, .adv_w = 115, .box_w = 4, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 40, .adv_w = 143, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 14},
+ {.bitmap_index = 65, .adv_w = 279, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 235, .adv_w = 252, .box_w = 14, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 417, .adv_w = 328, .box_w = 19, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 607, .adv_w = 278, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 777, .adv_w = 78, .box_w = 3, .box_h = 7, .ofs_x = 1, .ofs_y = 14},
+ {.bitmap_index = 788, .adv_w = 153, .box_w = 9, .box_h = 30, .ofs_x = 1, .ofs_y = -7},
+ {.bitmap_index = 923, .adv_w = 156, .box_w = 8, .box_h = 30, .ofs_x = 0, .ofs_y = -7},
+ {.bitmap_index = 1043, .adv_w = 193, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 8},
+ {.bitmap_index = 1115, .adv_w = 254, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 1220, .adv_w = 88, .box_w = 5, .box_h = 7, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 1238, .adv_w = 124, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = 7},
+ {.bitmap_index = 1250, .adv_w = 118, .box_w = 5, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1258, .adv_w = 185, .box_w = 11, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 1379, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1519, .adv_w = 252, .box_w = 8, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 1599, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1739, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1869, .adv_w = 252, .box_w = 16, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2029, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2159, .adv_w = 251, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2299, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2439, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2579, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2709, .adv_w = 109, .box_w = 4, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2739, .adv_w = 95, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 2787, .adv_w = 228, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 2872, .adv_w = 246, .box_w = 12, .box_h = 8, .ofs_x = 2, .ofs_y = 5},
+ {.bitmap_index = 2920, .adv_w = 234, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 3005, .adv_w = 212, .box_w = 12, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3125, .adv_w = 402, .box_w = 23, .box_h = 26, .ofs_x = 1, .ofs_y = -6},
+ {.bitmap_index = 3424, .adv_w = 292, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3604, .adv_w = 279, .box_w = 14, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3744, .adv_w = 292, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3904, .adv_w = 294, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 4054, .adv_w = 255, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 4184, .adv_w = 248, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 4314, .adv_w = 305, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4484, .adv_w = 319, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 4644, .adv_w = 122, .box_w = 4, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 4684, .adv_w = 247, .box_w = 14, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4824, .adv_w = 281, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 4984, .adv_w = 241, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 5114, .adv_w = 391, .box_w = 21, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 5324, .adv_w = 319, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 5484, .adv_w = 308, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5654, .adv_w = 283, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 5804, .adv_w = 308, .box_w = 17, .box_h = 24, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 6008, .adv_w = 276, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 6158, .adv_w = 266, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 6308, .adv_w = 267, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6478, .adv_w = 291, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 6638, .adv_w = 285, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6818, .adv_w = 397, .box_w = 25, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7068, .adv_w = 281, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7238, .adv_w = 269, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7408, .adv_w = 268, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 7558, .adv_w = 119, .box_w = 6, .box_h = 27, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 7639, .adv_w = 184, .box_w = 12, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 7771, .adv_w = 119, .box_w = 6, .box_h = 27, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 7852, .adv_w = 187, .box_w = 11, .box_h = 10, .ofs_x = 0, .ofs_y = 10},
+ {.bitmap_index = 7907, .adv_w = 202, .box_w = 13, .box_h = 3, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 7927, .adv_w = 138, .box_w = 7, .box_h = 4, .ofs_x = 0, .ofs_y = 17},
+ {.bitmap_index = 7941, .adv_w = 244, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8039, .adv_w = 251, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8186, .adv_w = 235, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8284, .adv_w = 253, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8421, .adv_w = 237, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8519, .adv_w = 156, .box_w = 10, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8629, .adv_w = 251, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
+ {.bitmap_index = 8766, .adv_w = 247, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8903, .adv_w = 109, .box_w = 4, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 8943, .adv_w = 107, .box_w = 6, .box_h = 26, .ofs_x = -1, .ofs_y = -6},
+ {.bitmap_index = 9021, .adv_w = 227, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 9168, .adv_w = 109, .box_w = 3, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 9200, .adv_w = 393, .box_w = 22, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 9365, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 9463, .adv_w = 256, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 9568, .adv_w = 251, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
+ {.bitmap_index = 9715, .adv_w = 255, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
+ {.bitmap_index = 9852, .adv_w = 152, .box_w = 9, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 9920, .adv_w = 231, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10018, .adv_w = 146, .box_w = 9, .box_h = 19, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10104, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10202, .adv_w = 217, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10307, .adv_w = 337, .box_w = 21, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10465, .adv_w = 222, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10570, .adv_w = 212, .box_w = 13, .box_h = 21, .ofs_x = 0, .ofs_y = -6},
+ {.bitmap_index = 10707, .adv_w = 222, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 10797, .adv_w = 152, .box_w = 10, .box_h = 28, .ofs_x = 0, .ofs_y = -6},
+ {.bitmap_index = 10937, .adv_w = 109, .box_w = 3, .box_h = 24, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 10973, .adv_w = 152, .box_w = 9, .box_h = 28, .ofs_x = 0, .ofs_y = -6},
+ {.bitmap_index = 11099, .adv_w = 305, .box_w = 17, .box_h = 6, .ofs_x = 1, .ofs_y = 5},
+ {.bitmap_index = 11150, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 11556, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 11850, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 12200, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 12494, .adv_w = 308, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 12704, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 13110, .adv_w = 448, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 13502, .adv_w = 504, .box_w = 32, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 13902, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 14308, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 14644, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 15050, .adv_w = 224, .box_w = 14, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 15211, .adv_w = 336, .box_w = 21, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 15453, .adv_w = 504, .box_w = 32, .box_h = 27, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 15885, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 16179, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
+ {.bitmap_index = 16413, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 16776, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 17089, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 17402, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
+ {.bitmap_index = 17636, .adv_w = 392, .box_w = 26, .box_h = 25, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 17961, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 18161, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 18361, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 18674, .adv_w = 392, .box_w = 25, .box_h = 7, .ofs_x = 0, .ofs_y = 7},
+ {.bitmap_index = 18762, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 19098, .adv_w = 560, .box_w = 35, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 19606, .adv_w = 504, .box_w = 33, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 20085, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 20435, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
+ {.bitmap_index = 20623, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
+ {.bitmap_index = 20811, .adv_w = 560, .box_w = 35, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 21196, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 21490, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 21896, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 22317, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 22630, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 22993, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 23306, .adv_w = 280, .box_w = 19, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 23582, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 23945, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 24308, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 24644, .adv_w = 448, .box_w = 30, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 25079, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 25384, .adv_w = 560, .box_w = 35, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 25839, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 26172, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 26505, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 26838, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 27171, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 27504, .adv_w = 560, .box_w = 36, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 27918, .adv_w = 392, .box_w = 22, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 28237, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 28600, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 29021, .adv_w = 560, .box_w = 35, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 29389, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 29694, .adv_w = 451, .box_w = 29, .box_h = 19, .ofs_x = 0, .ofs_y = 1}
};
/*---------------------
@@ -3669,25 +4304,26 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
*--------------------*/
static const uint16_t unicode_list_1[] = {
- 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x13,
- 0x14, 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d,
- 0x3f, 0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52,
- 0x53, 0x66, 0x67, 0x70, 0x73, 0x76, 0x77, 0x78,
- 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xf2,
- 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241, 0x242,
- 0x243, 0x292
+ 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
+ 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
+ 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
+ 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
+ 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
+ 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
+ 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
+ 0x8a1
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
- .range_start = 32, .range_length = 95, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY,
- .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0
+ .range_start = 32, .range_length = 95, .glyph_id_start = 1,
+ .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
- .range_start = 61441, .range_length = 659, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY,
- .glyph_id_start = 96, .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 50
+ .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
+ .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
@@ -3696,569 +4332,245 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
*----------------*/
-/*Pair left and right glyphs for kerning*/
-static const uint8_t kern_pair_glyph_ids[] =
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] =
{
- 9, 43,
- 9, 55,
- 9, 56,
- 9, 58,
- 17, 17,
- 17, 18,
- 17, 20,
- 17, 21,
- 17, 22,
- 17, 23,
- 17, 24,
- 17, 26,
- 18, 19,
- 18, 20,
- 18, 22,
- 18, 24,
- 19, 17,
- 19, 18,
- 19, 19,
- 19, 22,
- 19, 23,
- 19, 24,
- 19, 25,
- 19, 26,
- 20, 18,
- 20, 19,
- 20, 20,
- 20, 21,
- 20, 22,
- 20, 23,
- 20, 24,
- 20, 25,
- 20, 26,
- 21, 17,
- 21, 19,
- 21, 21,
- 21, 22,
- 21, 23,
- 21, 24,
- 21, 25,
- 22, 18,
- 22, 19,
- 22, 20,
- 22, 21,
- 22, 22,
- 22, 23,
- 22, 24,
- 22, 25,
- 22, 26,
- 23, 17,
- 23, 18,
- 23, 19,
- 23, 21,
- 23, 22,
- 23, 23,
- 23, 24,
- 23, 25,
- 24, 18,
- 24, 21,
- 24, 22,
- 24, 23,
- 24, 24,
- 24, 25,
- 24, 26,
- 25, 17,
- 25, 18,
- 25, 20,
- 25, 21,
- 25, 22,
- 25, 23,
- 26, 17,
- 26, 18,
- 26, 19,
- 26, 21,
- 26, 22,
- 26, 23,
- 26, 24,
- 26, 26,
- 34, 36,
- 34, 40,
- 34, 48,
- 34, 50,
- 34, 53,
- 34, 54,
- 34, 55,
- 34, 56,
- 34, 58,
- 34, 66,
- 34, 68,
- 34, 69,
- 34, 70,
- 34, 72,
- 34, 80,
- 34, 82,
- 34, 84,
- 34, 85,
- 34, 86,
- 34, 87,
- 34, 88,
- 34, 91,
- 35, 58,
- 35, 66,
- 35, 74,
- 35, 77,
- 35, 80,
- 35, 83,
- 35, 86,
- 35, 90,
- 36, 36,
- 36, 40,
- 36, 48,
- 36, 50,
- 36, 74,
- 36, 83,
- 36, 86,
- 36, 90,
- 36, 91,
- 37, 55,
- 37, 56,
- 37, 66,
- 37, 70,
- 37, 80,
- 37, 86,
- 38, 55,
- 38, 56,
- 38, 58,
- 38, 67,
- 38, 68,
- 38, 69,
- 38, 70,
- 38, 71,
- 38, 72,
- 38, 74,
- 38, 75,
- 38, 76,
- 38, 77,
- 38, 78,
- 38, 79,
- 38, 80,
- 38, 81,
- 38, 82,
- 38, 83,
- 38, 85,
- 38, 86,
- 38, 87,
- 38, 88,
- 38, 89,
- 38, 90,
- 38, 91,
- 39, 13,
- 39, 15,
- 39, 34,
- 39, 66,
- 39, 70,
- 39, 74,
- 39, 77,
- 39, 80,
- 39, 83,
- 39, 86,
- 39, 90,
- 40, 66,
- 40, 70,
- 40, 79,
- 40, 80,
- 40, 83,
- 40, 86,
- 40, 90,
- 41, 66,
- 41, 70,
- 41, 80,
- 41, 86,
- 41, 90,
- 42, 66,
- 42, 68,
- 42, 69,
- 42, 71,
- 42, 72,
- 42, 78,
- 42, 79,
- 42, 80,
- 42, 81,
- 42, 83,
- 42, 84,
- 42, 85,
- 42, 86,
- 42, 87,
- 42, 88,
- 42, 90,
- 43, 66,
- 43, 80,
- 44, 36,
- 44, 40,
- 44, 48,
- 44, 50,
- 44, 66,
- 44, 70,
- 44, 74,
- 44, 80,
- 44, 83,
- 44, 86,
- 44, 88,
- 44, 90,
- 45, 34,
- 45, 36,
- 45, 40,
- 45, 48,
- 45, 50,
- 45, 53,
- 45, 54,
- 45, 55,
- 45, 56,
- 45, 58,
- 45, 75,
- 45, 86,
- 45, 88,
- 45, 90,
- 46, 66,
- 46, 70,
- 46, 75,
- 46, 79,
- 46, 80,
- 46, 86,
- 46, 90,
- 47, 70,
- 47, 80,
- 47, 90,
- 48, 34,
- 48, 53,
- 48, 55,
- 48, 56,
- 48, 57,
- 48, 58,
- 48, 68,
- 48, 69,
- 48, 70,
- 48, 71,
- 48, 72,
- 48, 75,
- 48, 80,
- 48, 81,
- 48, 82,
- 48, 84,
- 48, 85,
- 48, 86,
- 48, 89,
- 48, 90,
- 48, 91,
- 49, 13,
- 49, 15,
- 49, 34,
- 49, 38,
- 49, 41,
- 49, 42,
- 49, 66,
- 49, 70,
- 49, 73,
- 49, 74,
- 49, 77,
- 49, 79,
- 49, 80,
- 49, 83,
- 49, 84,
- 49, 85,
- 49, 90,
- 50, 34,
- 50, 53,
- 50, 54,
- 50, 55,
- 50, 56,
- 50, 57,
- 50, 58,
- 50, 66,
- 50, 86,
- 51, 36,
- 51, 40,
- 51, 48,
- 51, 50,
- 51, 53,
- 51, 54,
- 51, 55,
- 51, 56,
- 51, 58,
- 51, 66,
- 51, 70,
- 51, 80,
- 51, 86,
- 51, 90,
- 52, 66,
- 52, 70,
- 52, 75,
- 52, 78,
- 52, 79,
- 52, 80,
- 52, 81,
- 52, 82,
- 52, 86,
- 52, 88,
- 52, 90,
- 53, 13,
- 53, 14,
- 53, 15,
- 53, 27,
- 53, 28,
- 53, 34,
- 53, 36,
- 53, 40,
- 53, 48,
- 53, 50,
- 53, 52,
- 53, 53,
- 53, 55,
- 53, 56,
- 53, 57,
- 53, 58,
- 53, 66,
- 53, 70,
- 53, 74,
- 53, 78,
- 53, 80,
- 53, 83,
- 53, 84,
- 53, 86,
- 53, 88,
- 53, 90,
- 53, 91,
- 54, 34,
- 54, 69,
- 54, 71,
- 54, 72,
- 54, 78,
- 54, 79,
- 54, 81,
- 54, 83,
- 54, 84,
- 54, 85,
- 54, 89,
- 54, 91,
- 55, 10,
- 55, 13,
- 55, 14,
- 55, 15,
- 55, 27,
- 55, 28,
- 55, 34,
- 55, 36,
- 55, 40,
- 55, 48,
- 55, 50,
- 55, 62,
- 55, 66,
- 55, 70,
- 55, 80,
- 55, 83,
- 55, 86,
- 55, 90,
- 55, 94,
- 56, 10,
- 56, 13,
- 56, 14,
- 56, 15,
- 56, 27,
- 56, 28,
- 56, 34,
- 56, 36,
- 56, 40,
- 56, 48,
- 56, 50,
- 56, 53,
- 56, 62,
- 56, 66,
- 56, 70,
- 56, 80,
- 56, 83,
- 56, 86,
- 56, 90,
- 56, 94,
- 57, 36,
- 57, 40,
- 57, 48,
- 57, 50,
- 57, 70,
- 57, 86,
- 57, 90,
- 58, 10,
- 58, 13,
- 58, 14,
- 58, 15,
- 58, 27,
- 58, 28,
- 58, 34,
- 58, 36,
- 58, 40,
- 58, 48,
- 58, 50,
- 58, 53,
- 58, 55,
- 58, 56,
- 58, 57,
- 58, 58,
- 58, 62,
- 58, 66,
- 58, 70,
- 58, 80,
- 58, 82,
- 58, 85,
- 58, 86,
- 58, 87,
- 58, 94,
- 59, 34,
- 59, 36,
- 59, 40,
- 59, 48,
- 59, 50,
- 59, 66,
- 59, 70,
- 59, 74,
- 59, 80,
- 59, 86,
- 59, 88,
- 59, 90,
- 60, 43,
- 67, 87,
- 67, 88,
- 67, 90,
- 70, 90,
- 71, 3,
- 71, 8,
- 71, 10,
- 71, 62,
- 71, 72,
- 71, 94,
- 76, 70,
- 80, 87,
- 80, 88,
- 80, 89,
- 80, 90,
- 81, 88,
- 83, 13,
- 83, 15,
- 83, 68,
- 83, 69,
- 83, 70,
- 83, 71,
- 83, 76,
- 83, 80,
- 83, 82,
- 83, 85,
- 83, 86,
- 83, 87,
- 83, 88,
- 83, 89,
- 83, 90,
- 83, 91,
- 87, 13,
- 87, 15,
- 87, 66,
- 87, 68,
- 87, 69,
- 87, 70,
- 87, 80,
- 87, 82,
- 88, 13,
- 88, 15,
- 88, 68,
- 88, 69,
- 88, 70,
- 88, 82,
- 89, 68,
- 89, 69,
- 89, 70,
- 89, 80,
- 89, 82,
- 90, 13,
- 90, 15,
- 90, 68,
- 90, 69,
- 90, 70,
- 90, 80,
- 90, 82,
- 91, 68,
- 91, 69,
- 91, 70,
- 91, 80,
- 92, 43
+ 0, 1, 0, 2, 0, 0, 0, 0,
+ 2, 3, 0, 0, 0, 4, 0, 4,
+ 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 7, 8, 9, 10, 11,
+ 0, 12, 12, 13, 14, 15, 12, 12,
+ 9, 16, 17, 18, 0, 19, 13, 20,
+ 21, 22, 23, 24, 25, 0, 0, 0,
+ 0, 0, 26, 27, 28, 0, 29, 30,
+ 0, 31, 0, 0, 32, 0, 31, 31,
+ 33, 27, 0, 34, 0, 35, 0, 36,
+ 37, 38, 36, 39, 40, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
};
-/* Kerning between the respective left and right glyphs
- * 4.4 format which needs to scaled with `kern_scale`*/
-static const int8_t kern_pair_values[] =
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] =
{
- -21, 9, 8, 10, 1, -8, -1, 1,
- -1, 1, -9, 1, -1, -1, -1, 0,
- -4, -4, 2, -3, -4, -5, -4, 0,
- -4, -1, 2, 3, 1, -1, -6, 1,
- 0, 1, -7, 7, 4, 1, -18, 4,
- -1, -5, 1, 4, 1, 0, -1, 1,
- -6, 0, -9, -5, 5, 2, 0, -9,
- 2, 8, -35, -7, -9, 8, -5, -2,
- 0, -5, 2, 4, 2, 0, 1, -8,
- -2, 1, -1, 1, -10, 1, -8, -9,
- -9, -9, -33, -10, -32, -22, -36, 1,
- -4, -6, -5, -3, -5, -3, 1, -14,
- -5, -18, -15, 5, -36, 2, -1, -1,
- 1, 0, 1, 1, -1, -1, -2, -1,
- -3, -1, -1, 2, -2, -9, -6, -1,
- 1, 1, 1, 4, 4, 4, -2, -8,
- -9, -9, -8, -7, -2, -2, -2, -2,
- -4, -4, -9, -3, -7, -3, -10, -7,
- -12, -10, 1, -11, 1, -67, -67, -26,
- -15, -10, -2, -2, -10, -12, -10, -11,
- 0, 1, 0, 0, 0, 0, 0, -1,
- -2, -2, -2, -1, -2, -2, -4, -3,
- -2, -2, -2, -3, -1, -2, -2, -2,
- -2, -1, -1, -1, -2, -2, -12, -13,
- -14, -13, -2, -12, -2, -12, -2, -10,
- -17, -18, 9, -9, -10, -11, -10, -34,
- -11, -40, -24, -39, 0, -6, -19, -24,
- -2, -2, -2, -2, -2, -2, -1, -2,
- -2, -1, -9, -12, -10, -5, -10, -13,
- 0, -1, 0, 0, 0, -2, 0, 0,
- 1, 0, 1, 0, -3, 2, -3, -73,
- -73, -24, -1, -1, -1, -5, -6, 0,
- -2, -1, -1, -6, -1, -3, 6, 7,
- 6, -15, -3, -12, -9, 5, -16, 0,
- -1, -2, -2, -3, -2, -9, -3, -9,
- -7, -21, -1, -3, -3, -2, 0, 0,
- -1, -2, -1, -1, -1, 0, 0, 0,
- 1, 1, -36, -35, -36, -34, -34, -35,
- -11, -12, -12, -12, -7, 7, 7, 7,
- 5, 7, -35, -35, -2, -29, -35, -29,
- -34, -29, -21, -22, -27, -10, -3, -1,
- -2, -2, -2, -2, -2, -3, 0, -3,
- -4, 9, -39, -16, -38, -14, -14, -33,
- -9, -9, -10, -9, 7, -21, -20, -21,
- -14, -13, -5, 8, 7, -26, -9, -26,
- -10, -10, -24, -6, -6, -7, -6, 6,
- 5, -15, -14, -14, -9, -9, -2, 6,
- -10, -10, -11, -10, -12, -10, -14, 9,
- -41, -23, -41, -19, -19, -37, -12, -12,
- -13, -12, 7, 8, 7, 6, 8, 8,
- -28, -29, -29, -27, -10, -17, -9, 9,
- 6, -10, -11, -12, -11, 0, -9, -2,
- -10, -8, -12, -12, -8, -5, -3, -5,
- -6, 6, 7, 9, 8, -11, 9, -9,
- -7, -4, -9, -7, -3, -28, -28, -8,
- -8, -8, 7, 0, -9, -8, 7, 0,
- 8, 8, 4, 8, 2, -26, -26, -7,
- -6, -6, -6, -7, -6, -21, -20, -4,
- -4, -5, -4, -9, -8, -9, -9, -8,
- -30, -28, -7, -7, -7, -7, -9, -7,
- -7, -7, -7, -9
+ 0, 1, 0, 2, 0, 0, 0, 3,
+ 2, 0, 4, 5, 0, 6, 7, 6,
+ 8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 10, 0, 11, 0, 0, 0,
+ 11, 0, 0, 12, 0, 0, 0, 0,
+ 11, 0, 11, 0, 13, 14, 15, 16,
+ 17, 18, 19, 20, 0, 0, 21, 0,
+ 0, 0, 22, 0, 23, 23, 23, 24,
+ 23, 0, 0, 0, 0, 0, 25, 25,
+ 26, 25, 23, 27, 28, 29, 30, 31,
+ 32, 33, 31, 34, 0, 0, 35, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
};
-/*Collect the kern pair's data in one place*/
-static const lv_font_fmt_txt_kern_pair_t kern_pairs =
+/*Kern values between classes*/
+static const int8_t kern_class_values[] =
{
- .glyph_ids = kern_pair_glyph_ids,
- .values = kern_pair_values,
- .pair_cnt = 484,
- .glyph_ids_size = 0
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -23, 0, 0, 0,
+ 0, 0, 0, 0, -26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -11, -13, 0, -4, -13, 0, -17, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -37, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -26, 0, 0, 0, 0, 0, 0, -13,
+ 0, -2, 0, 0, -28, -4, -19, -15,
+ 0, -21, 0, 0, 0, 0, 0, 0,
+ -3, 0, 0, -4, -2, -11, -7, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -6,
+ 0, -5, 0, 0, -12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -6, 0, 0, 0, 0, 0,
+ 0, -3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -4,
+ 0, 0, 0, 0, 0, -22, 0, 0,
+ 0, -5, 0, 0, 0, -6, 0, -5,
+ 0, -5, -9, -5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, -4, -4, 0, -4, 0, 0, 0,
+ -4, -6, -5, 0, 0, 0, 0, 0,
+ 0, 0, 0, -51, 0, 0, 0, -37,
+ 0, -58, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, -7, -5, 0, 0, -5,
+ -6, 0, 0, -5, -5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 0, 0, 0, -6, 0,
+ 0, 0, 4, -6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -14, 0, 0,
+ 0, -7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -6, 0, -5,
+ -6, 0, 0, 0, -5, -9, -14, 0,
+ 0, 0, 0, -73, 0, 0, 0, 0,
+ 0, 0, 0, 4, -14, 0, 0, -60,
+ -12, -38, -31, 0, -52, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -10,
+ -29, -20, 0, 0, 0, 0, 0, 0,
+ 0, 0, -71, 0, 0, 0, -30, 0,
+ -44, 0, 0, 0, 0, 0, -7, 0,
+ -6, 0, -2, -3, 0, 0, -3, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -9, 0, -6,
+ -4, 0, -8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -17, 0, -4, 0, 0, -10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -9, 0,
+ 0, 0, 0, -48, -51, 0, 0, -17,
+ -6, -52, -3, 4, 0, 4, 3, 0,
+ 4, 0, 0, -25, -22, 0, -24, -22,
+ -16, -25, 0, -21, -16, -12, -17, -13,
+ 0, 0, 0, 0, 4, 0, -49, -8,
+ 0, 0, -16, -3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, -10, -10,
+ 0, 0, -10, -7, 0, 0, -6, -2,
+ 0, 0, 0, 4, 0, 0, 0, 3,
+ 0, -27, -13, 0, 0, -9, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0,
+ 3, -7, -7, 0, 0, -7, -5, 0,
+ 0, -4, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, -10, 0, 0,
+ 0, -5, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, -6, 0, 0,
+ -5, 0, 0, 0, -5, -7, 0, 0,
+ 0, 0, 0, 0, -7, 4, -11, -46,
+ -11, 0, 0, -21, -6, -21, -3, 4,
+ -21, 4, 4, 3, 4, 0, 4, -16,
+ -14, -5, -9, -14, -9, -13, -5, -9,
+ -4, 0, -5, -7, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, -6,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -5, 0, 0, -5, 0,
+ 0, 0, -4, -6, -6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4, 0, 0, -4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -3, 0, 0, 0, 0, 0, -6,
+ 0, 0, 0, 0, 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, -3, -3,
+ 0, 0, -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, -3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -3, 0, 0, 0, 0, 0,
+ 4, 0, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, -5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 0, -23, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -30, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -3, 0,
+ -5, -3, 0, 0, 4, 0, 0, 0,
+ -27, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -9, -4, 3, 0, -4, 0, 0, 11,
+ 0, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -4,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, -23, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -3, -3,
+ 3, 0, -3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -27, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -4, 0, 0,
+ -4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -3, 0, 0, -3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -4, 0, 0, -4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes =
+{
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 40,
+ .right_class_cnt = 35,
};
/*--------------------
@@ -4270,12 +4582,12 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
-
- .kern_scale = 16,
- .kern_dsc = &kern_pairs,
- .kern_classes = 0
+ .kern_classes = 1,
+ .bitmap_format = 0
};
@@ -4285,11 +4597,13 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
/*Initialize a public general font descriptor*/
lv_font_t lv_font_roboto_28 = {
- .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
- .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
- .line_height = 31, /*The maximum line height required by the font*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
+ .line_height = 32, /*The maximum line height required by the font*/
.base_line = 7, /*Baseline measured from the bottom of the line*/
+ .subpx = LV_FONT_SUBPX_NONE,
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if LV_FONT_ROBOTO_28*/
+
diff --git a/src/lv_font/lv_font_roboto_28_compressed.c b/src/lv_font/lv_font_roboto_28_compressed.c
new file mode 100644
index 000000000..92e714793
--- /dev/null
+++ b/src/lv_font/lv_font_roboto_28_compressed.c
@@ -0,0 +1,2451 @@
+#include "../../lvgl.h"
+
+/*******************************************************************************
+ * Size: 28 px
+ * Bpp: 3
+ * Opts: --bpp 3 --size 28 --font Roboto-Regular.woff -r 0x20-0x7F --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_roboto_28_compressed.c --force-fast-kern-format
+ ******************************************************************************/
+
+#ifndef LV_FONT_ROBOTO_28_COMPRESSED
+#define LV_FONT_ROBOTO_28_COMPRESSED 1
+#endif
+
+#if LV_FONT_ROBOTO_28_COMPRESSED
+
+/*-----------------
+ * BITMAPS
+ *----------------*/
+
+/*Store the image of the glyphs*/
+static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
+ /* U+20 " " */
+
+ /* U+21 "!" */
+ 0xbf, 0x80, 0xff, 0xe3, 0x90, 0x38, 0x81, 0xff,
+ 0xcf, 0x9b, 0x80, 0x24, 0x7, 0x2d, 0x4, 0x2c,
+ 0xd0, 0x88,
+
+ /* U+22 "\"" */
+ 0x3f, 0x7, 0xd8, 0x1f, 0xcc, 0xf, 0xf1, 0x0,
+ 0x40, 0xf7, 0x2, 0x65, 0x10, 0x51,
+
+ /* U+23 "#" */
+ 0x3, 0xef, 0xc0, 0x53, 0xb0, 0x3f, 0x20, 0x80,
+ 0x88, 0x20, 0x7e, 0x20, 0x81, 0x20, 0x80, 0xfd,
+ 0x86, 0x3, 0xff, 0x84, 0xc3, 0x0, 0x82, 0x3,
+ 0xf8, 0x82, 0x0, 0x82, 0x7, 0x7f, 0x80, 0x7f,
+ 0x40, 0xff, 0x10, 0x3f, 0xf8, 0xff, 0xcc, 0x5f,
+ 0xe0, 0x1f, 0xc4, 0xe, 0x41, 0x0, 0x41, 0x1,
+ 0xfc, 0x40, 0xc4, 0x60, 0x3f, 0x20, 0x80, 0xb0,
+ 0x40, 0x77, 0xf5, 0xb, 0xf9, 0xd, 0xf8, 0x81,
+ 0xff, 0xc7, 0xfe, 0x23, 0xfa, 0x85, 0xfc, 0x40,
+ 0xe2, 0x6, 0x23, 0x1, 0xf8, 0x84, 0x5, 0x81,
+ 0x3, 0xf2, 0x4, 0x9, 0x86, 0x7, 0xee, 0x30,
+ 0x11, 0x4, 0xf, 0xc8, 0x30, 0x4, 0x10, 0x3c,
+
+ /* U+24 "$" */
+ 0x3, 0xdb, 0x90, 0x3f, 0xfb, 0x33, 0x91, 0xa9,
+ 0x3, 0x8f, 0x60, 0x65, 0x98, 0x1b, 0x0, 0x9b,
+ 0x20, 0x8, 0x40, 0x30, 0x15, 0x92, 0x74, 0x5,
+ 0x1, 0x80, 0x20, 0x32, 0x21, 0x81, 0x88, 0x1e,
+ 0x40, 0x62, 0x8, 0x1e, 0xb6, 0x1, 0x80, 0x50,
+ 0x38, 0xa4, 0x0, 0x88, 0x59, 0x81, 0xfd, 0x88,
+ 0x33, 0xd2, 0x7, 0xda, 0x10, 0xb, 0x50, 0x3e,
+ 0x7b, 0x18, 0x5, 0xc0, 0xfc, 0x67, 0x40, 0x28,
+ 0x1f, 0xea, 0x82, 0xa, 0xd0, 0x1f, 0x60, 0x4,
+ 0x92, 0x10, 0x3c, 0x40, 0x90, 0xa, 0x7, 0xb8,
+ 0x2, 0x60, 0xd8, 0xd, 0x10, 0x40, 0x38, 0x9,
+ 0xf6, 0x76, 0x2, 0x80, 0x39, 0x0, 0x24, 0x1,
+ 0x70, 0x31, 0xbe, 0x0, 0xbe, 0x81, 0xf9, 0x80,
+ 0x40, 0x7f, 0xf1, 0xc0,
+
+ /* U+25 "%" */
+ 0x0, 0xf7, 0xcc, 0xf, 0xfe, 0xd, 0x85, 0x19,
+ 0x40, 0xff, 0x92, 0x1f, 0x79, 0x48, 0x6, 0x84,
+ 0xd, 0x85, 0x2, 0xa3, 0x1, 0x36, 0xa0, 0x78,
+ 0x81, 0x10, 0x31, 0x86, 0x1, 0xe2, 0x7, 0xe8,
+ 0x20, 0x1d, 0x85, 0x2, 0x83, 0x6, 0x94, 0x7,
+ 0x24, 0x3e, 0xe2, 0x90, 0x41, 0x40, 0xfa, 0xc2,
+ 0x8c, 0xa2, 0x8a, 0x7, 0xf3, 0xdf, 0x98, 0x4b,
+ 0x1, 0xff, 0xc3, 0xa2, 0x81, 0xff, 0xc3, 0x82,
+ 0x0, 0xbf, 0xb2, 0x3, 0xf1, 0x65, 0x8e, 0x8a,
+ 0x35, 0x81, 0xf7, 0x1c, 0x40, 0xf5, 0xc2, 0x1,
+ 0xe8, 0x59, 0x8, 0x40, 0x5, 0x4, 0x6, 0x2c,
+ 0xc0, 0x4, 0xe, 0x20, 0x7b, 0x8e, 0x4, 0x40,
+ 0xe2, 0x7, 0xcc, 0x81, 0x21, 0x0, 0x14, 0x10,
+ 0x1b, 0x40, 0x34, 0xf, 0x5c, 0x20, 0x1f, 0xfc,
+ 0xe, 0x8a, 0x35, 0x80,
+
+ /* U+26 "&" */
+ 0x3, 0x3d, 0xfb, 0x30, 0x3f, 0xda, 0x10, 0x6,
+ 0x50, 0x3f, 0x42, 0x1e, 0xc6, 0x12, 0x1, 0xf2,
+ 0x6, 0x12, 0x84, 0x70, 0x3e, 0x21, 0x1, 0x98,
+ 0x1f, 0xf1, 0x3, 0x21, 0x80, 0xf9, 0x84, 0x40,
+ 0x60, 0xc, 0xf, 0xa8, 0xe, 0xb9, 0x18, 0xf,
+ 0xc6, 0x3, 0x41, 0xe4, 0xf, 0xe4, 0x4, 0x70,
+ 0x1f, 0xe7, 0x80, 0x8a, 0x3, 0x12, 0x2, 0x70,
+ 0x2c, 0x45, 0x20, 0xe, 0xc0, 0x28, 0xd, 0x38,
+ 0x8c, 0x43, 0x3, 0x30, 0x1c, 0xb, 0x80, 0xe3,
+ 0x2, 0x3, 0x80, 0x20, 0x46, 0x83, 0x98, 0x40,
+ 0x7f, 0x95, 0x4, 0x4, 0x1, 0x80, 0x40, 0x39,
+ 0x10, 0x8, 0x9, 0x20, 0x74, 0x80, 0x58, 0x80,
+ 0x48, 0x5, 0x50, 0x5b, 0xf5, 0x21, 0x91, 0x48,
+ 0x15, 0xa4, 0x4, 0x5e, 0x9c, 0x7, 0x0,
+
+ /* U+27 "'" */
+ 0x9d, 0x81, 0xf8, 0x81, 0xcf, 0x32,
+
+ /* U+28 "(" */
+ 0x3, 0xe2, 0x7, 0xd7, 0x81, 0xea, 0x98, 0x1d,
+ 0x11, 0xa0, 0x64, 0xc6, 0x3, 0xa0, 0x80, 0x73,
+ 0x21, 0x81, 0xd4, 0x30, 0x38, 0x90, 0xa0, 0x72,
+ 0x0, 0x40, 0xec, 0x10, 0x1e, 0x40, 0x81, 0xfb,
+ 0x81, 0xc4, 0xf, 0xf8, 0x81, 0xff, 0xc5, 0x20,
+ 0x71, 0x3, 0xfe, 0xe0, 0x79, 0x2, 0x7, 0xb0,
+ 0x40, 0x79, 0x0, 0x20, 0x71, 0x21, 0x40, 0xf5,
+ 0xc, 0xf, 0x32, 0x18, 0x1e, 0x82, 0x1, 0xe4,
+ 0xc5, 0x3, 0xd1, 0x25, 0x3, 0xd5, 0x30, 0x3e,
+ 0xbc, 0x0,
+
+ /* U+29 ")" */
+ 0x3, 0xf2, 0xe8, 0xe, 0x62, 0xa0, 0x31, 0xc2,
+ 0x90, 0x31, 0x63, 0x81, 0xd0, 0x16, 0x7, 0x41,
+ 0x0, 0xe6, 0x1, 0x81, 0xc8, 0x60, 0x3b, 0x4,
+ 0x7, 0x20, 0x8, 0xc, 0x40, 0x10, 0x3e, 0xe0,
+ 0x71, 0x4, 0xf, 0xfe, 0x89, 0x4, 0xf, 0xb8,
+ 0x18, 0x80, 0x20, 0x64, 0x1, 0x1, 0xb0, 0x40,
+ 0x72, 0x18, 0xc, 0x80, 0x30, 0x34, 0x10, 0xc,
+ 0xc9, 0x30, 0x23, 0x7, 0x2, 0x38, 0x52, 0x4,
+ 0xc5, 0x40, 0x65, 0x90, 0x1c,
+
+ /* U+2A "*" */
+ 0x3, 0xbf, 0x1, 0xff, 0xd2, 0xa8, 0xf, 0x18,
+ 0x1a, 0xbe, 0x0, 0x7b, 0x1b, 0x26, 0x43, 0x1,
+ 0x8, 0x44, 0xa6, 0xc2, 0x0, 0xdf, 0x50, 0x13,
+ 0x20, 0xb, 0x3, 0xd4, 0x58, 0x38, 0x1d, 0x42,
+ 0x46, 0x4a, 0x1, 0xea, 0x3, 0x82, 0x6, 0xb8,
+ 0x8, 0xda, 0x0,
+
+ /* U+2B "+" */
+ 0x3, 0x8b, 0x60, 0x3f, 0xe5, 0x20, 0x81, 0xff,
+ 0xf1, 0x4d, 0xee, 0x1, 0x37, 0x95, 0x93, 0x30,
+ 0x12, 0x77, 0x3, 0xff, 0x85, 0xff, 0x40, 0x1b,
+ 0xfd, 0x40, 0xff, 0xfd, 0x0,
+
+ /* U+2C "," */
+ 0xb, 0xf1, 0x3, 0xfe, 0x20, 0x8, 0xa1, 0x84,
+ 0x44, 0x9, 0x28, 0x0,
+
+ /* U+2D "-" */
+ 0x3, 0xf4, 0xff, 0xc4, 0xf, 0xc0,
+
+ /* U+2E "." */
+ 0x13, 0xd0, 0xc, 0x20, 0xc, 0x20,
+
+ /* U+2F "/" */
+ 0x3, 0xf5, 0xf0, 0xf, 0xc8, 0x50, 0x3e, 0x60,
+ 0x90, 0x1f, 0x51, 0x0, 0xf8, 0x90, 0x40, 0x7d,
+ 0x43, 0x3, 0xf3, 0x14, 0xf, 0x90, 0x24, 0x7,
+ 0xdc, 0x50, 0x3f, 0x20, 0xc0, 0xf9, 0x84, 0x7,
+ 0xe8, 0x38, 0x1f, 0x20, 0x8, 0xf, 0xb8, 0x60,
+ 0x7e, 0x42, 0x81, 0xf3, 0x8, 0x81, 0xf5, 0x1c,
+ 0xf, 0x89, 0x4, 0x7, 0xd4, 0x30, 0x3f, 0x31,
+ 0x40, 0xf9, 0x2, 0x40, 0x7e, 0x70, 0xf, 0xc0,
+
+ /* U+30 "0" */
+ 0x2, 0x33, 0x7e, 0xd0, 0xf, 0x2c, 0xc8, 0x2,
+ 0xf9, 0x2, 0x34, 0x1b, 0xf4, 0x1, 0xc0, 0xa0,
+ 0xc, 0x81, 0x74, 0x14, 0x1, 0x6, 0x7, 0x22,
+ 0x38, 0x20, 0x30, 0x1e, 0x41, 0x6, 0x1, 0x81,
+ 0xee, 0x4, 0x40, 0xff, 0xe2, 0x10, 0x3f, 0x88,
+ 0x1f, 0xfd, 0xe2, 0x0, 0x81, 0xfc, 0x40, 0xff,
+ 0xe1, 0x30, 0xc, 0xf, 0x70, 0x22, 0x3, 0x1,
+ 0xe6, 0x10, 0x6, 0x19, 0x3, 0x20, 0x1c, 0x5,
+ 0x1, 0x90, 0x7, 0x41, 0x40, 0xd, 0x1, 0x7f,
+ 0x40, 0x1c, 0xc, 0xb3, 0x20, 0xb, 0xe4, 0x0,
+
+ /* U+31 "1" */
+ 0x3, 0x8c, 0xe0, 0x4f, 0x63, 0xa, 0xf8, 0x40,
+ 0xba, 0x6, 0x20, 0x5, 0xec, 0x64, 0x4, 0x82,
+ 0x7, 0xff, 0xfc, 0xf, 0xfe, 0xf0,
+
+ /* U+32 "2" */
+ 0x2, 0x57, 0xfb, 0x40, 0x3d, 0x69, 0x1, 0x17,
+ 0xc8, 0x15, 0x41, 0x6f, 0x98, 0xc, 0x0, 0xa0,
+ 0xe9, 0x6, 0x40, 0x6, 0x28, 0x8, 0x7, 0x30,
+ 0x18, 0x10, 0x3f, 0x88, 0x62, 0xfe, 0x3, 0xe2,
+ 0x10, 0x1f, 0xe2, 0x3, 0x1, 0xfe, 0xe0, 0xa0,
+ 0x3f, 0xa1, 0x1c, 0xf, 0xe4, 0xc4, 0x20, 0x7e,
+ 0x54, 0x26, 0x7, 0xe3, 0x42, 0xa0, 0x7e, 0x38,
+ 0x1a, 0x7, 0xf6, 0x7, 0x1, 0xfd, 0x81, 0xc0,
+ 0x7f, 0x62, 0x38, 0x1f, 0xd4, 0x8c, 0x40, 0xfc,
+ 0x90, 0x6, 0xff, 0xf5, 0x3, 0xff, 0x84,
+
+ /* U+33 "3" */
+ 0x2, 0x57, 0xfb, 0x30, 0x3a, 0xd2, 0x2, 0x33,
+ 0x1, 0x44, 0x15, 0xf9, 0x83, 0x81, 0x61, 0x54,
+ 0xc, 0x80, 0x52, 0x0, 0x80, 0x73, 0x1, 0x94,
+ 0x82, 0x7, 0xf1, 0x6c, 0x7, 0xf7, 0x3, 0xfa,
+ 0x0, 0x60, 0x7c, 0xab, 0x10, 0xe, 0xbf, 0xaa,
+ 0x15, 0x81, 0xff, 0x70, 0x3d, 0x7f, 0x66, 0x16,
+ 0x3, 0xf1, 0x98, 0x16, 0x7, 0xf1, 0x21, 0x4a,
+ 0x40, 0x3e, 0x60, 0xcb, 0x40, 0x7c, 0xc1, 0xc0,
+ 0x18, 0x1c, 0x88, 0x4c, 0x89, 0x4, 0x17, 0x40,
+ 0x41, 0x88, 0x7b, 0xe8, 0x3, 0x1, 0x68, 0x80,
+ 0x8c, 0xe4, 0x0,
+
+ /* U+34 "4" */
+ 0x3, 0xfa, 0xfe, 0x40, 0x7f, 0xc9, 0x0, 0xff,
+ 0xe1, 0x50, 0x3f, 0xf8, 0x54, 0xf, 0xfe, 0x12,
+ 0x41, 0x40, 0xff, 0xe0, 0x51, 0x18, 0x1f, 0xf5,
+ 0x5, 0x81, 0xff, 0x24, 0x1c, 0xf, 0xfe, 0x5,
+ 0xc, 0x81, 0xff, 0x40, 0x60, 0x1f, 0xf2, 0x63,
+ 0x81, 0xff, 0xc0, 0xa1, 0x90, 0x3f, 0xe8, 0xc,
+ 0x3, 0xfe, 0x2c, 0x1f, 0xfb, 0x0, 0xbf, 0x83,
+ 0x3, 0xff, 0x86, 0xbf, 0xfd, 0x80, 0x5f, 0xc0,
+ 0x7f, 0xfd, 0x40,
+
+ /* U+35 "5" */
+ 0x7, 0xff, 0xf0, 0x6, 0x7, 0xff, 0x0, 0x80,
+ 0xb7, 0xf0, 0xe, 0xa, 0x5f, 0x80, 0x10, 0xc0,
+ 0xff, 0xe0, 0x10, 0x3f, 0xcc, 0x70, 0x4c, 0x7,
+ 0x88, 0xdf, 0x6b, 0xc0, 0x3c, 0x80, 0xe7, 0x80,
+ 0xe3, 0xbf, 0x52, 0xd, 0x1, 0xf6, 0x10, 0xb,
+ 0x10, 0x88, 0x2, 0x7, 0xa0, 0x4, 0x7, 0xf2,
+ 0x1, 0xc0, 0xff, 0xe0, 0xb8, 0x80, 0xff, 0x67,
+ 0x0, 0xf2, 0x1, 0xb0, 0x14, 0x7, 0x40, 0x9,
+ 0x91, 0x59, 0x6, 0x91, 0x0, 0x72, 0x26, 0xf9,
+ 0x4, 0xc0, 0x1d, 0x8, 0x12, 0xb4, 0x0,
+
+ /* U+36 "6" */
+ 0x3, 0xca, 0xef, 0x0, 0xf9, 0x7a, 0x88, 0x1f,
+ 0x9d, 0x0, 0xae, 0x80, 0x72, 0x80, 0xea, 0x88,
+ 0x1e, 0x80, 0xe2, 0x7, 0xe4, 0x44, 0x3, 0xfd,
+ 0x81, 0x40, 0x7f, 0x90, 0x46, 0xff, 0x64, 0x6,
+ 0x21, 0x64, 0x4, 0x6c, 0x3, 0x88, 0x9b, 0xd2,
+ 0x1a, 0x4, 0xb, 0x32, 0x16, 0x1, 0x0, 0xd0,
+ 0x81, 0xd0, 0x12, 0x2, 0x20, 0x78, 0x80, 0x60,
+ 0x44, 0xf, 0x30, 0x22, 0x3, 0x81, 0xe6, 0x6,
+ 0x41, 0x81, 0xec, 0x1, 0xe, 0x2, 0x1, 0xcc,
+ 0x20, 0x9, 0x3, 0x84, 0x2c, 0x2, 0x1, 0x54,
+ 0x1e, 0xf4, 0x8a, 0x40, 0xd6, 0x88, 0x2, 0xf2,
+ 0x0,
+
+ /* U+37 "7" */
+ 0xff, 0xff, 0x83, 0x0, 0xff, 0xe0, 0xff, 0xff,
+ 0x40, 0xc, 0xf, 0xf5, 0xc, 0xf, 0xf2, 0x22,
+ 0x81, 0xfe, 0xe1, 0x10, 0x3f, 0x8a, 0x10, 0xf,
+ 0xf4, 0x4, 0x80, 0xfe, 0x28, 0x40, 0x3f, 0xd4,
+ 0x2, 0x3, 0xfc, 0xc4, 0x3, 0xfc, 0xc0, 0x30,
+ 0x3f, 0xd0, 0x30, 0x3f, 0xcc, 0x5, 0x3, 0xfd,
+ 0x42, 0x20, 0x7f, 0x22, 0x38, 0x1f, 0xe8, 0xa,
+ 0x3, 0xf8, 0x90, 0x80, 0x7f, 0xa0, 0x4, 0x7,
+ 0xf1, 0x42, 0x1, 0xf8,
+
+ /* U+38 "8" */
+ 0x2, 0x33, 0x7e, 0xcc, 0xf, 0x3c, 0xc8, 0x3,
+ 0x39, 0x2, 0x30, 0x5, 0xd8, 0xc0, 0x60, 0x28,
+ 0x3, 0x22, 0x52, 0x0, 0x30, 0x8, 0x22, 0x6,
+ 0x60, 0x30, 0x18, 0x81, 0xe2, 0x6, 0x20, 0x81,
+ 0xe2, 0x8, 0x4, 0x11, 0x3, 0x30, 0x14, 0x4,
+ 0x23, 0x22, 0x52, 0x3, 0x20, 0x59, 0xb, 0xb1,
+ 0x87, 0x0, 0xc9, 0x81, 0xe2, 0x6, 0x54, 0xad,
+ 0xfa, 0x85, 0x80, 0xa8, 0x54, 0x80, 0x5c, 0x1a,
+ 0x10, 0x8, 0x7, 0x98, 0x40, 0x80, 0x20, 0x7b,
+ 0x0, 0x20, 0x44, 0xf, 0x10, 0x5, 0x0, 0x80,
+ 0x7a, 0x2, 0xa, 0xa, 0xa0, 0x56, 0x1, 0x0,
+ 0x54, 0x15, 0xfa, 0x91, 0x10, 0x15, 0xa4, 0x4,
+ 0x5e, 0x60, 0x0,
+
+ /* U+39 "9" */
+ 0x2, 0x57, 0xfa, 0x90, 0x3a, 0x54, 0x4, 0xb4,
+ 0x2, 0x6c, 0x15, 0xf4, 0x86, 0xc0, 0x20, 0x35,
+ 0x5, 0x88, 0x81, 0x0, 0xe0, 0x77, 0x0, 0xb0,
+ 0x2, 0x7, 0x10, 0x18, 0xf, 0xf2, 0x8, 0xf,
+ 0xfe, 0xf, 0x0, 0x40, 0xfc, 0x58, 0x8, 0x7,
+ 0x34, 0x8, 0x41, 0x52, 0xc, 0x80, 0x35, 0x21,
+ 0x6f, 0x99, 0x20, 0xc0, 0x66, 0x4, 0x66, 0x0,
+ 0x40, 0xa7, 0xf6, 0x60, 0x8c, 0x7, 0xf2, 0x0,
+ 0x80, 0xfe, 0xa1, 0x1, 0xf8, 0xe0, 0x10, 0xe,
+ 0x2a, 0x62, 0x29, 0x3, 0x6c, 0xac, 0x1a, 0x80,
+ 0xf8, 0xab, 0x90, 0x10,
+
+ /* U+3A ":" */
+ 0x17, 0xc0, 0x83, 0x8, 0x31, 0x7c, 0x3, 0xff,
+ 0xab, 0x7c, 0x28, 0x32, 0x83,
+
+ /* U+3B ";" */
+ 0x7, 0x74, 0x11, 0x18, 0x22, 0x30, 0x3b, 0xa0,
+ 0x3f, 0xfb, 0xdf, 0x98, 0x1e, 0x20, 0x8, 0x60,
+ 0x18, 0xe0, 0x99, 0xe, 0xb, 0x84, 0x0,
+
+ /* U+3C "<" */
+ 0x3, 0xfc, 0x69, 0x3, 0xf2, 0xb9, 0x1, 0xf2,
+ 0xd5, 0x1, 0xf3, 0xd4, 0x83, 0x39, 0x0, 0xfc,
+ 0x21, 0x6c, 0x60, 0x5e, 0x3, 0x3d, 0x20, 0x7e,
+ 0xac, 0xf, 0xd0, 0x89, 0xe1, 0x3, 0xcf, 0x52,
+ 0x1e, 0xc6, 0x7, 0x96, 0xa8, 0x19, 0xe0, 0x1e,
+ 0x57, 0x20, 0xc, 0x81, 0xf1, 0xb9, 0x81, 0xff,
+ 0x19, 0xc8,
+
+ /* U+3D "=" */
+ 0xff, 0xfe, 0x60, 0x7f, 0xf0, 0x36, 0xff, 0x99,
+ 0x3f, 0xf0, 0x1f, 0xfc, 0x12, 0x7f, 0xe1, 0xb7,
+ 0xfc, 0xc0, 0xff, 0xe0, 0x0,
+
+ /* U+3E ">" */
+ 0x34, 0x81, 0xff, 0x2d, 0x88, 0xf, 0xc4, 0x1,
+ 0xbd, 0x81, 0xf7, 0xa8, 0x4, 0xf0, 0x81, 0xca,
+ 0xf8, 0x43, 0xd5, 0x1, 0xe7, 0xb1, 0x85, 0x58,
+ 0x1f, 0x1c, 0x80, 0x70, 0x38, 0xcf, 0x50, 0x74,
+ 0x9, 0x5c, 0xc0, 0x3f, 0x8, 0x9e, 0xa0, 0x67,
+ 0x80, 0x45, 0x80, 0x57, 0x30, 0x3e, 0x7a, 0xa0,
+ 0x3e, 0x3e, 0x10, 0x3f, 0x80,
+
+ /* U+3F "?" */
+ 0x0, 0x6f, 0xf6, 0x60, 0x69, 0x90, 0x11, 0x94,
+ 0x2, 0x60, 0xcd, 0x48, 0x50, 0x70, 0x19, 0x95,
+ 0x88, 0x61, 0x96, 0x7, 0x20, 0x2d, 0x90, 0xe,
+ 0xe0, 0x7f, 0xd8, 0xf, 0xf2, 0x41, 0x0, 0xf8,
+ 0xd0, 0x58, 0x1e, 0x38, 0x7, 0x3, 0xec, 0x3,
+ 0x10, 0x3d, 0x0, 0x62, 0x7, 0xcc, 0x22, 0x7,
+ 0xfb, 0x1, 0xfd, 0x69, 0x1, 0xfc, 0x90, 0x81,
+ 0xff, 0xc9, 0xb9, 0x1, 0xf8, 0xa3, 0xc0, 0xfc,
+ 0x48, 0x60, 0x38,
+
+ /* U+40 "@" */
+ 0x3, 0xf2, 0xbb, 0xfb, 0x42, 0x7, 0xff, 0x1,
+ 0x7a, 0x89, 0x81, 0x7a, 0x90, 0x3f, 0xad, 0x7,
+ 0xbe, 0xcf, 0xd5, 0x26, 0x40, 0x7d, 0x51, 0xd0,
+ 0x81, 0xca, 0xd0, 0xa4, 0xe, 0x89, 0x31, 0x3,
+ 0xf9, 0x61, 0xc0, 0xc9, 0x8a, 0x7, 0xff, 0x0,
+ 0xc2, 0xc0, 0xa0, 0xa0, 0x71, 0x96, 0x98, 0x19,
+ 0x8a, 0x0, 0x99, 0x1, 0xa6, 0x69, 0x26, 0x20,
+ 0x4c, 0x90, 0xa2, 0x81, 0x9b, 0xb, 0xf1, 0x26,
+ 0x5, 0x82, 0x8, 0x20, 0x23, 0x6, 0x40, 0x80,
+ 0x60, 0x4c, 0x70, 0x41, 0x2, 0xa1, 0x90, 0x22,
+ 0x8, 0x11, 0x4, 0x82, 0x3, 0x31, 0x40, 0xff,
+ 0xe0, 0xb0, 0x38, 0x80, 0x20, 0x7f, 0xf0, 0x48,
+ 0x20, 0x48, 0x10, 0x31, 0x4, 0xc, 0x40, 0xfd,
+ 0xc3, 0x3, 0x30, 0xc0, 0xcc, 0x12, 0x3, 0xff,
+ 0x80, 0x40, 0xf1, 0x18, 0x1, 0x2, 0xe1, 0x1,
+ 0xa0, 0x1e, 0x81, 0x20, 0x40, 0x48, 0x3, 0x1,
+ 0x40, 0x20, 0x28, 0x20, 0x2, 0x8, 0x2, 0x84,
+ 0xfc, 0xb1, 0x1a, 0xe6, 0x98, 0xa, 0x28, 0x15,
+ 0x60, 0x16, 0x39, 0x14, 0x25, 0x2, 0x61, 0x90,
+ 0x29, 0xfa, 0x90, 0x17, 0xf6, 0x60, 0x73, 0x1c,
+ 0xf, 0xfe, 0x44, 0x25, 0x40, 0xff, 0xe4, 0x62,
+ 0xbb, 0x20, 0x72, 0x80, 0x7f, 0xda, 0x9, 0xb5,
+ 0x77, 0xac, 0x81, 0xff, 0x3f, 0x10, 0x28, 0x93,
+ 0xc4, 0xf, 0x0,
+
+ /* U+41 "A" */
+ 0x3, 0xe3, 0xf9, 0x81, 0xff, 0xc2, 0xa0, 0x28,
+ 0x1f, 0xfc, 0x26, 0x0, 0x90, 0x1f, 0xfc, 0x4,
+ 0x0, 0x8a, 0x7, 0xff, 0x3, 0x85, 0x43, 0x3,
+ 0xff, 0x80, 0x87, 0x60, 0x10, 0x1f, 0xe6, 0x1,
+ 0x4, 0x20, 0x1f, 0xea, 0x10, 0xe, 0x9, 0x1,
+ 0xf8, 0x90, 0xe0, 0x10, 0xa, 0x7, 0xea, 0x1,
+ 0x1, 0x20, 0xc0, 0xfc, 0xc3, 0x3, 0x70, 0x8,
+ 0xf, 0x30, 0x14, 0xc, 0x80, 0x70, 0x3d, 0x40,
+ 0x89, 0xe4, 0x10, 0x1c, 0x48, 0x6, 0xde, 0x40,
+ 0x18, 0x1a, 0x81, 0xff, 0xc0, 0xa0, 0x66, 0xf,
+ 0xff, 0x98, 0x24, 0x1, 0x0, 0xa0, 0x7e, 0xa0,
+ 0x28, 0xe, 0x1, 0x81, 0xf8, 0x90, 0x60, 0x10,
+ 0x40, 0x7f, 0xa0, 0x4, 0xc0, 0x70, 0x3f, 0xc8,
+ 0x7,
+
+ /* U+42 "B" */
+ 0xbf, 0xfd, 0xaa, 0x3, 0xfe, 0x2a, 0xd0, 0x1d,
+ 0xb7, 0x52, 0x14, 0x3, 0x13, 0xcb, 0x10, 0xc0,
+ 0xff, 0xa8, 0x2, 0x7, 0xf8, 0x80, 0x60, 0x7f,
+ 0x88, 0x6, 0x7, 0xfa, 0x2, 0x40, 0x7c, 0x5f,
+ 0x1, 0xc0, 0xdf, 0xed, 0x1, 0xc4, 0xf, 0xf8,
+ 0xc0, 0x3b, 0xff, 0x40, 0xb0, 0x1f, 0xe7, 0x41,
+ 0x60, 0x7f, 0x90, 0xc, 0x7, 0xfc, 0x43, 0x3,
+ 0xfe, 0x20, 0x7f, 0xf0, 0x20, 0xa, 0x4, 0x4f,
+ 0x2a, 0xc0, 0x30, 0x2d, 0xba, 0xa0, 0x18, 0xf,
+ 0xf2, 0x9c, 0x80,
+
+ /* U+43 "C" */
+ 0x3, 0x9d, 0xfe, 0xd0, 0xf, 0x8e, 0x88, 0x8,
+ 0xbe, 0xc0, 0xc7, 0x10, 0xee, 0xc8, 0x2, 0x30,
+ 0x2e, 0x3, 0x44, 0x49, 0xf0, 0x10, 0x3, 0x22,
+ 0x90, 0x3d, 0x40, 0x31, 0x41, 0x40, 0x7c, 0x80,
+ 0x50, 0x42, 0x3, 0xfa, 0x3a, 0x80, 0x60, 0x3f,
+ 0x9c, 0x60, 0x7f, 0xf1, 0x8, 0x1f, 0xfd, 0x32,
+ 0x7, 0xff, 0x4d, 0x0, 0xc0, 0x7f, 0x26, 0xc0,
+ 0x84, 0x7, 0xf5, 0x94, 0x50, 0x50, 0x1f, 0x20,
+ 0x14, 0x30, 0x14, 0x81, 0xe8, 0x1, 0x80, 0xa0,
+ 0x34, 0x26, 0x7c, 0x88, 0x4, 0xa8, 0x7, 0xb5,
+ 0x0, 0x46, 0x6, 0x5e, 0x10, 0x22, 0xfb, 0x0,
+
+ /* U+44 "D" */
+ 0xbf, 0xfb, 0x54, 0x7, 0xff, 0x0, 0xab, 0x88,
+ 0x1e, 0xdb, 0x54, 0xe, 0x20, 0x71, 0x39, 0x5c,
+ 0x3, 0x1, 0xff, 0x1c, 0x2, 0x1, 0xff, 0x14,
+ 0x18, 0x1f, 0xfc, 0xe, 0x1, 0x1, 0xff, 0x20,
+ 0x18, 0xf, 0xfe, 0x11, 0x3, 0xff, 0xde, 0x40,
+ 0xff, 0x90, 0xc, 0x7, 0xfd, 0xc0, 0x20, 0x3f,
+ 0xc9, 0x3, 0x3, 0xfc, 0xa8, 0x8, 0x6, 0x27,
+ 0x2b, 0x40, 0x30, 0x1d, 0xb6, 0xa8, 0x1c, 0x40,
+ 0xfe, 0x2e, 0xe2, 0x4,
+
+ /* U+45 "E" */
+ 0xbf, 0xff, 0xd8, 0xf, 0xfe, 0x26, 0xdf, 0xdc,
+ 0x8, 0x9f, 0xf0, 0x1f, 0xfe, 0xb2, 0x7f, 0x1,
+ 0xdb, 0x7e, 0x80, 0x7f, 0xf1, 0x7f, 0xfd, 0x0,
+ 0xff, 0xfc, 0x93, 0xfe, 0x2, 0xdb, 0xfc, 0x7,
+ 0xff, 0x4,
+
+ /* U+46 "F" */
+ 0xbf, 0xff, 0xd4, 0xf, 0xfe, 0x26, 0xdf, 0xd4,
+ 0x8, 0x9f, 0xe0, 0x3f, 0xff, 0x3f, 0xfe, 0x40,
+ 0x7f, 0xf1, 0x76, 0xfc, 0x80, 0xc4, 0xfe, 0x3,
+ 0xff, 0xfe, 0x7, 0xff, 0x18,
+
+ /* U+47 "G" */
+ 0x3, 0x9d, 0xfe, 0xd0, 0x81, 0xf2, 0xf1, 0x1,
+ 0x17, 0xa0, 0x1c, 0xa8, 0x7, 0x76, 0x42, 0x1c,
+ 0x3, 0x50, 0x1a, 0x22, 0x4f, 0x10, 0xc8, 0x6,
+ 0x2, 0x90, 0x3d, 0xc0, 0x40, 0x14, 0x2, 0x3,
+ 0xe2, 0x83, 0x0, 0x43, 0x3, 0xfa, 0xfc, 0x8,
+ 0xe, 0x7, 0xff, 0x5, 0x80, 0x20, 0x7f, 0xf2,
+ 0x89, 0xf8, 0xf, 0xe3, 0xb7, 0xc0, 0x7f, 0xf1,
+ 0x98, 0x2, 0x6, 0x3f, 0xe6, 0x4, 0x40, 0x60,
+ 0x3f, 0xf8, 0x48, 0x20, 0x3f, 0xf8, 0x5c, 0x4,
+ 0x3, 0xff, 0x82, 0x88, 0x6c, 0x7, 0xc8, 0xe,
+ 0xc0, 0x25, 0x44, 0xcf, 0x10, 0x80, 0xdc, 0x85,
+ 0x76, 0xa1, 0xe, 0x81, 0xda, 0xa2, 0x4, 0x5e,
+ 0x80, 0x0,
+
+ /* U+48 "H" */
+ 0xbf, 0x80, 0xff, 0x7e, 0x80, 0x7f, 0xff, 0xc0,
+ 0xff, 0xee, 0x13, 0xfe, 0x3, 0xdb, 0x7f, 0x80,
+ 0xff, 0xe5, 0x7f, 0xfe, 0x3, 0xff, 0xfe, 0x7,
+ 0xff, 0xb0,
+
+ /* U+49 "I" */
+ 0x9f, 0x88, 0x1f, 0xff, 0xf0,
+
+ /* U+4A "J" */
+ 0x3, 0xfc, 0xbf, 0x20, 0x3f, 0xff, 0xe0, 0x7f,
+ 0xff, 0xc0, 0xff, 0xea, 0x1b, 0x48, 0xf, 0x10,
+ 0x32, 0x4c, 0x7, 0xb8, 0x4, 0x40, 0x30, 0x38,
+ 0xb0, 0x40, 0x40, 0x1d, 0x92, 0x78, 0x4, 0x0,
+ 0xd8, 0x4, 0xd9, 0x0, 0x44, 0x5, 0x32, 0x20,
+ 0xb, 0xcc, 0x0,
+
+ /* U+4B "K" */
+ 0xbf, 0x80, 0xfd, 0x7f, 0x40, 0x3f, 0xe8, 0x83,
+ 0x80, 0x7f, 0x9b, 0x5, 0x0, 0xff, 0x28, 0xd,
+ 0x3, 0xfc, 0xa8, 0x38, 0xf, 0xf1, 0xa0, 0x38,
+ 0x1f, 0xe3, 0x80, 0x62, 0x7, 0xfb, 0x80, 0xa4,
+ 0xf, 0xf6, 0x22, 0x20, 0x3f, 0xd4, 0x80, 0xc0,
+ 0x7f, 0xc8, 0x9, 0x30, 0x3f, 0xe7, 0xc0, 0x42,
+ 0x7, 0xf2, 0x82, 0x80, 0xe0, 0x7f, 0x50, 0x9,
+ 0x83, 0x40, 0xff, 0xe0, 0x44, 0x13, 0x3, 0xff,
+ 0x81, 0x40, 0x42, 0x7, 0xff, 0x2, 0x80, 0xe0,
+ 0x7f, 0xf0, 0x14, 0x6, 0x81, 0xff, 0xc0, 0x68,
+ 0x26, 0x7, 0xff, 0x2, 0x80, 0x84,
+
+ /* U+4C "L" */
+ 0xbf, 0x80, 0xff, 0xff, 0x81, 0xff, 0xff, 0x3,
+ 0xff, 0xf6, 0x4f, 0xf0, 0x1b, 0x6f, 0xe6, 0x7,
+ 0xff, 0x4,
+
+ /* U+4D "M" */
+ 0xbf, 0xc0, 0x7f, 0xf0, 0x1f, 0xf1, 0x3, 0x20,
+ 0x3f, 0xea, 0x7, 0xee, 0x7, 0xf9, 0x10, 0x3f,
+ 0x20, 0x3f, 0xdc, 0xf, 0x88, 0x6, 0x7, 0xf2,
+ 0x8, 0xe, 0x68, 0x40, 0x3f, 0x30, 0x18, 0xe,
+ 0x7c, 0x2, 0x3, 0xea, 0x11, 0x3, 0xc8, 0x8e,
+ 0x7, 0x91, 0x1c, 0xf, 0xd4, 0x20, 0x3d, 0xc1,
+ 0x44, 0xf, 0x98, 0x6, 0x7, 0x21, 0x40, 0xf8,
+ 0x80, 0x42, 0x1, 0x98, 0x6, 0x7, 0xfa, 0x0,
+ 0x40, 0x54, 0x20, 0x3f, 0xe2, 0x43, 0x80, 0x44,
+ 0x40, 0x3f, 0xf8, 0x14, 0x20, 0x1c, 0x12, 0x1,
+ 0xc0, 0xfe, 0x60, 0x18, 0x42, 0x81, 0xff, 0xc2,
+ 0x62, 0xb0, 0xc, 0xf, 0xfe, 0x15, 0x6, 0x6,
+ 0x7, 0xff, 0xc, 0x90, 0x15, 0x3, 0xff, 0x89,
+ 0x40, 0x12, 0x3, 0xff, 0x88, 0xc0, 0x50, 0x3f,
+ 0x80,
+
+ /* U+4E "N" */
+ 0xbf, 0x90, 0x1f, 0xdf, 0xa0, 0x15, 0x3, 0xff,
+ 0x89, 0x0, 0xff, 0xe1, 0xb2, 0x7, 0xff, 0xf,
+ 0x81, 0xff, 0xc1, 0x80, 0xc0, 0x3f, 0xf8, 0xc,
+ 0x86, 0x40, 0xff, 0xe0, 0x70, 0x1c, 0xf, 0xfe,
+ 0x1, 0x60, 0xb0, 0x3f, 0xf8, 0x10, 0x88, 0x40,
+ 0xff, 0xe0, 0x70, 0x1c, 0xf, 0xfe, 0x1, 0x60,
+ 0xb0, 0x3f, 0xf8, 0x10, 0x88, 0x7, 0xff, 0x6,
+ 0x0, 0xa0, 0x7f, 0xf0, 0x13, 0x9, 0x0, 0xff,
+ 0xe0, 0x40, 0x14, 0xf, 0xfe, 0xd, 0x3, 0xff,
+ 0x86, 0x90, 0xf, 0xfe, 0x1d, 0x3, 0xff, 0x89,
+ 0x40, 0x80,
+
+ /* U+4F "O" */
+ 0x3, 0x95, 0xfe, 0xcc, 0xf, 0xc7, 0x54, 0x4,
+ 0x67, 0x40, 0x71, 0xc4, 0x29, 0x69, 0x80, 0xac,
+ 0xd, 0xc0, 0x5a, 0x69, 0x26, 0x1, 0x8, 0x4,
+ 0x44, 0x40, 0x71, 0xc0, 0x20, 0x8, 0x1, 0x81,
+ 0xf1, 0x41, 0x0, 0x21, 0x81, 0xfd, 0xc0, 0x22,
+ 0x3, 0x1, 0xfc, 0xc0, 0x16, 0x7, 0xff, 0x0,
+ 0x80, 0xe4, 0x3, 0x3, 0xff, 0xa4, 0x40, 0x30,
+ 0x3f, 0xfa, 0x3d, 0x0, 0xc0, 0x7f, 0x20, 0x4,
+ 0x10, 0xc0, 0xfe, 0xe0, 0x10, 0xa0, 0x18, 0x1f,
+ 0x14, 0x10, 0x6, 0x44, 0x40, 0x7b, 0x80, 0x80,
+ 0x5c, 0x5, 0xa4, 0x54, 0xe4, 0x42, 0x4, 0x71,
+ 0xa, 0xea, 0xc0, 0x56, 0x7, 0x1d, 0x50, 0x11,
+ 0x9d, 0x1, 0x0,
+
+ /* U+50 "P" */
+ 0xbf, 0xfe, 0xd0, 0x81, 0xff, 0xc0, 0x2f, 0x40,
+ 0x3b, 0x6f, 0x40, 0xd, 0x80, 0xc4, 0xf9, 0xf2,
+ 0x20, 0x1f, 0xfc, 0x8, 0x1, 0x81, 0xff, 0x20,
+ 0x1c, 0xf, 0xfe, 0x71, 0x1, 0xc0, 0xff, 0xa0,
+ 0x4, 0x7, 0xf2, 0xa8, 0x22, 0x5, 0xff, 0xaa,
+ 0x6, 0x81, 0xff, 0x19, 0x80, 0xed, 0xb7, 0xf6,
+ 0x60, 0x78, 0x9c, 0x7, 0xff, 0xfc, 0xf, 0xfe,
+ 0x58,
+
+ /* U+51 "Q" */
+ 0x3, 0x9d, 0xfe, 0xac, 0xf, 0xc7, 0xc4, 0x4,
+ 0xa7, 0x40, 0x72, 0xc0, 0x15, 0xb2, 0x1, 0x50,
+ 0x1a, 0x80, 0xd5, 0x2a, 0xe0, 0x14, 0x9, 0x80,
+ 0xa4, 0xe, 0x34, 0x4, 0x1, 0x1, 0x40, 0x7c,
+ 0x88, 0x60, 0x80, 0xa0, 0x7f, 0x50, 0x5, 0x80,
+ 0x20, 0x7f, 0x20, 0x8, 0x80, 0x60, 0x7f, 0xf0,
+ 0x78, 0x2, 0x7, 0xf1, 0x1, 0xc0, 0xff, 0xe2,
+ 0xf0, 0x4, 0xf, 0xe2, 0x3, 0x81, 0x30, 0x3f,
+ 0xf8, 0x5, 0x0, 0x20, 0x7f, 0x20, 0xc, 0x80,
+ 0xa0, 0x7f, 0x50, 0x4, 0x30, 0x50, 0x1f, 0x22,
+ 0x18, 0x8, 0x2, 0x90, 0x38, 0xd0, 0x10, 0xa,
+ 0x80, 0xd5, 0x15, 0x30, 0xa, 0x6, 0x58, 0x2,
+ 0xba, 0xb0, 0x15, 0x1, 0xc7, 0xc4, 0x4, 0x40,
+ 0x52, 0x7, 0xce, 0xff, 0x68, 0x3, 0x30, 0x3f,
+ 0xf8, 0xe, 0x80, 0x88, 0xf, 0xfe, 0x2, 0xc6,
+ 0x20, 0x3f, 0xf8, 0x27, 0x30,
+
+ /* U+52 "R" */
+ 0xbf, 0xfe, 0xa8, 0xf, 0xfe, 0xa, 0xb8, 0xf,
+ 0x6d, 0xd4, 0x83, 0x80, 0xe2, 0x79, 0x66, 0xb,
+ 0x3, 0xfe, 0x80, 0x30, 0x1f, 0xfc, 0x2, 0x18,
+ 0x1f, 0xfc, 0xf2, 0x18, 0x1f, 0xf5, 0x1, 0xc0,
+ 0xc4, 0xf2, 0xc8, 0x24, 0x3, 0x6d, 0xd4, 0x85,
+ 0x40, 0xff, 0xe0, 0x5a, 0x3, 0xdf, 0xec, 0x3,
+ 0x81, 0xff, 0x16, 0x11, 0x3, 0xfe, 0x80, 0x20,
+ 0x1f, 0xfc, 0x8, 0x12, 0x1, 0xff, 0x30, 0x10,
+ 0xf, 0xfe, 0x4, 0x5, 0x81, 0xff, 0x32, 0x20,
+ 0x1f, 0xfc, 0x8, 0x1, 0x80,
+
+ /* U+53 "S" */
+ 0x3, 0x4d, 0xfd, 0x98, 0x1e, 0x7d, 0x90, 0x23,
+ 0x3a, 0x2, 0x50, 0x4, 0xda, 0x80, 0x2a, 0x1,
+ 0x40, 0x76, 0x4c, 0xf8, 0xa, 0x8, 0x6, 0x7,
+ 0xd0, 0x2, 0x60, 0x38, 0x1f, 0x20, 0x5, 0x0,
+ 0xc0, 0x7c, 0x7f, 0x30, 0x82, 0xa0, 0x7f, 0xd4,
+ 0x85, 0xea, 0x3, 0xfb, 0x30, 0xa, 0xfa, 0x80,
+ 0xfa, 0x78, 0x40, 0x2b, 0x88, 0x1f, 0x3d, 0x90,
+ 0x83, 0x90, 0x1f, 0x8b, 0xd4, 0x5, 0x3, 0xfe,
+ 0x50, 0x3, 0xde, 0x81, 0xf9, 0x0, 0xec, 0x20,
+ 0x3f, 0xef, 0xc0, 0x28, 0x1f, 0x40, 0x9, 0x18,
+ 0x5d, 0xa2, 0x4f, 0x20, 0x88, 0x90, 0x2, 0x5d,
+ 0x90, 0x85, 0x40, 0x9f, 0x84, 0x8, 0xbd, 0x40,
+ 0x0,
+
+ /* U+54 "T" */
+ 0x5f, 0xff, 0xf0, 0xc0, 0xff, 0xe3, 0x2d, 0xbc,
+ 0x1, 0x6d, 0xe0, 0x4, 0xf8, 0x8, 0x9f, 0x1,
+ 0xff, 0xff, 0x3, 0xff, 0xfe, 0x7, 0xff, 0xfc,
+ 0xf, 0xff, 0x20,
+
+ /* U+55 "U" */
+ 0x1f, 0xa0, 0x1f, 0x97, 0xe4, 0x7, 0xff, 0xfc,
+ 0xf, 0xff, 0xf8, 0x1f, 0xff, 0x12, 0x7, 0xe2,
+ 0x1, 0x82, 0x10, 0x1f, 0xb0, 0x2, 0x28, 0x8,
+ 0x7, 0x92, 0x6, 0x1, 0x90, 0xea, 0x24, 0xad,
+ 0x3, 0x0, 0xb2, 0xa, 0xec, 0xa8, 0x1e, 0x7,
+ 0x5a, 0x44, 0x9, 0x5c, 0x40, 0x0,
+
+ /* U+56 "V" */
+ 0x7f, 0x98, 0x1f, 0xe9, 0xf9, 0x30, 0x14, 0xf,
+ 0xf3, 0x0, 0x82, 0x4, 0xf, 0xe4, 0x1, 0x80,
+ 0xe0, 0x18, 0x1f, 0xb8, 0xa, 0x1, 0x0, 0xa0,
+ 0x7e, 0x40, 0x90, 0x13, 0x4, 0x80, 0xf2, 0x1,
+ 0x40, 0xd4, 0x2, 0x3, 0xdc, 0x3, 0x3, 0x12,
+ 0x14, 0xf, 0x20, 0x80, 0xf5, 0x4, 0x80, 0xc8,
+ 0x7, 0x3, 0xcc, 0x5, 0x3, 0x70, 0x8, 0xf,
+ 0x90, 0x40, 0x64, 0x18, 0x1f, 0xb0, 0x24, 0x1,
+ 0x80, 0xa0, 0x7e, 0x60, 0x28, 0xa, 0x9, 0x1,
+ 0xfc, 0x83, 0x0, 0x45, 0x3, 0xfd, 0xc0, 0x26,
+ 0x1, 0x81, 0xfe, 0x40, 0x35, 0x8, 0xf, 0xfe,
+ 0x3, 0xc, 0x8e, 0x7, 0xff, 0x2, 0x81, 0x90,
+ 0x1f, 0xfc, 0x2, 0x40, 0x10, 0x1f, 0xfc, 0x2a,
+ 0x3, 0x81, 0xf0,
+
+ /* U+57 "W" */
+ 0x1f, 0xa0, 0x1f, 0x5f, 0x80, 0xfa, 0x7e, 0x0,
+ 0x42, 0x3, 0xe4, 0x8, 0x1f, 0x10, 0x40, 0x20,
+ 0x40, 0xf1, 0x2, 0x60, 0x79, 0x6, 0x3, 0x0,
+ 0x40, 0x75, 0x2, 0xc0, 0x71, 0x1, 0x80, 0x20,
+ 0x4, 0xe, 0x40, 0x84, 0x7, 0x20, 0x8, 0x8,
+ 0x8c, 0x7, 0x11, 0x0, 0x10, 0x36, 0x0, 0x40,
+ 0x90, 0x40, 0x64, 0x1, 0x10, 0x80, 0xcc, 0x20,
+ 0x36, 0x0, 0x40, 0xb8, 0x42, 0x8a, 0x6, 0x23,
+ 0x1, 0x98, 0x4, 0x4, 0x86, 0x8, 0x10, 0x24,
+ 0x1, 0x1, 0x88, 0xc, 0x0, 0x80, 0x60, 0x80,
+ 0x40, 0x30, 0x2, 0x7, 0x20, 0xc0, 0x20, 0x40,
+ 0x90, 0xc0, 0x10, 0x40, 0x7b, 0x2, 0x2, 0x84,
+ 0x5, 0xc2, 0x0, 0x46, 0x3, 0xc8, 0x2, 0x4,
+ 0x50, 0x24, 0x9, 0x80, 0x20, 0x3c, 0x40, 0x64,
+ 0x0, 0x81, 0x88, 0x48, 0x0, 0x81, 0xf2, 0x7,
+ 0x4, 0x7, 0x21, 0xb8, 0x40, 0x7e, 0xc1, 0xa1,
+ 0xc0, 0xec, 0x12, 0x2, 0x7, 0xe4, 0x9, 0x4,
+ 0x7, 0x20, 0x4, 0x60, 0x3f, 0x10, 0x22, 0x7,
+ 0xc8, 0x9, 0x1, 0xfc, 0x80, 0x50, 0x3e, 0xc0,
+ 0x8, 0x1f, 0xec, 0x1, 0x1, 0xf2, 0x0, 0x80,
+ 0xe0,
+
+ /* U+58 "X" */
+ 0x17, 0xf2, 0x3, 0xf5, 0xfc, 0x84, 0x1, 0x40,
+ 0xf9, 0x20, 0x48, 0xc, 0x1, 0x0, 0xf5, 0x1,
+ 0x0, 0x99, 0xc, 0x81, 0xa0, 0x8, 0x40, 0xdc,
+ 0x7, 0x2, 0x2c, 0x16, 0x7, 0x16, 0xb, 0x1,
+ 0xc0, 0x70, 0x3e, 0x80, 0x21, 0x64, 0x32, 0x7,
+ 0xea, 0x3, 0xc0, 0x60, 0x1f, 0xc9, 0x1, 0x1,
+ 0x0, 0xff, 0xa8, 0x12, 0x40, 0x3f, 0xe2, 0x7,
+ 0xff, 0x13, 0x81, 0x26, 0x7, 0xf9, 0x90, 0x80,
+ 0x40, 0x3f, 0xd0, 0x5, 0x80, 0x28, 0x1f, 0xa8,
+ 0xa, 0x1a, 0x9, 0x0, 0xf2, 0x40, 0x90, 0x4,
+ 0x1, 0x40, 0xf5, 0x1, 0x0, 0x8c, 0x1, 0x0,
+ 0xd0, 0x4, 0x20, 0x66, 0x43, 0x20, 0x13, 0x5,
+ 0x81, 0xee, 0x3, 0x80, 0x80, 0x38, 0x1f, 0x16,
+ 0xb,
+
+ /* U+59 "Y" */
+ 0x9f, 0x98, 0x1f, 0xd7, 0xf2, 0x80, 0x20, 0x1f,
+ 0x8a, 0x9, 0x4, 0x1, 0x0, 0xfa, 0x0, 0x80,
+ 0x19, 0xc, 0xf, 0x24, 0x8, 0x81, 0x40, 0x10,
+ 0xe, 0x80, 0x28, 0x19, 0x10, 0xc0, 0xc8, 0x86,
+ 0x7, 0xb8, 0x8, 0x5, 0x0, 0x40, 0x3c, 0x50,
+ 0x60, 0x11, 0x10, 0xf, 0xd0, 0x4, 0x10, 0x16,
+ 0x7, 0xe2, 0xc3, 0x84, 0x40, 0x3f, 0xd0, 0x3,
+ 0x5, 0x1, 0xff, 0x30, 0x28, 0x7, 0xff, 0x2,
+ 0x0, 0x28, 0xf, 0xfe, 0x1b, 0x3, 0xff, 0xfe,
+ 0x7, 0xff, 0x58,
+
+ /* U+5A "Z" */
+ 0xbf, 0xff, 0xf0, 0x48, 0x1f, 0xfc, 0x3b, 0xb7,
+ 0xf5, 0x0, 0x48, 0x13, 0xfd, 0x0, 0x70, 0x3f,
+ 0xd0, 0x88, 0x40, 0xfe, 0x2c, 0x16, 0x7, 0xfb,
+ 0x80, 0xe0, 0x7f, 0xa1, 0x10, 0x81, 0xfc, 0x98,
+ 0x4c, 0xf, 0xf5, 0x1, 0x40, 0xff, 0x50, 0x14,
+ 0xf, 0xf2, 0x40, 0x90, 0xf, 0xf5, 0x1, 0x40,
+ 0xff, 0x50, 0x14, 0xf, 0xf3, 0x41, 0xa0, 0x3f,
+ 0x8c, 0x6, 0x1, 0xfe, 0xe0, 0x38, 0x1f, 0xe6,
+ 0x42, 0x4, 0xff, 0xa, 0x1, 0x6d, 0xfe, 0xa0,
+ 0x7f, 0xf0, 0xc0,
+
+ /* U+5B "[" */
+ 0xff, 0x88, 0x1f, 0x9f, 0xe2, 0x7, 0xff, 0xfc,
+ 0xf, 0xff, 0x7b, 0xfc, 0x40, 0xf0,
+
+ /* U+5C "\\" */
+ 0x5f, 0x88, 0x1f, 0x91, 0x14, 0xf, 0xea, 0x18,
+ 0x1f, 0xcc, 0x2, 0x3, 0xf9, 0xe, 0x7, 0xf7,
+ 0x8, 0xf, 0xe4, 0x1, 0x81, 0xfc, 0xc5, 0x3,
+ 0xfa, 0x82, 0x40, 0x7e, 0x24, 0x28, 0x1f, 0xd4,
+ 0x30, 0x3f, 0x98, 0x6, 0x7, 0xf3, 0x14, 0xf,
+ 0xea, 0x9, 0x1, 0xf8, 0x90, 0xa0, 0x7f, 0x50,
+ 0xc0, 0xfe, 0x60, 0x10, 0x1f, 0xc8, 0x70, 0x3f,
+ 0xb8, 0x40, 0x7f, 0x20, 0xc, 0xf, 0xe6, 0x28,
+ 0x1f, 0xd1, 0xa0,
+
+ /* U+5D "]" */
+ 0xff, 0x90, 0x1e, 0xfd, 0x40, 0xe6, 0x7, 0xff,
+ 0xfc, 0xf, 0xff, 0x33, 0x2, 0xfd, 0x40, 0xfe,
+
+ /* U+5E "^" */
+ 0x3, 0x1f, 0xc0, 0x7e, 0x80, 0x10, 0x1f, 0x20,
+ 0x1c, 0xf, 0x30, 0x24, 0x40, 0xea, 0x21, 0x14,
+ 0xc, 0x88, 0x70, 0x30, 0x37, 0xc, 0x20, 0x8,
+ 0x9, 0xa, 0x1, 0x88, 0x2, 0x2, 0x40, 0x28,
+ 0x24, 0x18, 0xa0, 0x44, 0x85,
+
+ /* U+5F "_" */
+ 0x3, 0xff, 0x83, 0xff, 0xff, 0x2, 0x1, 0xff,
+ 0xc1,
+
+ /* U+60 "`" */
+ 0x1b, 0xf1, 0x2, 0xc4, 0x70, 0x36, 0x5, 0x81,
+ 0xb0, 0x84,
+
+ /* U+61 "a" */
+ 0x2, 0x57, 0xfb, 0x30, 0x3a, 0xd2, 0x2, 0x33,
+ 0x1, 0x44, 0x1e, 0xf9, 0x83, 0x0, 0x30, 0xe1,
+ 0x6, 0x20, 0xc0, 0x5a, 0x80, 0x76, 0x0, 0x42,
+ 0x40, 0x3c, 0x40, 0xf3, 0xbf, 0xea, 0x6, 0x3a,
+ 0x20, 0x4, 0xc0, 0x6e, 0x45, 0xfd, 0xb2, 0x1,
+ 0x22, 0x32, 0x3, 0xf1, 0x0, 0x40, 0xe2, 0x7,
+ 0x90, 0x1d, 0x40, 0x98, 0xa, 0xca, 0x9c, 0x80,
+ 0x62, 0x0, 0x9a, 0xb0, 0xc0, 0x10, 0xf2, 0x2,
+ 0x7a, 0x24, 0x0,
+
+ /* U+62 "b" */
+ 0x1f, 0x98, 0x1f, 0xff, 0xf0, 0x3f, 0xd3, 0xfa,
+ 0x90, 0x3d, 0xbb, 0x2, 0x59, 0x81, 0xc8, 0x4d,
+ 0x90, 0x4, 0x20, 0x76, 0x64, 0x9e, 0x1, 0x0,
+ 0xd0, 0x81, 0x8b, 0x8, 0xf, 0xfb, 0x0, 0x40,
+ 0x7f, 0x98, 0x2, 0x7, 0xf8, 0x81, 0xff, 0xc1,
+ 0x20, 0x7f, 0xf0, 0x58, 0x2, 0x7, 0xfb, 0x80,
+ 0x40, 0x50, 0x81, 0x8a, 0x8, 0xe, 0xcc, 0x93,
+ 0xc0, 0x20, 0x19, 0x89, 0xb2, 0x0, 0x84, 0xd,
+ 0xb1, 0x81, 0x2c, 0xc0, 0x0,
+
+ /* U+63 "c" */
+ 0x2, 0x33, 0x7e, 0xcc, 0xe, 0x79, 0x90, 0x6,
+ 0x60, 0x25, 0x1, 0xbf, 0x30, 0x70, 0xa, 0xe,
+ 0x40, 0xca, 0xa, 0x40, 0x10, 0xe, 0x44, 0x6c,
+ 0x0, 0x80, 0xf7, 0xb4, 0x41, 0x3, 0xe2, 0x88,
+ 0x1f, 0xfc, 0xe2, 0x8, 0x1f, 0xec, 0x1, 0x1,
+ 0xeb, 0xa2, 0x1, 0x0, 0xe2, 0x8f, 0x14, 0x1c,
+ 0x81, 0x78, 0x16, 0x14, 0x6, 0xfd, 0x1, 0xc0,
+ 0x4f, 0x32, 0x0, 0xcc, 0x0,
+
+ /* U+64 "d" */
+ 0x3, 0xfd, 0xbe, 0x3, 0xff, 0xf0, 0xaf, 0xed,
+ 0x0, 0xf4, 0xa8, 0x1, 0x78, 0xc, 0xd8, 0x1b,
+ 0xb1, 0x92, 0x2, 0x80, 0xe4, 0x4a, 0x50, 0x24,
+ 0x2, 0x81, 0xc8, 0x80, 0xc0, 0x18, 0x1f, 0xc4,
+ 0xf, 0xfe, 0x11, 0x3, 0xff, 0x80, 0x40, 0xff,
+ 0x10, 0x3f, 0xf8, 0x18, 0x3, 0x3, 0xf9, 0x0,
+ 0xa0, 0x72, 0x20, 0x54, 0x1c, 0x89, 0x4a, 0x6,
+ 0x4c, 0x1b, 0xb1, 0x82, 0x6, 0x95, 0x0, 0x2f,
+ 0xa0, 0x0,
+
+ /* U+65 "e" */
+ 0x3, 0x4d, 0xfb, 0x30, 0x39, 0x76, 0x40, 0x19,
+ 0x80, 0x8d, 0x6, 0xfc, 0xc1, 0xa0, 0x38, 0x39,
+ 0x3, 0x20, 0x22, 0x61, 0x0, 0xe6, 0x2, 0xd0,
+ 0x4, 0x7, 0x88, 0x24, 0x3, 0xff, 0x88, 0x60,
+ 0x7f, 0xf0, 0xcf, 0xff, 0xd8, 0x82, 0x7, 0xfb,
+ 0x0, 0x60, 0x7f, 0x20, 0x10, 0xf, 0x3a, 0x2,
+ 0x80, 0xec, 0x1, 0xb1, 0x20, 0x54, 0x4, 0xfd,
+ 0x90, 0x88, 0x2, 0xec, 0x80, 0x2f, 0x30,
+
+ /* U+66 "f" */
+ 0x3, 0xff, 0x87, 0x3f, 0xa8, 0x1b, 0x30, 0x3e,
+ 0x64, 0x3f, 0xd4, 0xb, 0x0, 0x80, 0x79, 0x84,
+ 0x7, 0xff, 0x8, 0xfe, 0x21, 0x7e, 0xc0, 0x7f,
+ 0xc7, 0xf1, 0xb, 0xf6, 0x3, 0xff, 0xfe, 0x7,
+ 0xff, 0x88,
+
+ /* U+67 "g" */
+ 0x2, 0x57, 0xf6, 0x82, 0x7c, 0x2, 0x54, 0x0,
+ 0xbc, 0x40, 0x9b, 0x3, 0x76, 0x32, 0x80, 0xa0,
+ 0xc, 0x89, 0x4a, 0x4, 0x80, 0x40, 0x39, 0x20,
+ 0xc, 0x1, 0x81, 0xfc, 0x40, 0xff, 0xe1, 0x10,
+ 0x3f, 0xf8, 0x4, 0xf, 0xf1, 0x3, 0xff, 0x81,
+ 0x80, 0x30, 0x3c, 0xc0, 0x20, 0x14, 0xe, 0x44,
+ 0xa, 0x83, 0x91, 0x29, 0x40, 0xc9, 0x83, 0x76,
+ 0x32, 0x40, 0x69, 0x50, 0x2, 0xf3, 0x3, 0x95,
+ 0xfd, 0xa0, 0x61, 0x81, 0xfe, 0x20, 0x85, 0xc8,
+ 0x1d, 0x0, 0x61, 0xc6, 0x64, 0x1a, 0xc2, 0x41,
+ 0x48, 0x9b, 0xe4, 0xd, 0x2, 0xd5, 0x1, 0x29,
+ 0x80, 0x0,
+
+ /* U+68 "h" */
+ 0x1f, 0x98, 0x1f, 0xff, 0xf0, 0x33, 0xdf, 0xb2,
+ 0x3, 0xbe, 0x84, 0x1, 0xac, 0xc, 0xcb, 0xd9,
+ 0x0, 0x40, 0x3b, 0x42, 0x4e, 0x0, 0x40, 0x4c,
+ 0x81, 0x98, 0x2, 0x5, 0xc0, 0xfd, 0xc0, 0xff,
+ 0xff, 0x81, 0xff, 0xde,
+
+ /* U+69 "i" */
+ 0x17, 0xc0, 0x83, 0xc, 0xc1, 0x33, 0x3, 0xb7,
+ 0xa0, 0x7f, 0xfb, 0x0,
+
+ /* U+6A "j" */
+ 0x2, 0xdd, 0x0, 0x24, 0x38, 0x2, 0x8f, 0x2,
+ 0xb9, 0x1, 0xfd, 0xfa, 0x1, 0xff, 0xff, 0x3,
+ 0xff, 0x9d, 0xc9, 0x50, 0x7, 0x62, 0x5, 0x10,
+ 0xb, 0x0,
+
+ /* U+6B "k" */
+ 0x1f, 0x98, 0x1f, 0xff, 0xf0, 0x3f, 0xf8, 0x27,
+ 0xf8, 0x81, 0xfd, 0xc0, 0x62, 0x7, 0xec, 0x46,
+ 0x20, 0x7e, 0xc4, 0x52, 0x7, 0xec, 0x45, 0x40,
+ 0x7e, 0xa4, 0x44, 0x7, 0xea, 0x80, 0x30, 0x3f,
+ 0x88, 0x15, 0x3, 0xfc, 0x90, 0x26, 0x7, 0xe5,
+ 0x68, 0x88, 0x40, 0xfb, 0x0, 0xe0, 0x38, 0x1f,
+ 0xe3, 0x1, 0x80, 0x7f, 0x9a, 0xd, 0x1, 0xfe,
+ 0xa4, 0x52, 0x7, 0xfb, 0x80, 0xe0,
+
+ /* U+6C "l" */
+ 0xde, 0x81, 0xff, 0xf0,
+
+ /* U+6D "m" */
+ 0x1f, 0x90, 0x9b, 0xf5, 0x40, 0x53, 0x7e, 0xc8,
+ 0xe, 0xdd, 0x90, 0xa, 0xa4, 0xec, 0x80, 0x36,
+ 0x1, 0x99, 0xbb, 0x18, 0xb, 0x42, 0x6c, 0x80,
+ 0x19, 0x2, 0x39, 0x12, 0x90, 0x5, 0x99, 0x27,
+ 0x40, 0x20, 0x2a, 0x7, 0x20, 0x8, 0x81, 0x90,
+ 0xe, 0x7, 0xf1, 0x0, 0x40, 0xfc, 0x40, 0xff,
+ 0xff, 0x81, 0xff, 0xff, 0x3, 0xff, 0xc8,
+
+ /* U+6E "n" */
+ 0x1f, 0x90, 0x7b, 0xf6, 0x40, 0x71, 0xd0, 0x80,
+ 0x35, 0x81, 0xa1, 0x7b, 0x20, 0x8, 0x7, 0x68,
+ 0x49, 0xc0, 0x8, 0x9, 0x90, 0x33, 0x0, 0x40,
+ 0xb8, 0x1f, 0xb8, 0x1f, 0xff, 0xf0, 0x3f, 0xfb,
+ 0xc0,
+
+ /* U+6F "o" */
+ 0x3, 0x4d, 0xfb, 0x40, 0x3c, 0xbb, 0x20, 0xb,
+ 0xe8, 0x8, 0xd0, 0x17, 0xf4, 0x1, 0x48, 0xe,
+ 0x3, 0xa0, 0xf, 0x0, 0xe1, 0x11, 0x0, 0xe3,
+ 0x1, 0x2c, 0x1, 0x81, 0xe6, 0x2, 0x90, 0x40,
+ 0xff, 0x10, 0x3f, 0xe2, 0x7, 0xff, 0x10, 0x82,
+ 0x7, 0xe2, 0xe, 0x0, 0xc0, 0xf3, 0x1, 0x91,
+ 0x10, 0xf, 0x40, 0x50, 0xe0, 0x32, 0x0, 0xb8,
+ 0xe, 0x0, 0xd0, 0x6f, 0xea, 0x2, 0x90, 0x25,
+ 0xd9, 0x0, 0x5f, 0x40, 0x0,
+
+ /* U+70 "p" */
+ 0x1f, 0x91, 0x9f, 0xd4, 0x81, 0xed, 0x8c, 0x9,
+ 0x66, 0x7, 0x33, 0x36, 0x30, 0x10, 0x81, 0x8e,
+ 0x64, 0xa5, 0x1, 0x0, 0xd4, 0xe, 0x48, 0x10,
+ 0x1f, 0xf7, 0x0, 0x40, 0xff, 0x30, 0xc, 0xf,
+ 0xfe, 0x9, 0x3, 0xff, 0x82, 0x40, 0xff, 0x30,
+ 0xc, 0xf, 0xf7, 0x0, 0x40, 0xa8, 0x1c, 0x50,
+ 0x40, 0x63, 0x90, 0x7, 0x80, 0x40, 0x31, 0x2b,
+ 0xfa, 0x0, 0xa4, 0xd, 0x72, 0x2, 0x59, 0x1,
+ 0xe3, 0x7f, 0xa9, 0x3, 0xff, 0xfa,
+
+ /* U+71 "q" */
+ 0x2, 0x57, 0xf6, 0x82, 0x7c, 0x2, 0x54, 0x0,
+ 0xbe, 0x80, 0x9b, 0x3, 0x7e, 0x80, 0x81, 0x40,
+ 0x72, 0x5, 0xe0, 0x24, 0x2, 0x81, 0xc4, 0x80,
+ 0x60, 0xc, 0xf, 0xe2, 0x7, 0xff, 0x8, 0x81,
+ 0xff, 0xc0, 0x20, 0x7f, 0x88, 0x1f, 0xfc, 0xc,
+ 0x1, 0x81, 0xfc, 0x80, 0x50, 0x38, 0x90, 0x14,
+ 0x7, 0x20, 0x5e, 0x3, 0x36, 0x6, 0xfd, 0x0,
+ 0xf4, 0xa8, 0x1, 0x7c, 0x81, 0xca, 0xfe, 0xd0,
+ 0xf, 0xff, 0xc8,
+
+ /* U+72 "r" */
+ 0x1f, 0x99, 0xbf, 0x80, 0xdb, 0x10, 0x1e, 0x41,
+ 0x48, 0x3, 0xb5, 0x6c, 0x6, 0x64, 0xf, 0xb8,
+ 0x1f, 0xff, 0xf0, 0x3f, 0xe0,
+
+ /* U+73 "s" */
+ 0x2, 0x7b, 0xfa, 0xa0, 0x3b, 0x42, 0x4, 0xac,
+ 0x2, 0xa4, 0x4d, 0xe9, 0xd, 0x0, 0x41, 0xb1,
+ 0xb, 0x0, 0x80, 0x80, 0xe0, 0x75, 0x74, 0x10,
+ 0x10, 0x81, 0x94, 0x60, 0x28, 0xd, 0xeb, 0x3,
+ 0xcb, 0x30, 0xa, 0x7a, 0x40, 0xc6, 0x7d, 0x10,
+ 0x59, 0x1, 0xe2, 0xee, 0x1, 0x3, 0xb4, 0x7,
+ 0x16, 0x8, 0x4, 0x84, 0xe, 0x20, 0x4c, 0x6,
+ 0x64, 0x18, 0x83, 0x1, 0x80, 0x4d, 0xf3, 0x6,
+ 0x0, 0x3e, 0x10, 0x25, 0x70, 0x0,
+
+ /* U+74 "t" */
+ 0x2, 0x90, 0x40, 0xe2, 0xdc, 0x7, 0xff, 0x27,
+ 0xf6, 0x1, 0x7f, 0x2, 0x7, 0xed, 0xf0, 0xb,
+ 0xf8, 0xf, 0xff, 0xf8, 0x11, 0x3, 0x88, 0xa,
+ 0x48, 0xc, 0x81, 0xd8, 0x40, 0xab, 0x0, 0x40,
+
+ /* U+75 "u" */
+ 0x3f, 0x98, 0x1e, 0xfd, 0x0, 0xff, 0xff, 0x81,
+ 0xff, 0xde, 0x20, 0x7f, 0xf0, 0xe8, 0x1d, 0x0,
+ 0xcc, 0x1a, 0x49, 0x56, 0x6, 0x80, 0x16, 0xca,
+ 0x88, 0x1d, 0xd8, 0x11, 0x98, 0x8,
+
+ /* U+76 "v" */
+ 0x5f, 0x88, 0x1e, 0xbf, 0x4, 0x2, 0x81, 0xe4,
+ 0x10, 0x4, 0x10, 0x1c, 0x80, 0x50, 0x1c, 0x12,
+ 0x3, 0x70, 0x48, 0x2, 0x1, 0x40, 0xc8, 0x50,
+ 0x33, 0x8, 0x9, 0x0, 0x60, 0x6a, 0x9, 0x0,
+ 0xe1, 0x1, 0xc4, 0x85, 0x0, 0x86, 0x3, 0xc8,
+ 0x20, 0x80, 0x30, 0x3d, 0x41, 0x2c, 0x10, 0x1f,
+ 0x12, 0x15, 0x8e, 0x7, 0xea, 0x18, 0x4, 0x7,
+ 0xe6, 0x4, 0xc0, 0xff, 0x20, 0x18, 0xf, 0xf7,
+ 0x0, 0x80, 0xe0,
+
+ /* U+77 "w" */
+ 0x5f, 0x88, 0x1d, 0x7d, 0x3, 0x97, 0xe2, 0x80,
+ 0x20, 0x39, 0x4, 0x7, 0x60, 0x4, 0x21, 0x40,
+ 0xc8, 0x9, 0x1, 0x90, 0x40, 0x30, 0x20, 0x6c,
+ 0x5, 0x80, 0xc4, 0x60, 0xc, 0x2, 0x2, 0x62,
+ 0x6, 0x4, 0x80, 0x30, 0x22, 0x30, 0x2, 0xb,
+ 0x0, 0x40, 0x60, 0x40, 0xc8, 0x20, 0x14, 0x20,
+ 0x85, 0x0, 0x82, 0x3, 0x60, 0x40, 0x21, 0x47,
+ 0x8, 0x1, 0x14, 0xc, 0x80, 0x22, 0x40, 0x84,
+ 0x9, 0x20, 0x4, 0xe, 0x43, 0x20, 0x80, 0x90,
+ 0x58, 0x20, 0x3d, 0x82, 0xa3, 0x81, 0x61, 0x50,
+ 0xe0, 0x79, 0x2, 0x41, 0x1, 0x30, 0x48, 0x20,
+ 0x3c, 0x48, 0x2, 0x3, 0x88, 0x2, 0x7, 0xe4,
+ 0x3, 0x1, 0xd4, 0x2, 0x3, 0xf6, 0x0, 0xc0,
+ 0xe4, 0x2, 0x81, 0x80,
+
+ /* U+78 "x" */
+ 0x1f, 0xc0, 0x71, 0xfd, 0x80, 0x50, 0x10, 0xd,
+ 0xc0, 0x70, 0x9, 0x3, 0x20, 0x11, 0x10, 0x81,
+ 0x50, 0x10, 0x5, 0x5, 0x81, 0xd4, 0x24, 0x80,
+ 0x38, 0x1e, 0x48, 0x2b, 0xc, 0x81, 0xf5, 0x2,
+ 0x30, 0xf, 0xe6, 0x2, 0x81, 0xfc, 0x58, 0x8,
+ 0x7, 0xf7, 0x4, 0x5, 0x3, 0xe6, 0x47, 0x81,
+ 0x20, 0x1c, 0x60, 0x45, 0x91, 0x40, 0xee, 0x2,
+ 0x80, 0xe0, 0x20, 0x13, 0x22, 0x1, 0x16, 0x1a,
+ 0x6, 0x2, 0xc0, 0xd0, 0x5, 0x0,
+
+ /* U+79 "y" */
+ 0x9f, 0x88, 0x1e, 0xfd, 0x68, 0x5, 0x3, 0x90,
+ 0xc, 0x48, 0x30, 0x3b, 0x0, 0x62, 0x80, 0x20,
+ 0x66, 0x10, 0x6, 0x2, 0x81, 0x10, 0x1c, 0x9,
+ 0x6, 0x5, 0x40, 0x20, 0x2c, 0x0, 0x80, 0x41,
+ 0x1, 0x98, 0xa, 0x9, 0xe, 0x7, 0x20, 0xc2,
+ 0x0, 0x80, 0xee, 0x0, 0xd0, 0x80, 0xf2, 0x1,
+ 0x8, 0xe0, 0x7c, 0xc2, 0x0, 0x80, 0xfa, 0x81,
+ 0x30, 0x3f, 0x10, 0x2c, 0x7, 0xf3, 0x0, 0x80,
+ 0xfe, 0x21, 0x81, 0xfe, 0x42, 0x81, 0xfd, 0x1,
+ 0x20, 0x3c, 0x54, 0x62, 0x1, 0xf7, 0xac, 0x24,
+ 0x3, 0xe6, 0x2, 0x50, 0x3e,
+
+ /* U+7A "z" */
+ 0xbf, 0xff, 0xa0, 0x1f, 0xfc, 0xb, 0xff, 0xb0,
+ 0x14, 0x3, 0xe8, 0x2, 0x81, 0xf3, 0x41, 0xa0,
+ 0x3c, 0x60, 0x30, 0xf, 0xb8, 0xc, 0x7, 0xd4,
+ 0x8a, 0x7, 0xcd, 0x6, 0x80, 0xf1, 0x80, 0xc0,
+ 0x3e, 0xe0, 0x38, 0x1f, 0x42, 0x29, 0x3, 0xc9,
+ 0x84, 0x80, 0x7d, 0x0, 0x2f, 0xff, 0x1, 0xff,
+ 0xc0,
+
+ /* U+7B "{" */
+ 0x3, 0xf1, 0x3, 0xe7, 0xf0, 0x1e, 0x90, 0x18,
+ 0x1c, 0xd8, 0x58, 0x7, 0x50, 0x50, 0x1e, 0x22,
+ 0x81, 0xe2, 0x0, 0x81, 0xff, 0xd8, 0x60, 0x18,
+ 0x1e, 0xc0, 0x8, 0x1c, 0xd8, 0x30, 0x3b, 0xc0,
+ 0xa0, 0x18, 0x81, 0xfc, 0x7c, 0xa, 0x1, 0xe6,
+ 0xc1, 0x81, 0xf6, 0x0, 0x40, 0xf3, 0x0, 0xc0,
+ 0xff, 0xec, 0x10, 0x4, 0xf, 0x88, 0xc0, 0x7d,
+ 0x42, 0x40, 0x3c, 0xd0, 0xb0, 0xf, 0x58, 0x18,
+ 0x1f, 0x3f, 0x80,
+
+ /* U+7C "|" */
+ 0x9d, 0x81, 0xff, 0xf6, 0xcd, 0x0,
+
+ /* U+7D "}" */
+ 0x3, 0xf9, 0xfa, 0x7, 0x89, 0x2e, 0x40, 0xcb,
+ 0x11, 0xc0, 0xf4, 0x5, 0x1, 0xc8, 0x1, 0x3,
+ 0xf7, 0x3, 0xf1, 0x3, 0xff, 0x86, 0x40, 0xff,
+ 0xe2, 0xa0, 0x80, 0xf5, 0x1, 0x48, 0x18, 0xd0,
+ 0xb4, 0x3, 0x32, 0x7, 0x8e, 0x25, 0xa0, 0x15,
+ 0x1, 0x88, 0x19, 0x4, 0x7, 0xff, 0xc, 0x81,
+ 0xff, 0xc7, 0x20, 0x7e, 0xe0, 0x72, 0x0, 0x40,
+ 0xe8, 0xa, 0x2, 0x58, 0x8e, 0x6, 0xc5, 0x72,
+ 0x6, 0x9a, 0x81, 0xe0,
+
+ /* U+7E "~" */
+ 0x3, 0x12, 0x3, 0xff, 0x82, 0xb6, 0xbd, 0x3,
+ 0xdb, 0x8, 0x34, 0x81, 0x2e, 0x80, 0x89, 0xc3,
+ 0x83, 0xbc, 0x1, 0x62, 0x4e, 0x10, 0x2, 0x39,
+ 0xf, 0x90, 0xed, 0x11, 0x0, 0x36, 0x20, 0x6d,
+ 0x8, 0x5, 0xc8,
+
+ /* U+F001 "" */
+ 0x3, 0xff, 0x9c, 0x40, 0xff, 0xe5, 0x99, 0xbe,
+ 0x80, 0x7f, 0xf1, 0xd5, 0xf9, 0x90, 0xc, 0xf,
+ 0xfe, 0x19, 0x7b, 0xd4, 0x7, 0xff, 0x1d, 0x4f,
+ 0xa1, 0x3, 0xff, 0x8e, 0xef, 0xac, 0xf, 0xfe,
+ 0x4c, 0xf1, 0x1, 0xff, 0xcc, 0x60, 0x7f, 0xf7,
+ 0xda, 0x3, 0xff, 0x94, 0x66, 0xf0, 0x81, 0xff,
+ 0xc7, 0x57, 0xe6, 0x40, 0xff, 0xe3, 0x17, 0xbd,
+ 0x40, 0x7f, 0xf2, 0x16, 0xc8, 0x40, 0xff, 0xe5,
+ 0x92, 0x3, 0xff, 0xfe, 0x7, 0xff, 0xf5, 0xdd,
+ 0x50, 0x1f, 0xfc, 0x95, 0xe2, 0x28, 0x81, 0xff,
+ 0xc8, 0x34, 0xf, 0xfe, 0x9, 0x30, 0x1f, 0xe4,
+ 0x7, 0xfc, 0x77, 0xda, 0x3, 0xfc, 0x40, 0xfe,
+ 0x2b, 0x10, 0x3f, 0xf8, 0x49, 0x0, 0xfd, 0x20,
+ 0xf, 0xfe, 0x2d, 0x80, 0x72, 0xc8, 0x81, 0xfd,
+ 0xc0, 0xfc, 0xff, 0x6c, 0xf4, 0x84, 0x7, 0xf2,
+ 0x3, 0xfe, 0x24, 0x6, 0xa8, 0xf, 0xa9, 0x3,
+ 0xff, 0x8d, 0x74, 0x48, 0xef, 0x40, 0x7f, 0xf1,
+ 0x80,
+
+ /* U+F008 "" */
+ 0x94, 0xb, 0x7f, 0xff, 0xc4, 0xa0, 0x56, 0x34,
+ 0xb1, 0x3, 0xff, 0x88, 0x97, 0x30, 0x16, 0xc0,
+ 0x49, 0x7f, 0xf0, 0x0, 0xad, 0x80, 0xcd, 0xc0,
+ 0xd, 0xbf, 0xfc, 0x0, 0x26, 0xe0, 0x23, 0x24,
+ 0x40, 0xff, 0xe2, 0x29, 0x22, 0x7, 0xff, 0x9d,
+ 0x81, 0xe3, 0xfc, 0x40, 0xff, 0xe2, 0x1f, 0xe2,
+ 0x4, 0x4c, 0x0, 0x81, 0xff, 0xc3, 0x26, 0x2,
+ 0x3b, 0x44, 0x6, 0xdf, 0xfc, 0x0, 0x7, 0x68,
+ 0x81, 0xfc, 0x4f, 0xff, 0x0, 0x3, 0x3, 0xff,
+ 0x82, 0x4f, 0xff, 0x0, 0x3, 0x3, 0xc7, 0x68,
+ 0x80, 0xdb, 0xff, 0x80, 0x0, 0xed, 0x10, 0x22,
+ 0x60, 0x4, 0xf, 0xfe, 0x19, 0x30, 0x11, 0xfe,
+ 0x20, 0x7f, 0xf1, 0xf, 0xf1, 0x3, 0xff, 0x96,
+ 0xc0, 0xff, 0xeb, 0x19, 0x22, 0x7, 0xff, 0x11,
+ 0x49, 0x10, 0x26, 0xe0, 0x6, 0xdf, 0xfe, 0x0,
+ 0x13, 0x70, 0x1a, 0xd8, 0x9, 0x2f, 0xfe, 0x0,
+ 0x15, 0xb0, 0x4, 0xb8, 0x81, 0xff, 0xc4, 0x4b,
+ 0x98,
+
+ /* U+F00B "" */
+ 0x9f, 0xfa, 0x80, 0xbf, 0xff, 0xf1, 0x23, 0x3,
+ 0xc8, 0x84, 0x7, 0xff, 0x11, 0x81, 0xff, 0xff,
+ 0x3, 0xff, 0xb2, 0x80, 0xf1, 0x20, 0x40, 0xff,
+ 0xe2, 0x2b, 0xff, 0xb0, 0xd, 0xff, 0xff, 0x12,
+ 0x81, 0xff, 0xd0, 0x9f, 0xfa, 0x80, 0xbf, 0xff,
+ 0xf1, 0x23, 0x3, 0xc8, 0x84, 0x7, 0xff, 0x11,
+ 0x81, 0xff, 0xff, 0x3, 0xff, 0xb2, 0x80, 0xf1,
+ 0x20, 0x80, 0xff, 0xe2, 0x3b, 0xff, 0xb0, 0xb,
+ 0xff, 0xff, 0x12, 0x1, 0xff, 0xd0, 0xbf, 0xfb,
+ 0x0, 0xdf, 0xff, 0xf1, 0x2a, 0x3, 0xc4, 0x81,
+ 0x3, 0xff, 0x88, 0x80, 0xff, 0xff, 0x81, 0xff,
+ 0xd9, 0x60, 0x79, 0x10, 0x80, 0xff, 0xe2, 0x30,
+
+ /* U+F00C "" */
+ 0x3, 0xff, 0x96, 0xbc, 0x3, 0xff, 0x98, 0xe8,
+ 0x74, 0xf, 0xfe, 0x53, 0x80, 0x4a, 0x1, 0xff,
+ 0xc8, 0x70, 0xe, 0x60, 0x7f, 0xf1, 0xdc, 0x3,
+ 0xcc, 0xf, 0xfe, 0x33, 0x80, 0x79, 0xc0, 0x3f,
+ 0xf8, 0xae, 0x1, 0xe7, 0x0, 0xa7, 0x40, 0x7f,
+ 0xce, 0x1, 0xe7, 0x0, 0xab, 0x15, 0x81, 0xfc,
+ 0xe0, 0x1e, 0x70, 0xa, 0x20, 0x28, 0xc0, 0xf9,
+ 0xc0, 0x3c, 0xe0, 0x19, 0x81, 0xd1, 0x81, 0xce,
+ 0x1, 0xe7, 0x0, 0xe6, 0x7, 0xa3, 0x2, 0x70,
+ 0xf, 0x38, 0x7, 0xa3, 0x3, 0xd1, 0x87, 0x0,
+ 0xf3, 0x80, 0x7e, 0x8c, 0xf, 0x4b, 0x0, 0xf3,
+ 0x80, 0x7f, 0xa3, 0x3, 0xc8, 0xf, 0x38, 0x7,
+ 0xff, 0x2, 0x30, 0x3f, 0xe7, 0x0, 0xff, 0xe1,
+ 0x46, 0x7, 0xf3, 0x80, 0x7f, 0xf1, 0x23, 0x3,
+ 0xe9, 0x0, 0x7f, 0xf1, 0xa4, 0x1, 0xd1, 0x81,
+ 0xff, 0xc8, 0x70, 0xa, 0x30, 0x3f, 0xf9, 0x4e,
+ 0x8, 0xc0, 0xff, 0xe1, 0x80,
+
+ /* U+F00D "" */
+ 0x3, 0xff, 0x92, 0xff, 0x20, 0x3f, 0x8e, 0xf4,
+ 0x3, 0x80, 0x2a, 0x3, 0xe3, 0x88, 0x54, 0x40,
+ 0x35, 0x40, 0x71, 0xc0, 0x64, 0x48, 0xe, 0xa8,
+ 0x8, 0xe0, 0x3c, 0x78, 0x1e, 0xa8, 0x1c, 0x7,
+ 0xa8, 0x38, 0xf, 0x57, 0x80, 0xf5, 0x40, 0xe,
+ 0x3, 0xd0, 0xf, 0x54, 0x6, 0x38, 0xf, 0xfa,
+ 0xa0, 0x3c, 0x70, 0x1f, 0xd5, 0x1, 0xf8, 0xd0,
+ 0x3e, 0x68, 0xf, 0xe3, 0x40, 0xf9, 0xa0, 0x3f,
+ 0x1c, 0x7, 0xf5, 0x40, 0x78, 0xe0, 0x3f, 0xea,
+ 0x80, 0xc7, 0x1, 0xe8, 0x7, 0xaa, 0x0, 0x70,
+ 0x1e, 0xaf, 0x1, 0xea, 0x87, 0x3, 0xd5, 0x3,
+ 0x80, 0xf5, 0x4, 0xe, 0xa8, 0x8, 0xe0, 0x3c,
+ 0x60, 0x1a, 0xa0, 0x38, 0xe0, 0x32, 0x2e, 0x0,
+ 0xa8, 0xf, 0x8e, 0x21, 0x50, 0xf, 0xf2, 0x3,
+ 0xf8, 0xef, 0x40, 0x0,
+
+ /* U+F011 "" */
+ 0x3, 0xff, 0x80, 0xe4, 0x30, 0x3f, 0xf9, 0x66,
+ 0x36, 0x84, 0xf, 0xff, 0xd, 0x80, 0x7f, 0xf0,
+ 0x25, 0x3, 0xfc, 0x7a, 0x6c, 0x7, 0xf9, 0xb2,
+ 0xe4, 0xf, 0x8e, 0x2, 0x80, 0x7f, 0xa0, 0x16,
+ 0x20, 0x7b, 0x81, 0xff, 0xc8, 0xe0, 0x74, 0x20,
+ 0x6c, 0x7, 0xfb, 0x1, 0x8c, 0x2, 0x2c, 0xd,
+ 0x88, 0x1f, 0xe3, 0x80, 0xcc, 0x80, 0xa0, 0x6a,
+ 0x40, 0xff, 0xe0, 0x1a, 0x6, 0xa0, 0x18, 0x11,
+ 0x40, 0x7f, 0xf0, 0x91, 0x2, 0x60, 0x81, 0xa0,
+ 0x1f, 0xfc, 0x4a, 0x6, 0x28, 0xc, 0x80, 0xff,
+ 0xe2, 0x30, 0x32, 0x3, 0xff, 0x9f, 0xf8, 0x8,
+ 0x81, 0xff, 0xc6, 0x20, 0x7e, 0x20, 0x78, 0x81,
+ 0x88, 0x1e, 0x20, 0x5f, 0x80, 0xff, 0xbe, 0xce,
+ 0x7, 0xff, 0x1, 0x1, 0x90, 0x1f, 0x12, 0x3,
+ 0xe4, 0x6, 0x44, 0xd, 0xc0, 0xff, 0xe2, 0x70,
+ 0x31, 0xc, 0x9, 0x20, 0x1f, 0xfc, 0x24, 0x80,
+ 0x4c, 0x5, 0x3, 0x52, 0x7, 0xff, 0x0, 0xd0,
+ 0x35, 0x0, 0x58, 0x1b, 0x10, 0x3f, 0xc7, 0x1,
+ 0x99, 0x2, 0x80, 0x76, 0x80, 0x7e, 0x98, 0xc,
+ 0x60, 0x1d, 0x80, 0xe7, 0xeb, 0x48, 0xef, 0x60,
+ 0x77, 0x3, 0xc7, 0x1, 0xe5, 0x2d, 0x44, 0x7,
+ 0xb1, 0x3, 0xe3, 0x88, 0x1f, 0xfc, 0x23, 0xc8,
+ 0x1f, 0xc7, 0x40, 0x3f, 0xf8, 0x13, 0x1, 0xff,
+ 0xc1, 0x7e, 0xb2, 0x6, 0x2e, 0xf6, 0x7, 0xff,
+ 0x11, 0x4d, 0xfe, 0xd1, 0x1, 0xfc,
+
+ /* U+F013 "" */
+ 0x3, 0xff, 0xb0, 0x77, 0xfb, 0x30, 0x3f, 0xf8,
+ 0xec, 0x81, 0x8e, 0x3, 0xff, 0xc5, 0x80, 0xf3,
+ 0x3, 0xff, 0x83, 0xa0, 0x5, 0x98, 0x1e, 0x3e,
+ 0x0, 0x79, 0x1, 0xd8, 0xbf, 0x68, 0x81, 0xfc,
+ 0xf6, 0x43, 0x48, 0x13, 0x20, 0x48, 0xf, 0xfe,
+ 0x1, 0x20, 0x28, 0x5, 0x0, 0xff, 0xe5, 0x24,
+ 0xc, 0xf, 0xfe, 0x67, 0x14, 0xf, 0xf4, 0xd9,
+ 0x48, 0x1f, 0xc8, 0x72, 0x7, 0xee, 0xc9, 0x2c,
+ 0x80, 0xfd, 0x1, 0xd0, 0xf, 0x50, 0x3d, 0x40,
+ 0xf2, 0xec, 0x8, 0x81, 0xe4, 0x7, 0xcc, 0xe,
+ 0x20, 0x7f, 0xc4, 0xf, 0xfe, 0x11, 0x3, 0xfe,
+ 0x20, 0x7f, 0xf0, 0x88, 0x1c, 0x40, 0xf2, 0x3,
+ 0xe6, 0x7, 0x10, 0x23, 0xa0, 0x1e, 0xa0, 0x7a,
+ 0x81, 0xe5, 0xd8, 0xe4, 0xf, 0xdd, 0x92, 0x59,
+ 0x1, 0xfa, 0xa, 0x7, 0xfa, 0x6c, 0xa4, 0xf,
+ 0xe4, 0x18, 0x1f, 0xfc, 0xce, 0x2, 0x1, 0xff,
+ 0xca, 0x48, 0x1, 0x90, 0x24, 0x7, 0xff, 0x0,
+ 0x90, 0x15, 0x3, 0x62, 0xfd, 0xa2, 0x7, 0xf3,
+ 0xd9, 0x4d, 0x3, 0xda, 0x0, 0x59, 0x81, 0xe3,
+ 0xe0, 0x5, 0x90, 0x1f, 0xfc, 0xc, 0x7, 0x98,
+ 0x1f, 0xfe, 0x26, 0x40, 0xc7, 0x1, 0xff, 0xc7,
+ 0x3b, 0xfd, 0x98, 0x1f, 0xe0,
+
+ /* U+F015 "" */
+ 0x3, 0xff, 0x84, 0x5b, 0x1, 0xca, 0x49, 0x1,
+ 0xff, 0xc6, 0x7a, 0x46, 0x3, 0x76, 0xee, 0x7,
+ 0xff, 0x16, 0xc0, 0x23, 0xc8, 0x1f, 0xfc, 0xbc,
+ 0x80, 0xf6, 0x60, 0x7f, 0xf2, 0xf, 0x20, 0x4c,
+ 0x81, 0x48, 0x3, 0xff, 0x8c, 0xf0, 0x1b, 0x4c,
+ 0x80, 0x9a, 0x3, 0xff, 0x89, 0x20, 0x8, 0xe2,
+ 0x42, 0xc0, 0x3f, 0xf8, 0xf5, 0x81, 0x2c, 0x66,
+ 0xc2, 0xe8, 0x1f, 0xfc, 0x43, 0x90, 0x13, 0xa2,
+ 0xb0, 0x72, 0x4c, 0x40, 0xff, 0xe0, 0xac, 0x40,
+ 0xac, 0x39, 0x1, 0xab, 0x39, 0x1, 0x2a, 0x7,
+ 0x9d, 0x3, 0x64, 0x71, 0x3, 0xd2, 0x8a, 0xc0,
+ 0x96, 0x3, 0x58, 0x4, 0x79, 0x78, 0xf, 0xe5,
+ 0x84, 0x80, 0x23, 0xc8, 0xa8, 0x9, 0x61, 0x20,
+ 0xf, 0xf8, 0xf2, 0xe8, 0x1b, 0x20, 0x34, 0xa2,
+ 0xb0, 0x3f, 0xf8, 0x59, 0x26, 0x20, 0x4e, 0x91,
+ 0x59, 0xc8, 0xf, 0xfe, 0x25, 0x87, 0x21, 0x8,
+ 0xd8, 0x84, 0x20, 0x7f, 0xf1, 0x99, 0x17, 0x30,
+ 0x22, 0x1, 0x81, 0xff, 0xc8, 0x60, 0x8, 0x1f,
+ 0xfe, 0x3b, 0xfe, 0x20, 0x7f, 0xf3, 0x98, 0x19,
+ 0x81, 0xff, 0xff, 0x3, 0xff, 0xf6, 0x80, 0xf1,
+ 0x20, 0x36, 0x3, 0xe4, 0x7, 0x0,
+
+ /* U+F019 "" */
+ 0x3, 0xfe, 0x29, 0x62, 0x7, 0xff, 0x25, 0x6b,
+ 0x76, 0x40, 0x7f, 0xf2, 0x30, 0x1e, 0xc0, 0x7f,
+ 0xff, 0xc0, 0xff, 0xff, 0x81, 0xff, 0xff, 0x3,
+ 0xff, 0x85, 0xb7, 0x30, 0x3c, 0xf6, 0xe0, 0x3f,
+ 0x91, 0x3c, 0x7, 0xe2, 0x79, 0x1, 0xf9, 0x30,
+ 0x3f, 0xf8, 0x8d, 0x1, 0xfd, 0x18, 0x1f, 0xfc,
+ 0x27, 0x0, 0xff, 0xa3, 0x3, 0xff, 0x80, 0xe0,
+ 0x1f, 0xfc, 0x18, 0xc0, 0xff, 0x38, 0x7, 0xff,
+ 0xe, 0x30, 0x3f, 0x38, 0x7, 0xff, 0x16, 0x30,
+ 0x3c, 0xe0, 0x1f, 0xfc, 0x78, 0xc0, 0xce, 0x1,
+ 0xfe, 0xbf, 0xfe, 0xc2, 0x30, 0xe, 0xd, 0xff,
+ 0xea, 0x80, 0xfc, 0x79, 0x93, 0x1c, 0x40, 0xfc,
+ 0x80, 0xff, 0xb1, 0x6c, 0x71, 0x3, 0xff, 0x95,
+ 0xb6, 0x3, 0xff, 0x9a, 0x48, 0xf, 0xfe, 0xa5,
+ 0xe1, 0x76, 0x7, 0xff, 0x2c, 0x86, 0x7, 0xff,
+ 0x32, 0xe0, 0x7b, 0x2, 0xd1, 0xbf, 0xfe, 0x64,
+ 0xc0,
+
+ /* U+F01C "" */
+ 0x3, 0xc6, 0xff, 0xff, 0xc4, 0x80, 0x7f, 0xf0,
+ 0x72, 0x3, 0xff, 0x88, 0xe0, 0x1f, 0xf5, 0x3,
+ 0xff, 0x8e, 0xc8, 0x1f, 0xc9, 0x0, 0x16, 0xff,
+ 0xf8, 0x40, 0x5c, 0xf, 0xea, 0x5, 0xe4, 0xff,
+ 0xe1, 0x20, 0x6, 0x1, 0xf5, 0x2, 0x64, 0xf,
+ 0xfe, 0x15, 0x2, 0x64, 0xe, 0x48, 0x0, 0xc0,
+ 0x3f, 0xf8, 0x94, 0xb, 0x81, 0xd4, 0xb, 0x81,
+ 0xff, 0xc5, 0x48, 0x0, 0xc0, 0x2a, 0x4, 0xc8,
+ 0x1f, 0xfc, 0x6a, 0x4, 0xc8, 0x48, 0x0, 0xc0,
+ 0x3f, 0xf9, 0x14, 0xb, 0x88, 0x4, 0xe4, 0xe6,
+ 0x7, 0xf2, 0x93, 0xb0, 0x11, 0x44, 0x9, 0x37,
+ 0xd1, 0x81, 0xfa, 0xb7, 0xe0, 0x31, 0x3, 0xfe,
+ 0x80, 0x7c, 0xc0, 0xff, 0xb8, 0x1f, 0xfc, 0x6,
+ 0x7, 0xa0, 0x1f, 0xfc, 0xc9, 0xff, 0x80, 0xff,
+ 0xff, 0x81, 0xff, 0xf5, 0xe8, 0xf, 0xfe, 0x92,
+ 0xa8, 0xf, 0xfe, 0x85, 0x20,
+
+ /* U+F021 "" */
+ 0x3, 0xff, 0x98, 0xa4, 0x30, 0x3f, 0x94, 0xdf,
+ 0xea, 0xc8, 0x1d, 0x1b, 0x40, 0x3e, 0x7a, 0xb2,
+ 0x6, 0x53, 0x52, 0x7, 0xff, 0x6, 0xc2, 0x7,
+ 0xf9, 0x6a, 0x7, 0xf8, 0xf4, 0x7, 0xff, 0x9,
+ 0x72, 0xc0, 0xf1, 0xc0, 0x73, 0xbf, 0xea, 0x80,
+ 0xec, 0xc0, 0xf7, 0x3, 0x1d, 0x10, 0x19, 0x5c,
+ 0x40, 0xc4, 0xe, 0x84, 0x9, 0xe2, 0x7, 0xe3,
+ 0x98, 0x1f, 0x8b, 0x2, 0x70, 0xf, 0xfe, 0x4,
+ 0x60, 0x7d, 0x40, 0x8c, 0x3, 0xf1, 0xff, 0x98,
+ 0x1f, 0x30, 0x28, 0x7, 0xf3, 0x3, 0xff, 0x80,
+ 0x40, 0xc8, 0xf, 0xfe, 0x5a, 0x25, 0x0, 0xff,
+ 0x24, 0x27, 0xfc, 0x8d, 0xd8, 0xc0, 0xff, 0xae,
+ 0xdf, 0xea, 0x7, 0xff, 0xb2, 0xed, 0xfe, 0xa0,
+ 0x7f, 0xce, 0xea, 0x51, 0x3f, 0xe4, 0x80, 0x7f,
+ 0xa2, 0x28, 0xf, 0xfe, 0x5a, 0x3, 0x10, 0x3f,
+ 0xf8, 0xc, 0xf, 0xe8, 0x4, 0xc0, 0xf9, 0xff,
+ 0xc4, 0xf, 0xd4, 0x81, 0x50, 0x3e, 0x70, 0xf,
+ 0xfe, 0x4, 0x40, 0x4c, 0x81, 0xf9, 0xd2, 0x7,
+ 0xe3, 0x98, 0x11, 0x80, 0x71, 0x3, 0x2d, 0x50,
+ 0x19, 0x5c, 0x40, 0xdc, 0xf, 0x3c, 0x7, 0x2b,
+ 0xfe, 0xa8, 0xe, 0xc4, 0xf, 0x33, 0xd0, 0x1f,
+ 0xfc, 0x25, 0xc8, 0x1f, 0xeb, 0x90, 0x1f, 0xe3,
+ 0x28, 0x1f, 0xfc, 0x13, 0x74, 0x20, 0x62, 0xee,
+ 0x60, 0x7d, 0x1b, 0x40, 0x38, 0xbd, 0xfe, 0xd1,
+ 0x1, 0xfc,
+
+ /* U+F026 "" */
+ 0x3, 0xff, 0x9a, 0x6b, 0x3, 0xfc, 0x72, 0x80,
+ 0x7f, 0x1c, 0x7, 0xfc, 0x70, 0x1f, 0xf1, 0xc0,
+ 0x71, 0x93, 0xd8, 0xf, 0x66, 0xfc, 0x7, 0xff,
+ 0xfc, 0xf, 0xff, 0x3, 0x3, 0xff, 0x83, 0x3f,
+ 0xf3, 0x3, 0xff, 0x83, 0x18, 0x1f, 0xfc, 0x18,
+ 0xc0, 0xff, 0xe0, 0xc6, 0x7, 0xff, 0x6, 0x30,
+ 0x40, 0xff, 0xa7, 0xc0,
+
+ /* U+F027 "" */
+ 0x3, 0xff, 0xa8, 0x6b, 0x3, 0xff, 0x8a, 0x72,
+ 0x80, 0x7f, 0xf1, 0xe, 0x3, 0xff, 0x8c, 0x70,
+ 0x1f, 0xfc, 0x63, 0x80, 0xff, 0xe0, 0x19, 0x3d,
+ 0x80, 0xff, 0xe0, 0xe6, 0xfc, 0x7, 0xfa, 0xc0,
+ 0x3f, 0xf8, 0xcd, 0x3c, 0x7, 0xff, 0x15, 0x90,
+ 0x58, 0x1f, 0xfc, 0x5c, 0x2, 0x81, 0xff, 0xc6,
+ 0x40, 0x81, 0xff, 0xc6, 0x60, 0x81, 0xff, 0xc5,
+ 0xa4, 0x20, 0x3f, 0xf8, 0x8d, 0x3, 0x0, 0xff,
+ 0xe2, 0x22, 0xb0, 0x60, 0x7f, 0xf0, 0xce, 0xa0,
+ 0x27, 0xfe, 0x60, 0x7f, 0xf2, 0x23, 0x3, 0xff,
+ 0x91, 0x18, 0x1f, 0xfc, 0x88, 0xc0, 0xff, 0xe4,
+ 0x46, 0x8, 0x1f, 0xfc, 0x69, 0xb0, 0xf, 0x80,
+
+ /* U+F028 "" */
+ 0x3, 0xff, 0x97, 0x10, 0x1f, 0xfd, 0x16, 0xd6,
+ 0x80, 0xff, 0xe8, 0x20, 0xb, 0x1, 0xff, 0xc4,
+ 0x35, 0x81, 0xf8, 0xe2, 0xe, 0x3, 0xff, 0x84,
+ 0x72, 0x80, 0x78, 0x80, 0x38, 0x83, 0x0, 0xff,
+ 0xe0, 0x1c, 0x7, 0xe5, 0xba, 0x1, 0x80, 0x32,
+ 0x7, 0xf8, 0xe0, 0x3f, 0xf8, 0x15, 0x80, 0xa0,
+ 0x38, 0x1f, 0xc7, 0x1, 0xfe, 0x50, 0x4, 0x41,
+ 0x20, 0x28, 0x19, 0x3d, 0x80, 0xff, 0xe0, 0x3a,
+ 0x2, 0x80, 0x80, 0x38, 0xcd, 0xf8, 0xf, 0xf6,
+ 0xa0, 0x13, 0x0, 0xc1, 0x20, 0x80, 0xff, 0xe2,
+ 0xb2, 0xb0, 0x8, 0x2, 0x80, 0x40, 0x8, 0x1f,
+ 0xfc, 0x46, 0x41, 0x80, 0x10, 0x20, 0x30, 0x6,
+ 0x7, 0xff, 0x17, 0x10, 0x80, 0x60, 0x4, 0x30,
+ 0x4, 0xf, 0xfe, 0x33, 0x4, 0xf, 0xfe, 0x8b,
+ 0x4, 0xf, 0xfe, 0x86, 0x21, 0x0, 0xc0, 0x8,
+ 0x60, 0x8, 0x1f, 0xfc, 0x46, 0x41, 0x80, 0x10,
+ 0x20, 0x30, 0x6, 0x7, 0xff, 0x11, 0x95, 0x80,
+ 0x40, 0x14, 0x2, 0x0, 0x58, 0x1f, 0xfc, 0x4d,
+ 0x40, 0x26, 0x1, 0x82, 0x41, 0x9, 0xff, 0x98,
+ 0x1f, 0xfc, 0x7, 0x40, 0x50, 0x10, 0x7, 0x3,
+ 0xf4, 0x60, 0x7f, 0x94, 0x1, 0x10, 0x48, 0xa,
+ 0x3, 0xfa, 0x30, 0x3f, 0xf8, 0x15, 0x80, 0xa0,
+ 0x38, 0x1f, 0xf4, 0x60, 0x7e, 0x5b, 0xa0, 0x18,
+ 0x3, 0x20, 0x7f, 0xf0, 0x23, 0x4, 0xf, 0x10,
+ 0x7, 0x10, 0x60, 0x1f, 0xfc, 0x29, 0xf0, 0x1f,
+ 0x8e, 0x20, 0xe0, 0x3f, 0xf9, 0xc8, 0x2, 0xc0,
+ 0x7f, 0xf3, 0xdb, 0x5a, 0x3, 0xc0,
+
+ /* U+F03E "" */
+ 0x17, 0xff, 0xfe, 0x65, 0x15, 0x1, 0xff, 0xcc,
+ 0x55, 0x1, 0xff, 0xce, 0x40, 0x67, 0xb2, 0x1,
+ 0xff, 0xcb, 0x70, 0x93, 0xa0, 0x7f, 0xf2, 0xa8,
+ 0x19, 0x1, 0xff, 0xd9, 0x2c, 0xf, 0xf9, 0x1,
+ 0x88, 0x1f, 0x8e, 0x90, 0x7, 0xfa, 0x20, 0x7,
+ 0x81, 0xf1, 0xc0, 0x1c, 0x3, 0xfd, 0x7f, 0x62,
+ 0x7, 0x8e, 0x3, 0x38, 0x7, 0xff, 0x1c, 0xe0,
+ 0x3c, 0xe0, 0x1f, 0xe3, 0xf0, 0x18, 0xe0, 0x3f,
+ 0x36, 0x3, 0xf1, 0xc0, 0xe0, 0x7, 0x1, 0xff,
+ 0xc6, 0x38, 0x8, 0xe5, 0x80, 0xff, 0xe3, 0x1c,
+ 0x7, 0x1a, 0x7, 0xff, 0x1d, 0x1, 0xff, 0xeb,
+ 0x52, 0x7f, 0xf2, 0x10, 0x1e, 0x2d, 0xff, 0xf2,
+ 0x8, 0x12, 0x3, 0xff, 0x9c, 0xaa, 0x3, 0xff,
+ 0x98, 0xa8,
+
+ /* U+F048 "" */
+ 0x52, 0x40, 0x7f, 0xcd, 0x87, 0x6e, 0x20, 0x7f,
+ 0x59, 0x20, 0x3f, 0xf8, 0x39, 0x0, 0x40, 0x7f,
+ 0xf0, 0x31, 0x3, 0xff, 0x84, 0x79, 0x3, 0xff,
+ 0x84, 0x70, 0x1f, 0xfc, 0x35, 0x80, 0xff, 0xe1,
+ 0xaa, 0x7, 0xff, 0xd, 0xd0, 0x3f, 0xf8, 0x6e,
+ 0x1, 0xff, 0xc3, 0x90, 0x7, 0xff, 0x11, 0x1,
+ 0xff, 0xfb, 0xa4, 0xf, 0xfe, 0x23, 0xc4, 0xf,
+ 0xfe, 0x2e, 0x40, 0x7f, 0xf1, 0x6a, 0x3, 0xff,
+ 0x8b, 0x58, 0x1f, 0xfc, 0x58, 0xc0, 0xff, 0xe2,
+ 0xc8, 0x3, 0xff, 0x8a, 0xe8, 0x1f, 0xfc, 0x55,
+ 0x40, 0x99, 0x3, 0xff, 0x80, 0xb1, 0x29, 0x1f,
+ 0xc4, 0xf, 0xe3, 0xb0, 0x80,
+
+ /* U+F04B "" */
+ 0x5, 0xa0, 0x3f, 0xf9, 0x2f, 0x4b, 0x88, 0x1f,
+ 0xfc, 0x78, 0x4, 0x74, 0x3, 0xff, 0x98, 0xfb,
+ 0x3, 0xff, 0x99, 0x31, 0x3, 0xff, 0x96, 0x75,
+ 0x3, 0xff, 0x98, 0xbb, 0x3, 0xff, 0x99, 0x32,
+ 0x3, 0xff, 0x96, 0x6d, 0x10, 0x3f, 0xf9, 0x6b,
+ 0x40, 0x3f, 0xf9, 0x8f, 0xa0, 0x3f, 0xf9, 0x96,
+ 0x88, 0x1f, 0xfc, 0xb5, 0x98, 0x1f, 0xfc, 0xc8,
+ 0x80, 0xff, 0xe6, 0x10, 0x3f, 0xf9, 0x84, 0xf,
+ 0xfe, 0x5c, 0x40, 0x7f, 0xf2, 0x56, 0x60, 0x7f,
+ 0xf2, 0x6d, 0x10, 0x3f, 0xf9, 0xf, 0xa0, 0x3f,
+ 0xf9, 0xb, 0x40, 0x3f, 0xf9, 0x6, 0xd1, 0x3,
+ 0xff, 0x91, 0x32, 0x3, 0xff, 0x90, 0xbb, 0x3,
+ 0xff, 0x90, 0x75, 0x3, 0xff, 0x93, 0x31, 0x3,
+ 0xff, 0x90, 0xfb, 0x3, 0xff, 0x89, 0x0, 0x8e,
+ 0x80, 0x7f, 0xf1, 0x9e, 0x97, 0x10, 0x3f, 0xf8,
+ 0xe0,
+
+ /* U+F04C "" */
+ 0x17, 0xff, 0x64, 0x7, 0x5f, 0xfd, 0x90, 0xa8,
+ 0xf, 0x1a, 0x40, 0xaa, 0x3, 0xc6, 0x94, 0x7,
+ 0xf2, 0x2, 0x40, 0x7f, 0x20, 0x3f, 0xdc, 0xf,
+ 0xfe, 0xf, 0x3, 0xff, 0xfe, 0x7, 0xff, 0xfc,
+ 0xf, 0xff, 0xf8, 0x1f, 0xff, 0xf0, 0x3f, 0xff,
+ 0xe0, 0x7f, 0xfc, 0x38, 0x1f, 0xfc, 0x1e, 0x7,
+ 0xff, 0x36, 0x1, 0xf8, 0xb0, 0x28, 0x7, 0xe2,
+ 0xda, 0xb7, 0xe9, 0x80, 0xce, 0xb7, 0xe9, 0x80,
+
+ /* U+F04D "" */
+ 0x6, 0x4f, 0xfe, 0x43, 0x0, 0xf3, 0x7f, 0xfc,
+ 0x89, 0x84, 0x3, 0xff, 0x94, 0x58, 0x1f, 0xfe,
+ 0x5e, 0x7, 0xff, 0xfc, 0xf, 0xff, 0xf8, 0x1f,
+ 0xff, 0xf0, 0x3f, 0xff, 0xe0, 0x7f, 0xff, 0xc0,
+ 0xff, 0xff, 0x74, 0x7, 0xff, 0x2d, 0x54, 0x7,
+ 0xff, 0x20, 0xd2,
+
+ /* U+F051 "" */
+ 0xa, 0x1, 0xff, 0x39, 0xd, 0x57, 0xc8, 0x1f,
+ 0xd1, 0xb4, 0x20, 0x58, 0x81, 0xff, 0xc0, 0xe0,
+ 0x6c, 0x80, 0xff, 0xe2, 0xd4, 0x7, 0xff, 0x16,
+ 0xb0, 0x3f, 0xf8, 0xb2, 0x0, 0xff, 0xe2, 0xb8,
+ 0x7, 0xff, 0x15, 0xd0, 0x3f, 0xf8, 0xaa, 0x81,
+ 0xff, 0xc5, 0x58, 0xf, 0xfe, 0x29, 0x3, 0xff,
+ 0xf7, 0x80, 0xff, 0xe2, 0x62, 0x7, 0xff, 0x8,
+ 0xe2, 0x7, 0xff, 0x8, 0xe2, 0x7, 0xff, 0x8,
+ 0xe0, 0x3f, 0xf8, 0x6b, 0x1, 0xff, 0xc3, 0x54,
+ 0xf, 0xfe, 0x1b, 0xa0, 0x7f, 0xdc, 0x9, 0xc0,
+ 0x3f, 0xf8, 0xc, 0x89, 0x0, 0x7f, 0x10, 0x4,
+ 0x6e, 0xc0, 0xff, 0x6f, 0xd8,
+
+ /* U+F052 "" */
+ 0x3, 0xff, 0x81, 0x2a, 0x3, 0xff, 0x95, 0xda,
+ 0xb0, 0xf, 0xfe, 0x46, 0x3, 0x36, 0x3, 0xff,
+ 0x8d, 0x88, 0x1d, 0x10, 0x1f, 0xfc, 0x4a, 0x40,
+ 0xfa, 0xa0, 0x3f, 0xf8, 0x55, 0x1, 0xfd, 0x48,
+ 0x1f, 0xfc, 0x8, 0x80, 0xff, 0xb1, 0x3, 0xfd,
+ 0x18, 0x1f, 0xfc, 0x1c, 0x7, 0xf3, 0x60, 0x3f,
+ 0xf8, 0x78, 0xf, 0x94, 0x3, 0xff, 0x88, 0x70,
+ 0x1c, 0xa8, 0x1f, 0xfc, 0x63, 0x40, 0x8d, 0x3,
+ 0xff, 0x90, 0xa8, 0xe, 0x7, 0xff, 0x29, 0x20,
+ 0x20, 0x7f, 0xf2, 0xc8, 0x40, 0x7f, 0xf2, 0xd0,
+ 0xa8, 0xf, 0xfe, 0x4c, 0x20, 0x2f, 0xff, 0xfc,
+ 0x96, 0x7, 0xff, 0x41, 0xff, 0xff, 0xca, 0xc0,
+ 0x20, 0x1f, 0xfc, 0xa2, 0xc0, 0xff, 0xe6, 0xf0,
+ 0x3f, 0xff, 0xe0, 0x38, 0xa0, 0x7f, 0xf2, 0x93,
+
+ /* U+F053 "" */
+ 0x3, 0xfe, 0x30, 0x81, 0xff, 0xc0, 0x59, 0xe2,
+ 0x7, 0xf9, 0x50, 0x2c, 0x7, 0xf2, 0xa0, 0x62,
+ 0x7, 0xe5, 0x40, 0xc7, 0x1, 0xf2, 0xa0, 0x63,
+ 0x80, 0xf9, 0x50, 0x31, 0xc0, 0x7c, 0xa8, 0x18,
+ 0xe0, 0x3e, 0x54, 0xc, 0x70, 0x1f, 0x2a, 0x6,
+ 0x38, 0xf, 0x95, 0x3, 0x1c, 0x7, 0xc6, 0x81,
+ 0x8e, 0x3, 0xf2, 0x3, 0xa8, 0x1f, 0xcd, 0x1,
+ 0xa3, 0x3, 0xfa, 0xa0, 0x34, 0x60, 0x7f, 0x54,
+ 0x6, 0x8c, 0xf, 0xea, 0x80, 0xd1, 0x81, 0xfd,
+ 0x50, 0x1a, 0x30, 0x3f, 0xa9, 0x3, 0x46, 0x7,
+ 0xf6, 0x20, 0x68, 0xc0, 0xfe, 0xc4, 0xd, 0x18,
+ 0x1f, 0xd8, 0x81, 0xa0, 0x1f, 0xec, 0x40, 0x90,
+ 0x1f, 0xf6, 0x41, 0x50, 0x3f, 0xf8, 0x17, 0x50,
+ 0x0,
+
+ /* U+F054 "" */
+ 0x0, 0xe0, 0x1f, 0xfc, 0x1b, 0x1d, 0x3, 0xfe,
+ 0x68, 0x2, 0xa0, 0x7f, 0x88, 0x19, 0x50, 0x3f,
+ 0x94, 0x3, 0x2a, 0x7, 0xf3, 0x80, 0x65, 0x40,
+ 0xfe, 0x70, 0xc, 0xa8, 0x1f, 0xce, 0x1, 0x95,
+ 0x3, 0xf9, 0xc0, 0x32, 0xa0, 0x7f, 0x38, 0x6,
+ 0x54, 0xf, 0xe7, 0x0, 0xca, 0x81, 0xfc, 0xe0,
+ 0x19, 0x50, 0x3f, 0x98, 0x1c, 0x80, 0xfe, 0xc0,
+ 0x75, 0x3, 0xf6, 0x20, 0x6a, 0x80, 0xfb, 0x10,
+ 0x35, 0x40, 0x7d, 0x88, 0x1a, 0xa0, 0x3e, 0xc4,
+ 0xd, 0x50, 0x1f, 0x62, 0x6, 0xa8, 0xf, 0xb1,
+ 0x3, 0x54, 0x7, 0xd8, 0x81, 0xaa, 0x3, 0xe6,
+ 0x40, 0xd5, 0x1, 0xf9, 0x1, 0xaa, 0x3, 0xf8,
+ 0xe0, 0x15, 0x1, 0xff, 0x1f, 0xc8, 0xf, 0xf8,
+
+ /* U+F067 "" */
+ 0x3, 0xfc, 0xad, 0x40, 0x3f, 0xf9, 0x6, 0xa4,
+ 0x74, 0xf, 0xfe, 0x3b, 0x3, 0x30, 0x3f, 0xf8,
+ 0xe4, 0xc, 0x40, 0xff, 0xff, 0x81, 0xff, 0xff,
+ 0x3, 0xfc, 0xff, 0xfd, 0x0, 0xef, 0xff, 0x61,
+ 0x0, 0xff, 0xe5, 0x16, 0x7, 0xff, 0x33, 0x81,
+ 0xff, 0xcc, 0xec, 0xf, 0xfe, 0x5a, 0x9b, 0x7e,
+ 0x60, 0x76, 0xdf, 0xb9, 0x4, 0xfe, 0xe0, 0x71,
+ 0x3f, 0x80, 0xff, 0xff, 0x81, 0xff, 0xff, 0x3,
+ 0xfe, 0x20, 0x62, 0x7, 0xff, 0x1d, 0x32, 0x6e,
+ 0x7, 0xf8,
+
+ /* U+F068 "" */
+ 0x0, 0x4f, 0xff, 0x20, 0xa, 0x7d, 0xbf, 0xf9,
+ 0x1f, 0x83, 0x3, 0xff, 0x96, 0xc0, 0xff, 0xe6,
+ 0x70, 0x3f, 0xf9, 0x9e, 0x1, 0xff, 0xcb, 0x6d,
+ 0xf6, 0xff, 0xe4, 0x7e, 0x0,
+
+ /* U+F06E "" */
+ 0x3, 0xfc, 0x5d, 0xdf, 0xed, 0x10, 0x1f, 0xfc,
+ 0x75, 0xb2, 0x22, 0x6, 0x2e, 0xfa, 0x40, 0xff,
+ 0xe1, 0x1d, 0x48, 0x19, 0x28, 0x81, 0x96, 0x80,
+ 0x7f, 0xf0, 0x26, 0x20, 0x46, 0xfb, 0x6d, 0xd8,
+ 0x19, 0xf4, 0x7, 0xf5, 0x60, 0x65, 0x90, 0x1e,
+ 0x98, 0xe, 0xac, 0xf, 0xb2, 0x3, 0x2a, 0x4,
+ 0x64, 0x20, 0x7, 0x1, 0xd1, 0x81, 0xd4, 0x81,
+ 0xd4, 0xe, 0x6d, 0x71, 0x6, 0x81, 0xd1, 0x1,
+ 0x34, 0x7, 0x40, 0x3f, 0x8e, 0x0, 0x88, 0x1d,
+ 0x48, 0x30, 0xf, 0x20, 0x3a, 0x1, 0xd0, 0x2,
+ 0x3, 0xdc, 0x40, 0x3e, 0x21, 0x47, 0x50, 0x1c,
+ 0x80, 0x60, 0x3c, 0x52, 0x1, 0xfc, 0x5c, 0x40,
+ 0x78, 0x81, 0xfe, 0xc8, 0xf, 0xfe, 0x96, 0xa0,
+ 0x7c, 0x43, 0x3, 0xf9, 0x80, 0xc0, 0x78, 0xa1,
+ 0x0, 0xf2, 0x0, 0xc0, 0xfd, 0x40, 0x20, 0x3d,
+ 0xc0, 0x34, 0x7, 0x40, 0x11, 0x1, 0xea, 0x42,
+ 0x20, 0x75, 0x20, 0x55, 0x1, 0xd4, 0x5, 0xa4,
+ 0x49, 0xf4, 0xd, 0x3, 0xa2, 0x3, 0xaa, 0x3,
+ 0x2a, 0x1, 0x5d, 0x90, 0x1, 0xc0, 0x74, 0x60,
+ 0x7d, 0x60, 0x19, 0x64, 0x7, 0xa6, 0x3, 0xab,
+ 0x3, 0xf9, 0xe2, 0x4, 0x6f, 0xb6, 0xdd, 0x81,
+ 0x9f, 0x40, 0x7f, 0xc7, 0x52, 0x6, 0x4a, 0x20,
+ 0x65, 0xa0, 0x1f, 0xfc, 0x35, 0xb2, 0x22, 0x6,
+ 0x2e, 0xfa, 0x40, 0xfc,
+
+ /* U+F070 "" */
+ 0x9, 0x0, 0xff, 0xea, 0x2b, 0x50, 0xf, 0xfe,
+ 0x9d, 0x0, 0xf0, 0x1f, 0xfd, 0x26, 0x4, 0x79,
+ 0x3, 0xff, 0xa1, 0x28, 0x1b, 0x30, 0x31, 0x77,
+ 0x7f, 0x6a, 0xc8, 0x1f, 0xfc, 0x15, 0x88, 0x14,
+ 0xa1, 0xec, 0x88, 0x81, 0x15, 0x36, 0x30, 0x3f,
+ 0xf8, 0x7, 0x20, 0x25, 0xe1, 0x3, 0x25, 0x1,
+ 0x8c, 0xec, 0xf, 0xfe, 0x5, 0x80, 0x7c, 0x6f,
+ 0xb6, 0xf9, 0x1, 0xa5, 0x3, 0xff, 0x80, 0xf0,
+ 0x1c, 0x72, 0x3, 0x8d, 0x80, 0x65, 0xc8, 0x1f,
+ 0xf1, 0xe8, 0x8, 0xe0, 0xe, 0xd2, 0x0, 0xe0,
+ 0x1d, 0x88, 0x1f, 0xfc, 0xa, 0xc0, 0x8f, 0x41,
+ 0x25, 0xc0, 0x1a, 0x3, 0xb8, 0x1f, 0x5c, 0x40,
+ 0xa5, 0x3, 0x5a, 0x2, 0x38, 0x4, 0x3, 0x8d,
+ 0x3, 0x92, 0x1c, 0x80, 0x96, 0x20, 0x44, 0xc,
+ 0x50, 0x20, 0x79, 0x20, 0x1a, 0x81, 0x58, 0x4,
+ 0x72, 0x3, 0xf7, 0x0, 0x80, 0xf5, 0x2, 0x20,
+ 0x73, 0xc4, 0xa, 0xc0, 0x3f, 0xf8, 0xc4, 0x1,
+ 0x3, 0xc7, 0x81, 0x9e, 0x3, 0xf9, 0x81, 0xf1,
+ 0x2, 0xa0, 0x78, 0x81, 0xc7, 0xa0, 0x33, 0x20,
+ 0x81, 0xea, 0x6, 0x48, 0x7, 0x90, 0x1e, 0xb0,
+ 0x8, 0xe8, 0x7, 0x9a, 0x3, 0xa9, 0x3, 0xa0,
+ 0x1f, 0x3a, 0x6, 0x60, 0x71, 0x80, 0x7d, 0xc0,
+ 0xe3, 0x0, 0xf9, 0x72, 0x7, 0xec, 0x7, 0xe3,
+ 0x88, 0x19, 0xb0, 0x1f, 0xb3, 0x3, 0xd8, 0xf,
+ 0xf1, 0xc8, 0xd, 0x32, 0x3, 0xe9, 0x40, 0xe4,
+ 0x7, 0xff, 0x2, 0xc0, 0x31, 0xbe, 0xd9, 0x1,
+ 0x2c, 0x40, 0xa5, 0x3, 0xff, 0x80, 0xfc, 0x20,
+ 0x64, 0xab, 0x0, 0x8e, 0x40, 0x4b, 0x10, 0x3f,
+ 0xf8, 0xf, 0x64, 0x44, 0x8, 0x92, 0x3, 0x58,
+ 0x4, 0x72, 0x3, 0xff, 0x82, 0x5d, 0xdf, 0xda,
+ 0xa0, 0x39, 0xe0, 0x35, 0x80, 0x7f, 0xf4, 0xf,
+ 0x20, 0x4c, 0xf, 0xfe, 0x96, 0x60, 0x28, 0x1f,
+ 0xfd, 0x39, 0x69, 0x0,
+
+ /* U+F071 "" */
+ 0x3, 0xff, 0x86, 0xa3, 0x3, 0xff, 0xa2, 0xab,
+ 0x98, 0xf, 0xfe, 0x85, 0x2, 0x2c, 0xf, 0xfe,
+ 0x74, 0x3, 0xa0, 0x1f, 0xfc, 0xd2, 0xc0, 0xf5,
+ 0x3, 0xff, 0x99, 0x0, 0xf9, 0x10, 0x3f, 0xf9,
+ 0x49, 0x0, 0xfd, 0xc0, 0xff, 0xe5, 0x40, 0x3f,
+ 0x8a, 0x3, 0xff, 0x90, 0xc8, 0x1f, 0xea, 0x7,
+ 0xff, 0x22, 0x1, 0xff, 0xc0, 0x80, 0x7f, 0xf1,
+ 0xa0, 0x19, 0xff, 0x80, 0xcc, 0xf, 0xfe, 0x29,
+ 0x60, 0x6e, 0x7, 0xf5, 0x3, 0xff, 0x89, 0x0,
+ 0xff, 0xe1, 0xa2, 0x7, 0xff, 0x9, 0x20, 0x1d,
+ 0xc0, 0xff, 0x70, 0x3f, 0xf8, 0x50, 0xf, 0xfe,
+ 0x29, 0x40, 0x7f, 0xf0, 0x19, 0x3, 0xff, 0x8d,
+ 0x40, 0xff, 0xe0, 0x40, 0x3e, 0x20, 0x44, 0xf,
+ 0xd0, 0xf, 0xf4, 0x3, 0xff, 0x92, 0xc0, 0xfe,
+ 0x2c, 0xf, 0xcc, 0x9, 0x1, 0xfd, 0x40, 0xfd,
+ 0x0, 0xfe, 0x3f, 0xd0, 0xf, 0xe4, 0x40, 0xf2,
+ 0x40, 0x3f, 0xd7, 0xf2, 0x3, 0xfd, 0xc0, 0xf4,
+ 0x3, 0xfd, 0x10, 0xa, 0x7, 0xf8, 0xb0, 0x33,
+ 0x20, 0x7f, 0x88, 0x18, 0x81, 0xfe, 0x80, 0x68,
+ 0x7, 0xfd, 0x80, 0xc4, 0xf, 0xfa, 0x0, 0x80,
+ 0x7f, 0xf0, 0x1b, 0x3, 0x80, 0xff, 0xe0, 0x30,
+ 0xc, 0xf, 0xfe, 0xc, 0xf8, 0x81, 0xff, 0xc1,
+ 0x60, 0x7f, 0xf5, 0xa0, 0x1f, 0xfd, 0x26, 0x1d,
+ 0x6f, 0xff, 0x9f, 0x38,
+
+ /* U+F074 "" */
+ 0x3, 0xff, 0x92, 0xe9, 0x3, 0xff, 0x9b, 0x16,
+ 0x20, 0x7f, 0xf3, 0xf1, 0x0, 0x52, 0xe2, 0x7,
+ 0xf8, 0xa5, 0x1, 0xb1, 0x1a, 0xde, 0xd4, 0xf,
+ 0xc7, 0x5b, 0x1, 0xd8, 0x81, 0xf2, 0xa0, 0x78,
+ 0xe0, 0x3f, 0xd8, 0xf, 0xca, 0x1, 0x8e, 0x3,
+ 0xfe, 0x20, 0x7f, 0x38, 0x5, 0x80, 0xff, 0x8e,
+ 0xfb, 0x68, 0x6, 0x20, 0x30, 0x18, 0xec, 0x3,
+ 0x1c, 0x0, 0x9c, 0xe0, 0x5, 0x46, 0x20, 0x47,
+ 0x12, 0x2, 0x38, 0xf, 0xcd, 0x8d, 0x18, 0x81,
+ 0xb8, 0x1c, 0x70, 0x1f, 0xe9, 0x85, 0x20, 0x6c,
+ 0x40, 0xab, 0xc0, 0x7f, 0xf0, 0x6a, 0x3, 0x62,
+ 0x6, 0x50, 0xf, 0xfe, 0xc, 0x40, 0x6a, 0x40,
+ 0xe5, 0x0, 0xff, 0xe0, 0x46, 0x6, 0xa9, 0x39,
+ 0x2, 0xaf, 0x90, 0x3f, 0x9b, 0x1, 0xa2, 0x4a,
+ 0x38, 0x1e, 0xc4, 0x8, 0x9c, 0xe0, 0x1a, 0x33,
+ 0x40, 0x1c, 0x48, 0xd, 0x88, 0xfb, 0x68, 0x6,
+ 0x6c, 0x8, 0x18, 0xec, 0x3, 0xb1, 0x3, 0xf9,
+ 0xc0, 0x2c, 0x7, 0xff, 0x3, 0x81, 0xf9, 0x40,
+ 0x31, 0xc0, 0x7f, 0xf1, 0xd5, 0x3, 0xc7, 0x1,
+ 0xfe, 0xfa, 0xde, 0xd4, 0xf, 0xc7, 0x5b, 0x1,
+ 0xd8, 0x92, 0x5c, 0x40, 0xff, 0x14, 0xa0, 0x36,
+ 0x20, 0x7f, 0xf3, 0x71, 0x3, 0xff, 0x97, 0x16,
+ 0x20, 0x40,
+
+ /* U+F077 "" */
+ 0x3, 0xfe, 0x74, 0x81, 0xff, 0xc9, 0x90, 0xb1,
+ 0x3, 0xff, 0x8f, 0x18, 0x16, 0x20, 0x7f, 0xf1,
+ 0x63, 0x3, 0xb1, 0x3, 0xff, 0x87, 0x18, 0x1f,
+ 0x62, 0x7, 0xff, 0x6, 0x30, 0x3f, 0xb1, 0x3,
+ 0xfe, 0x8c, 0xc, 0xb0, 0x1d, 0x88, 0x1f, 0xd1,
+ 0x81, 0x95, 0x38, 0xe, 0xc4, 0xf, 0xa3, 0x3,
+ 0x2a, 0x0, 0xe0, 0x3b, 0x10, 0x3a, 0x30, 0x32,
+ 0xa0, 0x63, 0x80, 0xec, 0x40, 0xa3, 0x3, 0x2a,
+ 0x7, 0x8e, 0x3, 0xb1, 0xd, 0x80, 0xca, 0x81,
+ 0xf8, 0xe0, 0x3b, 0xe, 0x6, 0x54, 0xf, 0xf1,
+ 0xc0, 0x7a, 0x10, 0xa, 0x81, 0xff, 0xc0, 0x38,
+ 0xa, 0x0, 0xc9, 0xd0, 0x3f, 0xf8, 0x47, 0x2a,
+ 0xc0,
+
+ /* U+F078 "" */
+ 0x1, 0x60, 0x1f, 0xfc, 0x43, 0x58, 0x16, 0x4e,
+ 0x81, 0xff, 0xc2, 0x39, 0x46, 0x21, 0x0, 0xa8,
+ 0x1f, 0xfc, 0x3, 0x80, 0xa0, 0xe0, 0x65, 0x40,
+ 0xff, 0x1c, 0x6, 0x21, 0xb0, 0x19, 0x50, 0x3f,
+ 0x1c, 0x7, 0x70, 0x11, 0x81, 0x95, 0x3, 0xc7,
+ 0x1, 0xd8, 0x81, 0x46, 0x6, 0x54, 0xc, 0x70,
+ 0x1d, 0x88, 0x1d, 0x18, 0x19, 0x50, 0x7, 0x1,
+ 0xd8, 0x81, 0xf4, 0x60, 0x65, 0x4e, 0x3, 0xb1,
+ 0x3, 0xfa, 0x30, 0x32, 0xc0, 0x76, 0x20, 0x7f,
+ 0xd1, 0x81, 0xfd, 0x88, 0x1f, 0xfc, 0x18, 0xc0,
+ 0xfb, 0x10, 0x3f, 0xf8, 0x71, 0x81, 0xd8, 0x81,
+ 0xff, 0xc5, 0x8c, 0xb, 0x10, 0x3f, 0xf8, 0xf2,
+ 0x16, 0x20, 0x7f, 0x80,
+
+ /* U+F079 "" */
+ 0x3, 0xc8, 0x81, 0xff, 0xd4, 0x97, 0x20, 0x3f,
+ 0xfa, 0x51, 0x80, 0xa8, 0xc, 0x9b, 0xff, 0xe1,
+ 0x1, 0xfd, 0x18, 0x1a, 0xa0, 0xa, 0xc9, 0xff,
+ 0xc2, 0x60, 0x7d, 0x18, 0x1e, 0xa8, 0x30, 0x3f,
+ 0xf8, 0x7c, 0xf, 0x46, 0x7, 0xea, 0x8d, 0x3,
+ 0xff, 0x91, 0x18, 0x1f, 0xea, 0x93, 0xff, 0xf8,
+ 0xf, 0xe6, 0x5, 0x40, 0x9b, 0x1, 0x60, 0x3f,
+ 0xf9, 0x30, 0x5, 0x40, 0x68, 0x80, 0x50, 0x3f,
+ 0xf9, 0x2f, 0x62, 0x3, 0xd6, 0xb9, 0x3, 0xff,
+ 0x94, 0x48, 0xf, 0xc8, 0xf, 0xff, 0xf8, 0x1f,
+ 0xfd, 0xc9, 0x0, 0x7c, 0x6b, 0x3, 0xff, 0x95,
+ 0x9b, 0x50, 0x38, 0xe5, 0x18, 0x1f, 0xfc, 0x92,
+ 0x1, 0x40, 0x23, 0xc0, 0xb8, 0x1f, 0x93, 0x7f,
+ 0xe2, 0x28, 0x13, 0x2, 0x44, 0x1, 0x80, 0x7e,
+ 0x32, 0x7f, 0xb2, 0x4a, 0x7, 0xf1, 0xc0, 0x7f,
+ 0xf2, 0x68, 0x54, 0xf, 0x8e, 0x3, 0xe6, 0x7,
+ 0xff, 0x9, 0x0, 0x58, 0xe, 0x38, 0xf, 0xd3,
+ 0xff, 0xfe, 0x15, 0x2, 0x38, 0x8, 0xe0, 0x3f,
+ 0xfa, 0x27, 0x15, 0x80, 0xe0,
+
+ /* U+F07B "" */
+ 0x17, 0xff, 0xec, 0x7, 0xff, 0x12, 0xa0, 0x3f,
+ 0x8e, 0x3, 0xff, 0x86, 0x80, 0xff, 0x8e, 0x3,
+ 0xff, 0x9e, 0x74, 0x9f, 0xe6, 0x40, 0xff, 0xe1,
+ 0x96, 0xff, 0xd3, 0x20, 0x3f, 0xf9, 0xf4, 0xf,
+ 0xff, 0xf8, 0x1f, 0xff, 0xf0, 0x3f, 0xff, 0xe0,
+ 0x7f, 0xff, 0xc0, 0xff, 0xfa, 0x20, 0x3f, 0xf9,
+ 0xca, 0xa0, 0x3f, 0xf9, 0x8a, 0x80,
+
+ /* U+F093 "" */
+ 0x3, 0xff, 0x82, 0x40, 0xff, 0xe7, 0x3d, 0xc8,
+ 0x1f, 0xfc, 0xb7, 0x0, 0x62, 0x7, 0xff, 0x25,
+ 0xc0, 0x36, 0x20, 0x7f, 0xf1, 0xdc, 0x3, 0xd8,
+ 0x81, 0xff, 0xc5, 0x70, 0xf, 0xd8, 0x81, 0xff,
+ 0xc3, 0x70, 0xf, 0xf6, 0x20, 0x7f, 0xf0, 0x5c,
+ 0x3, 0xff, 0x81, 0x88, 0x1f, 0xf3, 0x80, 0x7f,
+ 0xf0, 0xb1, 0x3, 0xf9, 0x40, 0x3f, 0xf8, 0x98,
+ 0xf, 0xe2, 0x7, 0xff, 0x3d, 0xed, 0xc4, 0xf,
+ 0x4d, 0xb7, 0x3, 0xfc, 0x4f, 0x30, 0x3c, 0x4f,
+ 0x1, 0xff, 0xff, 0x3, 0xff, 0xfe, 0x7, 0xff,
+ 0xa2, 0xff, 0xf6, 0x3, 0xf3, 0x1b, 0xff, 0xaa,
+ 0x3, 0xe2, 0x2b, 0x7d, 0x8, 0x20, 0x7c, 0x80,
+ 0xfe, 0xc2, 0x4e, 0x63, 0x1, 0xff, 0xc6, 0x3f,
+ 0x6f, 0x72, 0x7, 0xff, 0x20, 0x9f, 0x1, 0xff,
+ 0xd2, 0xbc, 0x2e, 0xc0, 0xff, 0xe5, 0x90, 0xc0,
+ 0xff, 0xe6, 0x5c, 0xf, 0x60, 0x5a, 0x37, 0xff,
+ 0xcc, 0x98,
+
+ /* U+F095 "" */
+ 0x3, 0xff, 0x92, 0xd8, 0x81, 0xff, 0xcd, 0x52,
+ 0x37, 0xac, 0x81, 0xff, 0xc9, 0xe0, 0x65, 0x36,
+ 0x1, 0xff, 0xc7, 0x28, 0xf, 0x88, 0x1f, 0xfc,
+ 0x7a, 0x7, 0xff, 0x41, 0x81, 0xff, 0xcf, 0x60,
+ 0x7f, 0x10, 0x3f, 0xf8, 0xd4, 0xf, 0xe6, 0x7,
+ 0xff, 0x19, 0x81, 0xfd, 0x80, 0xff, 0xe3, 0x54,
+ 0x7, 0xe4, 0x7, 0xff, 0x1e, 0xb0, 0x3e, 0x20,
+ 0x7f, 0xf2, 0x24, 0x1, 0xcc, 0xf, 0xfe, 0x56,
+ 0x3, 0xb0, 0x1f, 0xfc, 0x92, 0x80, 0xc5, 0x1,
+ 0xff, 0xc9, 0xe0, 0x74, 0x3, 0xff, 0x93, 0x8,
+ 0x18, 0xa0, 0x3f, 0xf9, 0xd, 0x80, 0xee, 0x7,
+ 0xf8, 0xb0, 0x3f, 0x28, 0x7, 0x32, 0x7, 0xe5,
+ 0x74, 0xc0, 0x79, 0xd0, 0x38, 0xc0, 0x3e, 0x7a,
+ 0xa0, 0x6, 0x81, 0xac, 0x3, 0xd8, 0xf, 0x3f,
+ 0x8, 0x1c, 0x98, 0x5d, 0x1, 0xec, 0x7, 0xd0,
+ 0xf, 0xe9, 0xa8, 0x1f, 0x62, 0x7, 0xc4, 0xf,
+ 0xf1, 0x3, 0xc7, 0x10, 0x3f, 0x20, 0x3f, 0xf8,
+ 0x8b, 0x10, 0x3f, 0xb0, 0x1f, 0xfc, 0x39, 0x40,
+ 0xff, 0x90, 0x1f, 0xfc, 0x17, 0xd8, 0x1f, 0xfc,
+ 0x12, 0x7, 0xf9, 0xf8, 0x7, 0xff, 0xd, 0x1,
+ 0xe2, 0xef, 0x80, 0x7f, 0xf1, 0x64, 0xd7, 0x7d,
+ 0x10, 0x1f, 0xfc, 0x50,
+
+ /* U+F0C4 "" */
+ 0x2, 0x52, 0x19, 0x3, 0xff, 0x8c, 0x75, 0x6d,
+ 0x33, 0x3, 0xfc, 0xed, 0x40, 0x2c, 0x40, 0xe8,
+ 0xc0, 0xf8, 0xf8, 0x91, 0xf3, 0x0, 0xfd, 0x0,
+ 0xf1, 0xc0, 0x79, 0xa0, 0x2f, 0xd0, 0x9, 0x1,
+ 0x8e, 0x3, 0xd5, 0x10, 0xc, 0x3, 0x2, 0x20,
+ 0x47, 0x1, 0xea, 0x80, 0xc8, 0x2, 0x3, 0xc7,
+ 0x1, 0xea, 0x80, 0x20, 0x7, 0x5a, 0x2, 0x20,
+ 0xe0, 0x3d, 0x50, 0x14, 0x2, 0x28, 0xd, 0x56,
+ 0x3, 0xd5, 0x1, 0x8d, 0x3, 0xfa, 0x81, 0xea,
+ 0x80, 0xf2, 0xec, 0x90, 0x1f, 0xf5, 0x40, 0x7f,
+ 0x4d, 0x94, 0xf, 0xea, 0x80, 0xff, 0xe0, 0xa8,
+ 0x7, 0xd1, 0x1, 0xff, 0xc2, 0x30, 0xf, 0xa1,
+ 0x3, 0xfe, 0x52, 0x30, 0x1f, 0xd8, 0x81, 0xf8,
+ 0xea, 0xd8, 0xf, 0xfb, 0x10, 0x3e, 0xc4, 0xf,
+ 0xcc, 0xf, 0x62, 0x7, 0x40, 0x3f, 0xa4, 0x50,
+ 0x3d, 0x88, 0x19, 0x1, 0x7e, 0x80, 0x44, 0x2a,
+ 0x7, 0xb1, 0x2, 0x20, 0x18, 0x6, 0x4, 0x40,
+ 0x2a, 0x7, 0xb1, 0x3, 0x90, 0x4, 0x7, 0xca,
+ 0x81, 0xec, 0x42, 0x0, 0x75, 0xa0, 0x24, 0x6,
+ 0x54, 0xf, 0x63, 0x0, 0x8a, 0x2, 0x64, 0xe,
+ 0x54, 0xf, 0x33, 0x40, 0xf2, 0x80, 0x7c, 0xb2,
+ 0x0, 0xb2, 0xb, 0xb2, 0x4a, 0xd0, 0x1f, 0xc6,
+ 0xfe, 0xa4, 0x0,
+
+ /* U+F0C5 "" */
+ 0x3, 0xf2, 0x5f, 0xc4, 0x10, 0x3f, 0xf8, 0x1a,
+ 0xdf, 0xf0, 0xd4, 0xf, 0xf8, 0x81, 0xff, 0xc0,
+ 0x54, 0xf, 0xfe, 0x62, 0xa0, 0x7f, 0xf3, 0x15,
+ 0x3, 0xff, 0x98, 0x92, 0xff, 0x90, 0x1f, 0xf1,
+ 0x1f, 0xf2, 0x40, 0x3f, 0xf8, 0x8b, 0x5b, 0xc4,
+ 0xf, 0xfe, 0x31, 0x4b, 0x98, 0x1f, 0xff, 0xf0,
+ 0x3f, 0xff, 0xe0, 0x7f, 0xff, 0xc0, 0xff, 0xff,
+ 0x81, 0xff, 0xd4, 0x40, 0x7f, 0xf1, 0x10, 0x1d,
+ 0xc5, 0xff, 0xff, 0x88, 0x7, 0x95, 0x20, 0x7f,
+ 0xf2, 0xd6, 0xff, 0xfa, 0x1, 0xff, 0xe5, 0xe0,
+ 0x7d, 0xa3, 0x7f, 0xfc, 0x28, 0xc0, 0xf8,
+
+ /* U+F0C7 "" */
+ 0xa, 0x4f, 0xfe, 0x1b, 0x20, 0x79, 0xd6, 0xff,
+ 0xf8, 0x73, 0x20, 0x3a, 0x1, 0xff, 0xc6, 0xa8,
+ 0xf, 0xfe, 0x65, 0x40, 0x79, 0xff, 0xff, 0xc1,
+ 0x20, 0x55, 0x1, 0xff, 0xc7, 0x60, 0x6a, 0x40,
+ 0xff, 0xe6, 0x60, 0x3f, 0xf9, 0xa4, 0xf, 0xfe,
+ 0x63, 0x3, 0xff, 0xa0, 0x9b, 0xff, 0xe0, 0xa0,
+ 0x3f, 0xc6, 0x4f, 0xfe, 0x8, 0x1f, 0xff, 0x87,
+ 0xbd, 0x3, 0xff, 0x91, 0x20, 0x85, 0x80, 0xff,
+ 0xe3, 0xb0, 0x31, 0x40, 0x7f, 0xf1, 0x48, 0x1e,
+ 0x20, 0x7f, 0xf1, 0x48, 0x1f, 0xfc, 0xd2, 0x7,
+ 0x30, 0x3f, 0xf8, 0xdc, 0xd, 0x0, 0xff, 0xe3,
+ 0x9f, 0x66, 0x60, 0x7f, 0xf2, 0x53, 0x20, 0x7f,
+ 0x9a, 0x3, 0xff, 0x96, 0x6a, 0x3, 0xff, 0x90,
+ 0x70,
+
+ /* U+F0E7 "" */
+ 0x2, 0x96, 0xfe, 0x80, 0x7e, 0x2d, 0x2f, 0xcc,
+ 0x81, 0xf2, 0x3, 0xfc, 0x40, 0xfb, 0x81, 0xfc,
+ 0x80, 0xfc, 0x40, 0xfe, 0xe0, 0x7e, 0x60, 0x7f,
+ 0x20, 0x3f, 0x10, 0x3f, 0x20, 0x3f, 0xf8, 0xd8,
+ 0xf, 0xc4, 0xf, 0xe6, 0x7, 0xe6, 0x7, 0xf7,
+ 0xfe, 0xc4, 0x10, 0x3f, 0xf8, 0x65, 0xe, 0x7,
+ 0xff, 0x11, 0x82, 0x7, 0xff, 0xe, 0x0, 0x60,
+ 0x7f, 0xf0, 0x8b, 0x0, 0x40, 0xff, 0xe1, 0x40,
+ 0x24, 0x7, 0xff, 0x5, 0x20, 0x15, 0xff, 0xd4,
+ 0xf, 0x40, 0x3f, 0xec, 0x7, 0x32, 0x7, 0xfc,
+ 0x80, 0xe8, 0x7, 0xff, 0x0, 0x81, 0xa0, 0x1f,
+ 0xfc, 0x2, 0x6, 0x2c, 0xf, 0xfe, 0x2, 0x3,
+ 0x40, 0x3f, 0xf8, 0x38, 0x9, 0x20, 0x1f, 0xfc,
+ 0x14, 0x5, 0x0, 0xff, 0xe0, 0x90, 0x26, 0x40,
+ 0xff, 0xe0, 0xa0, 0x28, 0x7, 0xff, 0xb, 0x0,
+ 0x80, 0x7f, 0xf0, 0xc8, 0x2c, 0xf, 0xfe, 0x1c,
+ 0xd8, 0x7, 0xf8,
+
+ /* U+F0EA "" */
+ 0x3, 0xf2, 0x20, 0x7f, 0xf2, 0x5f, 0xbb, 0x90,
+ 0x3f, 0xf8, 0x2a, 0x4f, 0x1, 0xb4, 0x9c, 0x7,
+ 0xea, 0xdf, 0x5, 0xf8, 0x3, 0x7d, 0x0, 0xff,
+ 0xe6, 0x10, 0x3f, 0xf8, 0x4b, 0xf0, 0x1f, 0xfe,
+ 0x43, 0x2d, 0xfa, 0x1, 0xff, 0xc2, 0x59, 0xa5,
+ 0xf1, 0x3, 0xff, 0x85, 0x5, 0xff, 0xea, 0x33,
+ 0x3, 0xfe, 0x21, 0x1, 0xfc, 0x63, 0x3, 0xff,
+ 0x99, 0x18, 0x1f, 0xfc, 0xc8, 0xc0, 0xff, 0xe6,
+ 0x42, 0x7, 0xff, 0x1e, 0xde, 0x20, 0x7f, 0xf1,
+ 0x50, 0x4b, 0x80, 0xff, 0xe3, 0xff, 0xe4, 0x7,
+ 0xff, 0xfc, 0xf, 0xff, 0x32, 0x3, 0xff, 0x99,
+ 0x7f, 0xf0, 0x1f, 0xff, 0xf0, 0x3f, 0xfb, 0xcc,
+ 0xf, 0xef, 0x6f, 0xff, 0x7, 0x10,
+
+ /* U+F0F3 "" */
+ 0x3, 0xfe, 0x74, 0x81, 0xff, 0xc9, 0x51, 0x70,
+ 0x3f, 0xf9, 0x24, 0x1, 0x3, 0xff, 0x8e, 0x65,
+ 0x2, 0xa8, 0xf, 0xfe, 0x24, 0xcc, 0x81, 0x2b,
+ 0x90, 0x1f, 0xfc, 0x1c, 0xc0, 0xfc, 0x6a, 0x3,
+ 0xfe, 0xc4, 0xf, 0xfa, 0xa0, 0x3f, 0x99, 0x3,
+ 0xff, 0x83, 0x0, 0xfe, 0x80, 0x7f, 0xf0, 0x8a,
+ 0x3, 0xe2, 0x7, 0xff, 0x13, 0x81, 0xf2, 0x3,
+ 0xff, 0x88, 0xc0, 0xff, 0xe6, 0x10, 0x3e, 0xe0,
+ 0x7f, 0xf9, 0x50, 0x1f, 0xfc, 0x54, 0x7, 0x88,
+ 0x1f, 0xfc, 0x52, 0x7, 0x10, 0x3f, 0xf8, 0xd8,
+ 0xe, 0xa0, 0x7f, 0xf1, 0x90, 0x18, 0xb0, 0x3f,
+ 0xf8, 0xf4, 0xb, 0x1, 0xff, 0xc8, 0x4c, 0x50,
+ 0x3f, 0xf9, 0x50, 0xa0, 0x3f, 0xf9, 0x6a, 0x1,
+ 0xff, 0xca, 0x2d, 0xbf, 0xff, 0xe5, 0x60, 0x3f,
+ 0xfa, 0xc7, 0xff, 0x50, 0x3f, 0xf8, 0xa4, 0xf,
+ 0x60, 0x3f, 0xf8, 0xd8, 0xc, 0xd8, 0xf, 0xfe,
+ 0x31, 0xf6, 0x68, 0x7, 0xf8,
+
+ /* U+F11C "" */
+ 0x17, 0xff, 0xfe, 0x82, 0x15, 0x1, 0xff, 0xd0,
+ 0xa5, 0x1, 0xff, 0xd2, 0x40, 0x45, 0xb8, 0x3,
+ 0x70, 0x6, 0xe0, 0x9, 0xb2, 0x5, 0xb8, 0xb,
+ 0x81, 0x29, 0x20, 0x64, 0x88, 0x92, 0x42, 0xc8,
+ 0xe2, 0xc9, 0x1, 0xff, 0xe9, 0x60, 0x80, 0x23,
+ 0x81, 0xfe, 0x7f, 0xc0, 0xff, 0x11, 0xfc, 0x46,
+ 0xfd, 0x3, 0xfe, 0x3, 0xfc, 0x4c, 0x4, 0x4c,
+ 0x0, 0x98, 0x1, 0x30, 0x1f, 0xfc, 0x1f, 0xb2,
+ 0x9, 0xb3, 0x87, 0xb4, 0xe, 0xd2, 0x3, 0xff,
+ 0xfe, 0x3e, 0xc8, 0x26, 0xce, 0x1e, 0xd0, 0x3b,
+ 0x48, 0xf, 0xfe, 0x1, 0x30, 0x11, 0x30, 0x2,
+ 0x60, 0x4, 0xc0, 0x7f, 0x9f, 0xf0, 0x3f, 0xff,
+ 0xf0, 0x60, 0x7f, 0xc0, 0x7f, 0xf3, 0x88, 0xe0,
+ 0x7f, 0xf7, 0x94, 0x90, 0x32, 0x7f, 0xf0, 0x78,
+ 0xb2, 0x40, 0x7c, 0x5b, 0x80, 0x37, 0xff, 0xc1,
+ 0x40, 0xb7, 0x1, 0x74, 0x7, 0xff, 0x49, 0x54,
+ 0x7, 0xff, 0x42, 0x90,
+
+ /* U+F124 "" */
+ 0x3, 0xff, 0x9a, 0x99, 0x3, 0xff, 0x9a, 0xfd,
+ 0x99, 0x1, 0xff, 0xca, 0x9e, 0x1, 0xa0, 0x1f,
+ 0xfc, 0x73, 0x3b, 0x3, 0xc4, 0xf, 0xfe, 0x29,
+ 0xb9, 0x81, 0xf9, 0x81, 0xff, 0xc3, 0x5b, 0x10,
+ 0x1f, 0xea, 0x7, 0xff, 0x5, 0xea, 0x40, 0xff,
+ 0x91, 0x3, 0xfe, 0x7e, 0x10, 0x3f, 0xf8, 0x30,
+ 0xf, 0xf4, 0xf0, 0xf, 0xfe, 0x19, 0x20, 0x3e,
+ 0x37, 0xb0, 0x3f, 0xf8, 0xb0, 0xf, 0x2b, 0x90,
+ 0x1f, 0xfc, 0x62, 0x80, 0xeb, 0x48, 0xf, 0xfe,
+ 0x45, 0x3, 0xaa, 0x3, 0xff, 0x94, 0xc0, 0xe4,
+ 0x7, 0xff, 0x2a, 0x1, 0xe2, 0x7, 0xff, 0x29,
+ 0x81, 0xe8, 0x7, 0xff, 0x25, 0x81, 0xf2, 0xfa,
+ 0xdf, 0xe2, 0x7, 0xf5, 0x3, 0xf8, 0xa5, 0xfc,
+ 0x7, 0xf2, 0x20, 0x7f, 0xf4, 0x20, 0x1f, 0xfd,
+ 0x4, 0x40, 0xff, 0xe8, 0x70, 0x3f, 0xfa, 0x5,
+ 0x1, 0xff, 0xd0, 0x80, 0x7f, 0xf4, 0x50, 0x1f,
+ 0xfd, 0x8, 0x7, 0xff, 0x2d, 0x81, 0xcc, 0xf,
+ 0xfe, 0x83, 0x3, 0xff, 0x99, 0x0, 0x8c, 0x3,
+ 0xff, 0x98, 0x7c, 0x8c, 0x7, 0xff, 0x0,
+
+ /* U+F15B "" */
+ 0x9, 0x7f, 0xc0, 0x8, 0x1e, 0xd6, 0xff, 0xc8,
+ 0x6a, 0x7, 0x10, 0x3f, 0xf8, 0x4a, 0x81, 0xff,
+ 0xc8, 0x54, 0xf, 0xfe, 0x42, 0xa0, 0x7f, 0xf2,
+ 0x15, 0x3, 0xff, 0x90, 0xa0, 0x1f, 0xfc, 0x24,
+ 0xbc, 0x40, 0xff, 0xe0, 0x61, 0x6f, 0xc0, 0x7f,
+ 0xf0, 0x1f, 0xff, 0x80, 0xff, 0xff, 0x81, 0xff,
+ 0xff, 0x3, 0xff, 0xfe, 0x7, 0xff, 0xfc, 0xf,
+ 0xff, 0x69, 0x3, 0xff, 0x8e, 0x75, 0xbf, 0xfc,
+ 0x7c,
+
+ /* U+F1EB "" */
+ 0x3, 0xff, 0xc6, 0x5c, 0xb5, 0xad, 0x46, 0x40,
+ 0xff, 0xe4, 0x17, 0xbe, 0x8d, 0x21, 0x48, 0xe6,
+ 0xf9, 0x90, 0x3f, 0xf8, 0x46, 0xe8, 0x40, 0xff,
+ 0xe0, 0x99, 0xa9, 0x3, 0xfc, 0x76, 0x20, 0x3f,
+ 0xf8, 0xeb, 0x61, 0x3, 0xe9, 0x88, 0x1f, 0x8a,
+ 0x5c, 0x40, 0xfc, 0x74, 0x3, 0xb3, 0x3, 0xc6,
+ 0x6f, 0xad, 0xed, 0xf4, 0x20, 0x79, 0xe0, 0x7,
+ 0x90, 0x39, 0xec, 0x64, 0xf, 0xe2, 0xf6, 0x30,
+ 0x38, 0xf3, 0x80, 0xe5, 0xa1, 0x3, 0xff, 0x86,
+ 0x66, 0x40, 0x76, 0x80, 0x69, 0x48, 0x1f, 0xfc,
+ 0x73, 0x60, 0x1a, 0x38, 0x3, 0x30, 0x3c, 0xa5,
+ 0xff, 0x6b, 0x10, 0x1e, 0x78, 0x88, 0xc3, 0xbc,
+ 0x81, 0xd3, 0xd6, 0x80, 0xc5, 0x3b, 0xe0, 0x1c,
+ 0x75, 0x60, 0x48, 0xe, 0x7d, 0x81, 0xff, 0xc1,
+ 0x7d, 0x81, 0xc8, 0xf, 0xeb, 0x0, 0xff, 0xe2,
+ 0xca, 0x7, 0xff, 0x6, 0xa0, 0x3c, 0x5c, 0x93,
+ 0x20, 0x79, 0x60, 0x3f, 0xf8, 0x4, 0xe, 0x9f,
+ 0x46, 0xe9, 0xbc, 0x3, 0x90, 0x1f, 0xfc, 0x8,
+ 0xc0, 0x3e, 0xc0, 0xfe, 0x7d, 0x80, 0x70, 0xf,
+ 0xfe, 0xc, 0x8b, 0x0, 0xff, 0xe0, 0xcb, 0x20,
+ 0xf, 0xfe, 0x1b, 0x40, 0x7f, 0xf0, 0xd3, 0x3,
+ 0xff, 0x96, 0xff, 0x98, 0x1f, 0xfd, 0x17, 0x0,
+ 0xa3, 0x3, 0xff, 0xa1, 0x0, 0xe8, 0x7, 0xff,
+ 0xcc, 0x81, 0xc4, 0xf, 0xfe, 0x84, 0x3, 0xa0,
+ 0x1f, 0xfd, 0x5, 0x91, 0x59, 0x1, 0xff, 0xc2,
+
+ /* U+F240 "" */
+ 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
+ 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
+ 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
+ 0x68, 0x7, 0xff, 0x59, 0x81, 0xdb, 0xff, 0xfe,
+ 0x50, 0x1f, 0xfd, 0x86, 0xc4, 0xf, 0xfe, 0xa1,
+ 0x88, 0xf, 0xff, 0xf8, 0x1f, 0xfc, 0xf3, 0xd8,
+ 0x1f, 0xfd, 0x46, 0x7, 0xfb, 0x7f, 0xff, 0xca,
+ 0x3, 0xfc, 0x5b, 0xff, 0xe6, 0xe0, 0x25, 0x80,
+ 0x94, 0x9f, 0xfc, 0xd6, 0x5, 0xa, 0x3, 0xff,
+ 0xa8, 0x45, 0x40, 0x7f, 0xf4, 0x4e, 0x2, 0xbf,
+ 0xff, 0xf4, 0x71, 0x0,
+
+ /* U+F241 "" */
+ 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
+ 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
+ 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
+ 0x68, 0x7, 0xff, 0x59, 0x81, 0xdf, 0xff, 0xf1,
+ 0x60, 0x1f, 0xfd, 0xd6, 0xc4, 0xf, 0xfe, 0xa1,
+ 0x88, 0xf, 0xff, 0xf8, 0x1f, 0xfc, 0xf3, 0xd8,
+ 0x1f, 0xfd, 0x46, 0x7, 0xfb, 0xff, 0xfe, 0x2c,
+ 0x3, 0xff, 0x86, 0x5b, 0xff, 0xe6, 0xe0, 0x25,
+ 0x80, 0x94, 0x9f, 0xfc, 0xd6, 0x5, 0xa, 0x3,
+ 0xff, 0xa8, 0x45, 0x40, 0x7f, 0xf4, 0x4e, 0x2,
+ 0xbf, 0xff, 0xf4, 0x71, 0x0,
+
+ /* U+F242 "" */
+ 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
+ 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
+ 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
+ 0x68, 0x7, 0xff, 0x59, 0x81, 0xdf, 0xff, 0xf0,
+ 0x10, 0x1f, 0xfe, 0x26, 0xc4, 0xf, 0xfe, 0xa1,
+ 0x88, 0xf, 0xff, 0xf8, 0x1f, 0xfc, 0xf3, 0xd8,
+ 0x1f, 0xfd, 0x46, 0x7, 0xfb, 0xff, 0xfe, 0x2,
+ 0x3, 0xff, 0x90, 0x5b, 0xff, 0xe6, 0xe0, 0x25,
+ 0x80, 0x94, 0x9f, 0xfc, 0xd6, 0x5, 0xa, 0x3,
+ 0xff, 0xa8, 0x45, 0x40, 0x7f, 0xf4, 0x4e, 0x2,
+ 0xbf, 0xff, 0xf4, 0x71, 0x0,
+
+ /* U+F243 "" */
+ 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
+ 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
+ 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
+ 0x68, 0x7, 0xff, 0x59, 0x81, 0xdf, 0xfc, 0x7,
+ 0xff, 0xa1, 0xb1, 0x3, 0xff, 0xa8, 0x62, 0x3,
+ 0xff, 0xfe, 0x7, 0xff, 0x3c, 0xf6, 0x7, 0xff,
+ 0x51, 0x81, 0xfe, 0xff, 0xe0, 0x3f, 0xf9, 0xc5,
+ 0xbf, 0xfe, 0x6e, 0x2, 0x58, 0x9, 0x49, 0xff,
+ 0xcd, 0x60, 0x50, 0xa0, 0x3f, 0xfa, 0x84, 0x54,
+ 0x7, 0xff, 0x44, 0xe0, 0x2b, 0xff, 0xff, 0x47,
+ 0x10, 0x0,
+
+ /* U+F244 "" */
+ 0x5, 0xbf, 0xfe, 0x8a, 0x2, 0x5a, 0x4f, 0xfe,
+ 0x8d, 0x80, 0x20, 0x1f, 0xfd, 0x36, 0x0, 0x81,
+ 0xff, 0xd4, 0x20, 0x67, 0xff, 0xff, 0x36, 0x81,
+ 0x68, 0x7, 0xff, 0x59, 0x81, 0xff, 0xf4, 0x6c,
+ 0x40, 0xff, 0xea, 0x18, 0x80, 0xff, 0xff, 0x81,
+ 0xff, 0xcf, 0x3d, 0x81, 0xff, 0xd4, 0x60, 0x7f,
+ 0xf7, 0xcb, 0x7f, 0xfc, 0xdc, 0x4, 0xb0, 0x12,
+ 0x93, 0xff, 0x9a, 0xc0, 0xa1, 0x40, 0x7f, 0xf5,
+ 0x8, 0xa8, 0xf, 0xfe, 0x89, 0xc0, 0x57, 0xff,
+ 0xfe, 0x8e, 0x20, 0x0,
+
+ /* U+F287 "" */
+ 0x3, 0xff, 0xd4, 0xbf, 0x90, 0x1f, 0xfd, 0x12,
+ 0x54, 0xa, 0x81, 0xff, 0xcf, 0xbf, 0x60, 0x1c,
+ 0x80, 0xff, 0xe6, 0xd4, 0x9, 0x1, 0xff, 0xd2,
+ 0x48, 0x3e, 0xc2, 0x4, 0x50, 0x1f, 0xfc, 0xc8,
+ 0x28, 0x16, 0x8a, 0x60, 0x3f, 0xf8, 0x84, 0xf,
+ 0x91, 0x24, 0x6, 0x75, 0x81, 0xff, 0xc3, 0x5f,
+ 0x7c, 0x40, 0xd0, 0x40, 0x3f, 0xf8, 0x6d, 0x1,
+ 0xca, 0x81, 0x1c, 0x4, 0x88, 0x40, 0x7f, 0xf0,
+ 0xed, 0x88, 0x14, 0x3, 0xd4, 0xaa, 0x1a, 0x5f,
+ 0xfc, 0x40, 0xb, 0x30, 0x4, 0xf, 0x2d, 0x40,
+ 0x3b, 0x7f, 0xf8, 0x84, 0xa, 0x60, 0x3f, 0x92,
+ 0xe2, 0x0, 0xa5, 0xff, 0xc0, 0x3, 0xa0, 0x60,
+ 0x7a, 0xdf, 0x66, 0x1d, 0xbf, 0xfc, 0x2, 0x1,
+ 0xf4, 0x22, 0x3, 0x34, 0x7, 0xa0, 0x44, 0xf,
+ 0xfe, 0x2, 0xd0, 0xd, 0x69, 0xcd, 0x0, 0xfd,
+ 0x4, 0x3, 0xfe, 0xd4, 0x81, 0xe5, 0x19, 0x3,
+ 0xf9, 0x84, 0x40, 0x3d, 0xb8, 0x81, 0xff, 0xcc,
+ 0x63, 0x80, 0xe4, 0xf3, 0x3, 0xff, 0x99, 0x9,
+ 0x7c, 0xc0, 0xff, 0xe9, 0xe4, 0x8, 0x1f, 0xfd,
+ 0x5b, 0xf9, 0x81, 0xff, 0xfb, 0x9f, 0xf2, 0x3,
+ 0xf0,
+
+ /* U+F293 "" */
+ 0x3, 0xfc, 0x51, 0x20, 0x3f, 0xf8, 0x46, 0xfe,
+ 0xd7, 0x67, 0xa8, 0xf, 0xf5, 0xc8, 0xf, 0x95,
+ 0xc0, 0x7e, 0xc8, 0xc, 0x60, 0x1c, 0x70, 0x1e,
+ 0xa4, 0xf, 0x36, 0x3, 0x8e, 0x3, 0x24, 0x3,
+ 0xf4, 0x60, 0x71, 0x40, 0x50, 0xf, 0xf4, 0x40,
+ 0x77, 0x0, 0x48, 0xf, 0xfa, 0xa0, 0x32, 0x0,
+ 0x80, 0xc8, 0xe, 0x30, 0x52, 0x6, 0x43, 0x1,
+ 0x3b, 0x80, 0xe7, 0x6, 0x20, 0x58, 0x30, 0x24,
+ 0xe, 0x3, 0x88, 0x1e, 0x20, 0x81, 0x1c, 0xe,
+ 0x60, 0x15, 0x14, 0x81, 0x30, 0x3c, 0x70, 0x34,
+ 0x1a, 0x22, 0x3, 0xff, 0x80, 0x70, 0x1c, 0xd8,
+ 0xe, 0x20, 0x7e, 0x38, 0x9, 0x40, 0x3f, 0xf8,
+ 0x8c, 0x9, 0x81, 0xff, 0xc4, 0x54, 0x8, 0xe0,
+ 0x3c, 0x40, 0xf9, 0x50, 0x40, 0x8d, 0x3, 0xff,
+ 0x80, 0xa8, 0x5c, 0x1c, 0x15, 0x3, 0xc4, 0x9,
+ 0x50, 0xa8, 0x11, 0xc1, 0x40, 0x26, 0x10, 0x1c,
+ 0xa8, 0x1d, 0x40, 0x50, 0x2c, 0x30, 0x12, 0xd4,
+ 0xe, 0x8c, 0x62, 0x4, 0x42, 0x3, 0x10, 0x38,
+ 0xb1, 0x88, 0x19, 0x0, 0x40, 0x7f, 0xd8, 0x81,
+ 0x90, 0x14, 0x3, 0xfd, 0x88, 0x1d, 0x0, 0x8c,
+ 0x3, 0xf6, 0x20, 0x73, 0x20, 0x67, 0x0, 0xe3,
+ 0x88, 0x1c, 0xa0, 0x1e, 0x79, 0x1, 0x88, 0x1d,
+ 0x28, 0x1f, 0x8d, 0xf5, 0xa5, 0x9d, 0xec, 0xc,
+
+ /* U+F2ED "" */
+ 0x3, 0xf9, 0x2f, 0x10, 0x3f, 0xf8, 0xbe, 0xdf,
+ 0x68, 0x7, 0xe5, 0x27, 0xb0, 0x1f, 0x9c, 0x9f,
+ 0xa, 0xdf, 0x88, 0x1f, 0xcd, 0xfe, 0x3, 0xff,
+ 0x99, 0xd0, 0x1f, 0xfc, 0xbd, 0x7f, 0xff, 0xe5,
+ 0xa0, 0x64, 0xff, 0xe4, 0x30, 0x26, 0xff, 0xf9,
+ 0x34, 0xf, 0xff, 0x75, 0xa0, 0x27, 0x80, 0x8f,
+ 0x20, 0x7f, 0xf0, 0x1b, 0x1, 0x72, 0x4, 0xc3,
+ 0x3, 0xff, 0xfe, 0x7, 0xff, 0xfc, 0xf, 0xff,
+ 0xf8, 0x1f, 0xff, 0x26, 0xc0, 0x5c, 0x81, 0x30,
+ 0xc0, 0xf9, 0x81, 0xad, 0x1, 0x3c, 0x4, 0x79,
+ 0x2, 0x60, 0x7f, 0xf4, 0xb, 0x3, 0xff, 0x8f,
+ 0x0, 0xd2, 0xc6, 0xff, 0xf8, 0x73, 0x90, 0x0,
+
+ /* U+F304 "" */
+ 0x3, 0xff, 0x94, 0xd8, 0xf, 0xfe, 0x69, 0xd2,
+ 0x39, 0x3, 0xff, 0x94, 0x71, 0x2, 0xc4, 0xf,
+ 0xfe, 0x41, 0xc0, 0x7b, 0x10, 0x3f, 0xf8, 0xf4,
+ 0xf, 0xd8, 0x81, 0xff, 0xc6, 0x88, 0xf, 0xdc,
+ 0xf, 0xfe, 0x19, 0xf8, 0x54, 0x7, 0xc4, 0xf,
+ 0xfe, 0x11, 0xc0, 0xe1, 0x50, 0x1e, 0x40, 0x7f,
+ 0xf0, 0x4e, 0x2, 0x38, 0x54, 0x7, 0x50, 0x3f,
+ 0xf8, 0x7, 0x1, 0xc7, 0xa, 0x80, 0xb0, 0x1f,
+ 0xfc, 0x3, 0x80, 0xf8, 0xe1, 0x50, 0xc4, 0xf,
+ 0xf8, 0xe0, 0x3f, 0x8e, 0x17, 0x90, 0x3f, 0xe3,
+ 0x80, 0xff, 0x8d, 0x3, 0xff, 0x82, 0x70, 0x1f,
+ 0xfc, 0x18, 0x7, 0xff, 0x0, 0xe0, 0x3f, 0xf8,
+ 0x38, 0x81, 0xff, 0x1c, 0x7, 0xff, 0x7, 0x10,
+ 0x3f, 0xe3, 0x80, 0xff, 0xe0, 0xe2, 0x7, 0xfc,
+ 0x70, 0x1f, 0xfc, 0x1c, 0x40, 0xff, 0x8e, 0x3,
+ 0xff, 0x83, 0x88, 0x1f, 0xf1, 0xc0, 0x7f, 0xf0,
+ 0x71, 0x3, 0xff, 0x81, 0x80, 0xff, 0xe0, 0xe2,
+ 0x7, 0xff, 0x1, 0x1, 0xff, 0xc1, 0xc4, 0xf,
+ 0xfe, 0x9, 0x3, 0xff, 0x81, 0x88, 0x1f, 0xfc,
+ 0x2e, 0x7, 0xfd, 0x88, 0x1f, 0xfc, 0x32, 0x7,
+ 0xfb, 0x10, 0x3f, 0xf8, 0x8c, 0xf, 0xec, 0x40,
+ 0xff, 0xe2, 0x90, 0x3f, 0x62, 0x7, 0xff, 0x34,
+ 0xe2, 0x7, 0xff, 0x1f, 0x48, 0xbb, 0xf6, 0x20,
+ 0x7f, 0xf1, 0xc0,
+
+ /* U+F55A "" */
+ 0x3, 0xfa, 0x7f, 0xff, 0xca, 0xc8, 0xf, 0xea,
+ 0xc0, 0xff, 0xe5, 0x1a, 0x80, 0xfa, 0xa0, 0x3f,
+ 0xf9, 0xb0, 0xf, 0x54, 0x7, 0xff, 0x38, 0x81,
+ 0xd5, 0x1, 0xfc, 0xd8, 0xf, 0x36, 0x3, 0xff,
+ 0x83, 0x50, 0x1f, 0xce, 0x43, 0x3, 0x39, 0x20,
+ 0x3f, 0xea, 0x80, 0xff, 0x40, 0x11, 0x80, 0x70,
+ 0x3, 0x3, 0xfd, 0x50, 0x1f, 0xf4, 0x2, 0x8d,
+ 0xa0, 0x14, 0x3, 0xfa, 0xa0, 0x3f, 0xf8, 0xe,
+ 0x1, 0x48, 0x2, 0x8c, 0xf, 0xd5, 0x1, 0xff,
+ 0xc2, 0x70, 0xf, 0x46, 0x7, 0xf2, 0x3, 0xff,
+ 0x88, 0xd0, 0x19, 0x30, 0x3f, 0xc8, 0xf, 0xfe,
+ 0x23, 0x40, 0x64, 0xc0, 0xff, 0x54, 0x7, 0xff,
+ 0x9, 0xc0, 0x3d, 0x18, 0x1f, 0xea, 0x80, 0xff,
+ 0xe0, 0x38, 0x5, 0x20, 0xa, 0x30, 0x3f, 0xd5,
+ 0x1, 0xff, 0x40, 0x28, 0xda, 0x1, 0x40, 0x3f,
+ 0xea, 0x80, 0xff, 0x40, 0x11, 0x80, 0x70, 0x4,
+ 0x3, 0xff, 0x81, 0x50, 0x1f, 0xce, 0x43, 0x3,
+ 0x39, 0xc, 0xf, 0xfe, 0xd, 0x40, 0x7f, 0x36,
+ 0x3, 0xcd, 0x80, 0xff, 0xe1, 0xd4, 0x7, 0xff,
+ 0x38, 0x81, 0xf5, 0x40, 0x7f, 0xf3, 0x60, 0x1f,
+ 0xab, 0x3, 0xff, 0x94, 0x6a,
+
+ /* U+F7C2 "" */
+ 0x3, 0xe7, 0x27, 0xf3, 0x40, 0x7e, 0xd1, 0xbf,
+ 0xe9, 0x70, 0x1c, 0x71, 0x3, 0xff, 0x80, 0x68,
+ 0x11, 0xc4, 0xf, 0xfe, 0x12, 0x0, 0x70, 0xd,
+ 0xf8, 0x2f, 0xc0, 0xfe, 0x60, 0x63, 0x80, 0xff,
+ 0xe3, 0x1c, 0x7, 0xff, 0x1f, 0x1, 0xff, 0xe3,
+ 0xdf, 0x82, 0xfc, 0xf, 0xe6, 0x7, 0xff, 0xfc,
+ 0xf, 0xff, 0xf8, 0x1f, 0xff, 0xf0, 0x3f, 0xff,
+ 0xe0, 0x7f, 0xf6, 0xd8, 0x1f, 0xfc, 0x77, 0x10,
+ 0x1f, 0xfc, 0x57, 0x5, 0xd6, 0xff, 0xf0, 0xf4,
+ 0x0,
+
+ /* U+F8A2 "" */
+ 0x3, 0xff, 0x9e, 0x80, 0xff, 0xe7, 0xca, 0x7,
+ 0xff, 0x3a, 0x30, 0x3f, 0xf9, 0xd1, 0x81, 0xfc,
+ 0xb2, 0x3, 0xff, 0x84, 0x58, 0x1f, 0xce, 0x98,
+ 0x7, 0xff, 0x9, 0x81, 0xfd, 0x20, 0xf, 0xfe,
+ 0x74, 0x60, 0x7f, 0xf3, 0xab, 0x3, 0xff, 0x9d,
+ 0x50, 0x1c, 0x7f, 0xff, 0xe1, 0x50, 0x3a, 0xa0,
+ 0x3f, 0xf9, 0xec, 0xf, 0xfe, 0x87, 0x3, 0xff,
+ 0xa0, 0x79, 0x3, 0xd6, 0xff, 0xf1, 0xb8, 0x16,
+ 0x20, 0x62, 0x97, 0xff, 0x18, 0xe, 0xc4, 0xf,
+ 0xfe, 0x86, 0x40, 0x7f, 0xf4, 0x2a, 0x8, 0xf,
+ 0xfe, 0x75, 0xf0, 0xf, 0xfe, 0x40
+};
+
+
+/*---------------------
+ * GLYPH DESCRIPTION
+ *--------------------*/
+
+static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
+ {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
+ {.bitmap_index = 0, .adv_w = 111, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 0, .adv_w = 115, .box_w = 4, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 18, .adv_w = 143, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 14},
+ {.bitmap_index = 32, .adv_w = 279, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 128, .adv_w = 252, .box_w = 14, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 236, .adv_w = 328, .box_w = 19, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 352, .adv_w = 278, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 463, .adv_w = 78, .box_w = 3, .box_h = 7, .ofs_x = 1, .ofs_y = 14},
+ {.bitmap_index = 469, .adv_w = 153, .box_w = 9, .box_h = 30, .ofs_x = 1, .ofs_y = -7},
+ {.bitmap_index = 543, .adv_w = 156, .box_w = 8, .box_h = 30, .ofs_x = 0, .ofs_y = -7},
+ {.bitmap_index = 612, .adv_w = 193, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 8},
+ {.bitmap_index = 655, .adv_w = 254, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 684, .adv_w = 88, .box_w = 5, .box_h = 7, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 696, .adv_w = 124, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = 7},
+ {.bitmap_index = 702, .adv_w = 118, .box_w = 5, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 708, .adv_w = 185, .box_w = 11, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 772, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 852, .adv_w = 252, .box_w = 8, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 874, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 953, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1036, .adv_w = 252, .box_w = 16, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 1103, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 1182, .adv_w = 251, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1271, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1339, .adv_w = 252, .box_w = 14, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1438, .adv_w = 252, .box_w = 13, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1522, .adv_w = 109, .box_w = 4, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1535, .adv_w = 95, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 1558, .adv_w = 228, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 2},
+ {.bitmap_index = 1608, .adv_w = 246, .box_w = 12, .box_h = 8, .ofs_x = 2, .ofs_y = 5},
+ {.bitmap_index = 1629, .adv_w = 234, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = 2},
+ {.bitmap_index = 1682, .adv_w = 212, .box_w = 12, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 1749, .adv_w = 402, .box_w = 23, .box_h = 26, .ofs_x = 1, .ofs_y = -6},
+ {.bitmap_index = 1936, .adv_w = 292, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2041, .adv_w = 279, .box_w = 14, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2116, .adv_w = 292, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2204, .adv_w = 294, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2272, .adv_w = 255, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2306, .adv_w = 248, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2335, .adv_w = 305, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2433, .adv_w = 319, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2459, .adv_w = 122, .box_w = 4, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2464, .adv_w = 247, .box_w = 14, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 2507, .adv_w = 281, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2593, .adv_w = 241, .box_w = 13, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2611, .adv_w = 391, .box_w = 21, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2724, .adv_w = 319, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2806, .adv_w = 308, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 2905, .adv_w = 283, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 2962, .adv_w = 308, .box_w = 17, .box_h = 24, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 3087, .adv_w = 276, .box_w = 15, .box_h = 20, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 3164, .adv_w = 266, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3261, .adv_w = 267, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3288, .adv_w = 291, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3334, .adv_w = 285, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3441, .adv_w = 397, .box_w = 25, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3602, .adv_w = 281, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3707, .adv_w = 269, .box_w = 17, .box_h = 20, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 3782, .adv_w = 268, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 3857, .adv_w = 119, .box_w = 6, .box_h = 27, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 3871, .adv_w = 184, .box_w = 12, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 3938, .adv_w = 119, .box_w = 6, .box_h = 27, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 3954, .adv_w = 187, .box_w = 11, .box_h = 10, .ofs_x = 0, .ofs_y = 10},
+ {.bitmap_index = 3991, .adv_w = 202, .box_w = 13, .box_h = 3, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 4000, .adv_w = 138, .box_w = 7, .box_h = 4, .ofs_x = 0, .ofs_y = 17},
+ {.bitmap_index = 4010, .adv_w = 244, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4077, .adv_w = 251, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4146, .adv_w = 235, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4207, .adv_w = 253, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4273, .adv_w = 237, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4336, .adv_w = 156, .box_w = 10, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 4370, .adv_w = 251, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
+ {.bitmap_index = 4460, .adv_w = 247, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4496, .adv_w = 109, .box_w = 4, .box_h = 20, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4508, .adv_w = 107, .box_w = 6, .box_h = 26, .ofs_x = -1, .ofs_y = -6},
+ {.bitmap_index = 4534, .adv_w = 227, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4596, .adv_w = 109, .box_w = 3, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 4600, .adv_w = 393, .box_w = 22, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4655, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4688, .adv_w = 256, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4757, .adv_w = 251, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
+ {.bitmap_index = 4827, .adv_w = 255, .box_w = 13, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
+ {.bitmap_index = 4894, .adv_w = 152, .box_w = 9, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4915, .adv_w = 231, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 4985, .adv_w = 146, .box_w = 9, .box_h = 19, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5017, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5047, .adv_w = 217, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5114, .adv_w = 337, .box_w = 21, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5222, .adv_w = 222, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5292, .adv_w = 212, .box_w = 13, .box_h = 21, .ofs_x = 0, .ofs_y = -6},
+ {.bitmap_index = 5377, .adv_w = 222, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
+ {.bitmap_index = 5426, .adv_w = 152, .box_w = 10, .box_h = 28, .ofs_x = 0, .ofs_y = -6},
+ {.bitmap_index = 5493, .adv_w = 109, .box_w = 3, .box_h = 24, .ofs_x = 2, .ofs_y = -4},
+ {.bitmap_index = 5499, .adv_w = 152, .box_w = 9, .box_h = 28, .ofs_x = 0, .ofs_y = -6},
+ {.bitmap_index = 5567, .adv_w = 305, .box_w = 17, .box_h = 6, .ofs_x = 1, .ofs_y = 5},
+ {.bitmap_index = 5602, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 5739, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 5876, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 5972, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6105, .adv_w = 308, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 6221, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 6419, .adv_w = 448, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 6592, .adv_w = 504, .box_w = 32, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 6758, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 6887, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7012, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 7206, .adv_w = 224, .box_w = 14, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 7258, .adv_w = 336, .box_w = 21, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 7354, .adv_w = 504, .box_w = 32, .box_h = 27, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 7568, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 7674, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
+ {.bitmap_index = 7767, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 7888, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 7952, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 7995, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
+ {.bitmap_index = 8088, .adv_w = 392, .box_w = 26, .box_h = 25, .ofs_x = -1, .ofs_y = -2},
+ {.bitmap_index = 8200, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 8305, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 8409, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 8483, .adv_w = 392, .box_w = 25, .box_h = 7, .ofs_x = 0, .ofs_y = 7},
+ {.bitmap_index = 8512, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 8700, .adv_w = 560, .box_w = 35, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 8960, .adv_w = 504, .box_w = 33, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 9148, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 9326, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
+ {.bitmap_index = 9423, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
+ {.bitmap_index = 9523, .adv_w = 560, .box_w = 35, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 9672, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 9726, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 9856, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 10028, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 10207, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 10294, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 10399, .adv_w = 280, .box_w = 19, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 10530, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 10632, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 10765, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 10897, .adv_w = 448, .box_w = 30, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 11048, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 11113, .adv_w = 560, .box_w = 35, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 11313, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 11397, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 11482, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 11567, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 11649, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
+ {.bitmap_index = 11725, .adv_w = 560, .box_w = 36, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
+ {.bitmap_index = 11886, .adv_w = 392, .box_w = 22, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
+ {.bitmap_index = 12070, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 12166, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
+ {.bitmap_index = 12353, .adv_w = 560, .box_w = 35, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
+ {.bitmap_index = 12518, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
+ {.bitmap_index = 12591, .adv_w = 451, .box_w = 29, .box_h = 19, .ofs_x = 0, .ofs_y = 1}
+};
+
+/*---------------------
+ * CHARACTER MAPPING
+ *--------------------*/
+
+static const uint16_t unicode_list_1[] = {
+ 0x0, 0x7, 0xa, 0xb, 0xc, 0x10, 0x12, 0x14,
+ 0x18, 0x1b, 0x20, 0x25, 0x26, 0x27, 0x3d, 0x47,
+ 0x4a, 0x4b, 0x4c, 0x50, 0x51, 0x52, 0x53, 0x66,
+ 0x67, 0x6d, 0x6f, 0x70, 0x73, 0x76, 0x77, 0x78,
+ 0x7a, 0x92, 0x94, 0xc3, 0xc4, 0xc6, 0xe6, 0xe9,
+ 0xf2, 0x11b, 0x123, 0x15a, 0x1ea, 0x23f, 0x240, 0x241,
+ 0x242, 0x243, 0x286, 0x292, 0x2ec, 0x303, 0x559, 0x7c1,
+ 0x8a1
+};
+
+/*Collect the unicode lists and glyph_id offsets*/
+static const lv_font_fmt_txt_cmap_t cmaps[] =
+{
+ {
+ .range_start = 32, .range_length = 95, .glyph_id_start = 1,
+ .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
+ },
+ {
+ .range_start = 61441, .range_length = 2210, .glyph_id_start = 96,
+ .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 57, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
+ }
+};
+
+/*-----------------
+ * KERNING
+ *----------------*/
+
+
+/*Map glyph_ids to kern left classes*/
+static const uint8_t kern_left_class_mapping[] =
+{
+ 0, 1, 0, 2, 0, 0, 0, 0,
+ 2, 3, 0, 0, 0, 4, 0, 4,
+ 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 7, 8, 9, 10, 11,
+ 0, 12, 12, 13, 14, 15, 12, 12,
+ 9, 16, 17, 18, 0, 19, 13, 20,
+ 21, 22, 23, 24, 25, 0, 0, 0,
+ 0, 0, 26, 27, 28, 0, 29, 30,
+ 0, 31, 0, 0, 32, 0, 31, 31,
+ 33, 27, 0, 34, 0, 35, 0, 36,
+ 37, 38, 36, 39, 40, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
+};
+
+/*Map glyph_ids to kern right classes*/
+static const uint8_t kern_right_class_mapping[] =
+{
+ 0, 1, 0, 2, 0, 0, 0, 3,
+ 2, 0, 4, 5, 0, 6, 7, 6,
+ 8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 0, 10, 0, 11, 0, 0, 0,
+ 11, 0, 0, 12, 0, 0, 0, 0,
+ 11, 0, 11, 0, 13, 14, 15, 16,
+ 17, 18, 19, 20, 0, 0, 21, 0,
+ 0, 0, 22, 0, 23, 23, 23, 24,
+ 23, 0, 0, 0, 0, 0, 25, 25,
+ 26, 25, 23, 27, 28, 29, 30, 31,
+ 32, 33, 31, 34, 0, 0, 35, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
+};
+
+/*Kern values between classes*/
+static const int8_t kern_class_values[] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -23, 0, 0, 0,
+ 0, 0, 0, 0, -26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -11, -13, 0, -4, -13, 0, -17, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 4, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -37, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -26, 0, 0, 0, 0, 0, 0, -13,
+ 0, -2, 0, 0, -28, -4, -19, -15,
+ 0, -21, 0, 0, 0, 0, 0, 0,
+ -3, 0, 0, -4, -2, -11, -7, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -6,
+ 0, -5, 0, 0, -12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -6, 0, 0, 0, 0, 0,
+ 0, -3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -4,
+ 0, 0, 0, 0, 0, -22, 0, 0,
+ 0, -5, 0, 0, 0, -6, 0, -5,
+ 0, -5, -9, -5, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, -4, -4, 0, -4, 0, 0, 0,
+ -4, -6, -5, 0, 0, 0, 0, 0,
+ 0, 0, 0, -51, 0, 0, 0, -37,
+ 0, -58, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, -7, -5, 0, 0, -5,
+ -6, 0, 0, -5, -5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 0, 0, 0, -6, 0,
+ 0, 0, 4, -6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -14, 0, 0,
+ 0, -7, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -6, 0, -5,
+ -6, 0, 0, 0, -5, -9, -14, 0,
+ 0, 0, 0, -73, 0, 0, 0, 0,
+ 0, 0, 0, 4, -14, 0, 0, -60,
+ -12, -38, -31, 0, -52, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -10,
+ -29, -20, 0, 0, 0, 0, 0, 0,
+ 0, 0, -71, 0, 0, 0, -30, 0,
+ -44, 0, 0, 0, 0, 0, -7, 0,
+ -6, 0, -2, -3, 0, 0, -3, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -9, 0, -6,
+ -4, 0, -8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -17, 0, -4, 0, 0, -10, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -9, 0,
+ 0, 0, 0, -48, -51, 0, 0, -17,
+ -6, -52, -3, 4, 0, 4, 3, 0,
+ 4, 0, 0, -25, -22, 0, -24, -22,
+ -16, -25, 0, -21, -16, -12, -17, -13,
+ 0, 0, 0, 0, 4, 0, -49, -8,
+ 0, 0, -16, -3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, -10, -10,
+ 0, 0, -10, -7, 0, 0, -6, -2,
+ 0, 0, 0, 4, 0, 0, 0, 3,
+ 0, -27, -13, 0, 0, -9, 0, 0,
+ 0, 3, 0, 0, 0, 0, 0, 0,
+ 3, -7, -7, 0, 0, -7, -5, 0,
+ 0, -4, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, -10, 0, 0,
+ 0, -5, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, -6, 0, 0,
+ -5, 0, 0, 0, -5, -7, 0, 0,
+ 0, 0, 0, 0, -7, 4, -11, -46,
+ -11, 0, 0, -21, -6, -21, -3, 4,
+ -21, 4, 4, 3, 4, 0, 4, -16,
+ -14, -5, -9, -14, -9, -13, -5, -9,
+ -4, 0, -5, -7, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, -6,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -5, 0, 0, -5, 0,
+ 0, 0, -4, -6, -6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4, 0, 0, -4, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -3, 0, 0, 0, 0, 0, -6,
+ 0, 0, 0, 0, 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, -3, -3,
+ 0, 0, -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, -3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -3, 0, 0, 0, 0, 0,
+ 4, 0, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, -5, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 0, -23, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -30, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -3, 0,
+ -5, -3, 0, 0, 4, 0, 0, 0,
+ -27, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -9, -4, 3, 0, -4, 0, 0, 11,
+ 0, 4, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -4,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, -23, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -3, -3,
+ 3, 0, -3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -27, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -4, 0, 0,
+ -4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -3, 0, 0, -3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -4, 0, 0, -4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+
+/*Collect the kern class' data in one place*/
+static const lv_font_fmt_txt_kern_classes_t kern_classes =
+{
+ .class_pair_values = kern_class_values,
+ .left_class_mapping = kern_left_class_mapping,
+ .right_class_mapping = kern_right_class_mapping,
+ .left_class_cnt = 40,
+ .right_class_cnt = 35,
+};
+
+/*--------------------
+ * ALL CUSTOM DATA
+ *--------------------*/
+
+/*Store all the custom data of the font*/
+static lv_font_fmt_txt_dsc_t font_dsc = {
+ .glyph_bitmap = gylph_bitmap,
+ .glyph_dsc = glyph_dsc,
+ .cmaps = cmaps,
+ .kern_dsc = &kern_classes,
+ .kern_scale = 16,
+ .cmap_num = 2,
+ .bpp = 3,
+ .kern_classes = 1,
+ .bitmap_format = 1
+};
+
+
+/*-----------------
+ * PUBLIC FONT
+ *----------------*/
+
+/*Initialize a public general font descriptor*/
+lv_font_t lv_font_roboto_28_compressed = {
+ .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
+ .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
+ .line_height = 32, /*The maximum line height required by the font*/
+ .base_line = 7, /*Baseline measured from the bottom of the line*/
+ .subpx = LV_FONT_SUBPX_NONE,
+ .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
+};
+
+#endif /*#if LV_FONT_ROBOTO_28_COMPRESSED*/
+
diff --git a/src/lv_font/lv_font_unscii_8.c b/src/lv_font/lv_font_unscii_8.c
index e86727cf9..1b96823e8 100644
--- a/src/lv_font/lv_font_unscii_8.c
+++ b/src/lv_font/lv_font_unscii_8.c
@@ -311,7 +311,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
* GLYPH DESCRIPTION
*--------------------*/
-static lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
+static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 128, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 128, .box_h = 7, .box_w = 1, .ofs_x = 3, .ofs_y = -1},
@@ -460,4 +460,3 @@ lv_font_t lv_font_unscii_8 = {
};
#endif /*#if LV_FONT_UNSCII_8*/
-
diff --git a/src/lv_font/lv_symbol_def.h b/src/lv_font/lv_symbol_def.h
index 338705e58..6fe823b72 100644
--- a/src/lv_font/lv_symbol_def.h
+++ b/src/lv_font/lv_symbol_def.h
@@ -11,57 +11,72 @@ extern "C" {
#include "../../../lv_conf.h"
#endif
+/* In the font converter use this list as range:
+ 61441, 61448, 61451, 61452, 61452, 61453, 61457, 61459, 61461, 61465,
+ 61468, 61473, 61478, 61479, 61480, 61502, 61512, 61515, 61516, 61517,
+ 61521, 61522, 61523, 61524, 61543, 61544, 61550, 61552, 61553, 61556,
+ 61559, 61560, 61561, 61563, 61587, 61589, 61636, 61637, 61639, 61671,
+ 61674, 61683, 61724, 61732, 61787, 61931, 62016, 62017, 62018, 62019,
+ 62020, 62087, 62099, 62212, 62189, 62810, 63426, 63650
+*/
-#define LV_SYMBOL_AUDIO "\xef\x80\x81"
-#define LV_SYMBOL_VIDEO "\xef\x80\x88"
-#define LV_SYMBOL_LIST "\xef\x80\x8b"
-#define LV_SYMBOL_OK "\xef\x80\x8c"
-#define LV_SYMBOL_CLOSE "\xef\x80\x8d"
-#define LV_SYMBOL_POWER "\xef\x80\x91"
-#define LV_SYMBOL_SETTINGS "\xef\x80\x93"
-#define LV_SYMBOL_TRASH "\xef\x80\x94"
-#define LV_SYMBOL_HOME "\xef\x80\x95"
-#define LV_SYMBOL_DOWNLOAD "\xef\x80\x99"
-#define LV_SYMBOL_DRIVE "\xef\x80\x9c"
-#define LV_SYMBOL_REFRESH "\xef\x80\xa1"
-#define LV_SYMBOL_MUTE "\xef\x80\xa6"
-#define LV_SYMBOL_VOLUME_MID "\xef\x80\xa7"
-#define LV_SYMBOL_VOLUME_MAX "\xef\x80\xa8"
-#define LV_SYMBOL_IMAGE "\xef\x80\xbe"
-#define LV_SYMBOL_EDIT "\xef\x81\x80"
-#define LV_SYMBOL_PREV "\xef\x81\x88"
-#define LV_SYMBOL_PLAY "\xef\x81\x8b"
-#define LV_SYMBOL_PAUSE "\xef\x81\x8c"
-#define LV_SYMBOL_STOP "\xef\x81\x8d"
-#define LV_SYMBOL_NEXT "\xef\x81\x91"
-#define LV_SYMBOL_EJECT "\xef\x81\x92"
-#define LV_SYMBOL_LEFT "\xef\x81\x93"
-#define LV_SYMBOL_RIGHT "\xef\x81\x94"
-#define LV_SYMBOL_PLUS "\xef\x81\xa7"
-#define LV_SYMBOL_MINUS "\xef\x81\xa8"
-#define LV_SYMBOL_WARNING "\xef\x81\xb1"
-#define LV_SYMBOL_SHUFFLE "\xef\x81\xb4"
-#define LV_SYMBOL_UP "\xef\x81\xb7"
-#define LV_SYMBOL_DOWN "\xef\x81\xb8"
-#define LV_SYMBOL_LOOP "\xef\x81\xb9"
-#define LV_SYMBOL_DIRECTORY "\xef\x81\xbb"
-#define LV_SYMBOL_UPLOAD "\xef\x82\x93"
-#define LV_SYMBOL_CALL "\xef\x82\x95"
-#define LV_SYMBOL_CUT "\xef\x83\x84"
-#define LV_SYMBOL_COPY "\xef\x83\x85"
-#define LV_SYMBOL_SAVE "\xef\x83\x87"
-#define LV_SYMBOL_CHARGE "\xef\x83\xa7"
-#define LV_SYMBOL_BELL "\xef\x83\xb3"
-#define LV_SYMBOL_KEYBOARD "\xef\x84\x9c"
-#define LV_SYMBOL_GPS "\xef\x84\xa4"
-#define LV_SYMBOL_FILE "\xef\x85\x9b"
-#define LV_SYMBOL_WIFI "\xef\x87\xab"
-#define LV_SYMBOL_BATTERY_FULL "\xef\x89\x80"
-#define LV_SYMBOL_BATTERY_3 "\xef\x89\x81"
-#define LV_SYMBOL_BATTERY_2 "\xef\x89\x82"
-#define LV_SYMBOL_BATTERY_1 "\xef\x89\x83"
-#define LV_SYMBOL_BATTERY_EMPTY "\xef\x89\x84"
-#define LV_SYMBOL_BLUETOOTH "\xef\x8a\x93"
+#define LV_SYMBOL_AUDIO "\xef\x80\x81" /*61441, 0xF001*/
+#define LV_SYMBOL_VIDEO "\xef\x80\x88" /*61448, 0xF008*/
+#define LV_SYMBOL_LIST "\xef\x80\x8b" /*61451, 0xF00B*/
+#define LV_SYMBOL_OK "\xef\x80\x8c" /*61452, 0xF00C*/
+#define LV_SYMBOL_CLOSE "\xef\x80\x8d" /*61453, 0xF00D*/
+#define LV_SYMBOL_POWER "\xef\x80\x91" /*61457, 0xF011*/
+#define LV_SYMBOL_SETTINGS "\xef\x80\x93" /*61459, 0xF013*/
+#define LV_SYMBOL_HOME "\xef\x80\x95" /*61461, 0xF015*/
+#define LV_SYMBOL_DOWNLOAD "\xef\x80\x99" /*61465, 0xF019*/
+#define LV_SYMBOL_DRIVE "\xef\x80\x9c" /*61468, 0xF01C*/
+#define LV_SYMBOL_REFRESH "\xef\x80\xa1" /*61473, 0xF021*/
+#define LV_SYMBOL_MUTE "\xef\x80\xa6" /*61478, 0xF026*/
+#define LV_SYMBOL_VOLUME_MID "\xef\x80\xa7" /*61479, 0xF027*/
+#define LV_SYMBOL_VOLUME_MAX "\xef\x80\xa8" /*61480, 0xF028*/
+#define LV_SYMBOL_IMAGE "\xef\x80\xbe" /*61502, 0xF03E*/
+#define LV_SYMBOL_EDIT "\xef\x8C\x84" /*62212, 0xF304*/
+#define LV_SYMBOL_PREV "\xef\x81\x88" /*61512, 0xF048*/
+#define LV_SYMBOL_PLAY "\xef\x81\x8b" /*61515, 0xF04B*/
+#define LV_SYMBOL_PAUSE "\xef\x81\x8c" /*61516, 0xF04C*/
+#define LV_SYMBOL_STOP "\xef\x81\x8d" /*61517, 0xF04D*/
+#define LV_SYMBOL_NEXT "\xef\x81\x91" /*61521, 0xF051*/
+#define LV_SYMBOL_EJECT "\xef\x81\x92" /*61522, 0xF052*/
+#define LV_SYMBOL_LEFT "\xef\x81\x93" /*61523, 0xF053*/
+#define LV_SYMBOL_RIGHT "\xef\x81\x94" /*61524, 0xF054*/
+#define LV_SYMBOL_PLUS "\xef\x81\xa7" /*61543, 0xF067*/
+#define LV_SYMBOL_MINUS "\xef\x81\xa8" /*61544, 0xF068*/
+#define LV_SYMBOL_EYE_OPEN "\xef\x81\xae" /*61550, 0xF06E*/
+#define LV_SYMBOL_EYE_CLOSE "\xef\x81\xb0" /*61552, 0xF070*/
+#define LV_SYMBOL_WARNING "\xef\x81\xb1" /*61553, 0xF071*/
+#define LV_SYMBOL_SHUFFLE "\xef\x81\xb4" /*61556, 0xF074*/
+#define LV_SYMBOL_UP "\xef\x81\xb7" /*61559, 0xF077*/
+#define LV_SYMBOL_DOWN "\xef\x81\xb8" /*61560, 0xF078*/
+#define LV_SYMBOL_LOOP "\xef\x81\xb9" /*61561, 0xF079*/
+#define LV_SYMBOL_DIRECTORY "\xef\x81\xbb" /*61563, 0xF07B*/
+#define LV_SYMBOL_UPLOAD "\xef\x82\x93" /*61587, 0xF093*/
+#define LV_SYMBOL_CALL "\xef\x82\x95" /*61589, 0xF095*/
+#define LV_SYMBOL_CUT "\xef\x83\x84" /*61636, 0xF0C4*/
+#define LV_SYMBOL_COPY "\xef\x83\x85" /*61637, 0xF0C5*/
+#define LV_SYMBOL_SAVE "\xef\x83\x87" /*61639, 0xF0C7*/
+#define LV_SYMBOL_CHARGE "\xef\x83\xa7" /*61671, 0xF0E7*/
+#define LV_SYMBOL_PASTE "\xef\x83\xAA" /*61674, 0xF0EA*/
+#define LV_SYMBOL_BELL "\xef\x83\xb3" /*61683, 0xF0F3*/
+#define LV_SYMBOL_KEYBOARD "\xef\x84\x9c" /*61724, 0xF11C*/
+#define LV_SYMBOL_GPS "\xef\x84\xa4" /*61732, 0xF124*/
+#define LV_SYMBOL_FILE "\xef\x85\x9b" /*61787, 0xF158*/
+#define LV_SYMBOL_WIFI "\xef\x87\xab" /*61931, 0xF1EB*/
+#define LV_SYMBOL_BATTERY_FULL "\xef\x89\x80" /*62016, 0xF240*/
+#define LV_SYMBOL_BATTERY_3 "\xef\x89\x81" /*62017, 0xF241*/
+#define LV_SYMBOL_BATTERY_2 "\xef\x89\x82" /*62018, 0xF242*/
+#define LV_SYMBOL_BATTERY_1 "\xef\x89\x83" /*62019, 0xF243*/
+#define LV_SYMBOL_BATTERY_EMPTY "\xef\x89\x84" /*62020, 0xF244*/
+#define LV_SYMBOL_USB "\xef\x8a\x87" /*62087, 0xF287*/
+#define LV_SYMBOL_BLUETOOTH "\xef\x8a\x93" /*62099, 0xF293*/
+#define LV_SYMBOL_TRASH "\xef\x8B\xAD" /*62189, 0xF2ED*/
+#define LV_SYMBOL_BACKSPACE "\xef\x95\x9A" /*62810, 0xF55A*/
+#define LV_SYMBOL_SD_CARD "\xef\x9F\x82" /*63426, 0xF7C2*/
+#define LV_SYMBOL_NEW_LINE "\xef\xA2\xA2" /*63650, 0xF8A2*/
/** Invalid symbol at (U+F8FF). If written before a string then `lv_img` will show it as a label*/
#define LV_SYMBOL_DUMMY "\xEF\xA3\xBF"
diff --git a/src/lv_hal/lv_hal_disp.c b/src/lv_hal/lv_hal_disp.c
index 9e97e6b37..11a3bbcb2 100644
--- a/src/lv_hal/lv_hal_disp.c
+++ b/src/lv_hal/lv_hal_disp.c
@@ -12,6 +12,7 @@
#include
#include
#include "lv_hal.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_misc/lv_mem.h"
#include "../lv_core/lv_obj.h"
#include "../lv_core/lv_refr.h"
@@ -118,7 +119,7 @@ lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
{
lv_disp_t * disp = lv_ll_ins_head(&LV_GC_ROOT(_lv_disp_ll));
if(!disp) {
- lv_mem_assert(disp);
+ LV_ASSERT_MEM(disp);
return NULL;
}
@@ -137,7 +138,7 @@ lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
disp->act_scr = lv_obj_create(NULL, NULL); /*Create a default screen on the display*/
disp->top_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
- disp->sys_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
+ disp->sys_layer = lv_obj_create(NULL, NULL); /*Create sys layer on the display*/
lv_obj_set_style(disp->top_layer, &lv_style_transp);
lv_obj_set_style(disp->sys_layer, &lv_style_transp);
@@ -147,7 +148,7 @@ lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
/*Create a refresh task*/
disp->refr_task = lv_task_create(lv_disp_refr_task, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, disp);
- lv_mem_assert(disp->refr_task);
+ LV_ASSERT_MEM(disp->refr_task);
if(disp->refr_task == NULL) return NULL;
lv_task_ready(disp->refr_task); /*Be sure the screen will be refreshed immediately on start up*/
@@ -190,7 +191,7 @@ void lv_disp_remove(lv_disp_t * disp)
indev = lv_indev_get_next(indev);
}
- lv_ll_rem(&LV_GC_ROOT(_lv_disp_ll), disp);
+ lv_ll_remove(&LV_GC_ROOT(_lv_disp_ll), disp);
lv_mem_free(disp);
if(was_default) lv_disp_set_default(lv_ll_get_head(&LV_GC_ROOT(_lv_disp_ll)));
@@ -267,14 +268,14 @@ bool lv_disp_get_antialiasing(lv_disp_t * disp)
*/
LV_ATTRIBUTE_FLUSH_READY void lv_disp_flush_ready(lv_disp_drv_t * disp_drv)
{
- disp_drv->buffer->flushing = 0;
-
/*If the screen is transparent initialize it when the flushing is ready*/
#if LV_COLOR_SCREEN_TRANSP
if(disp_drv->screen_transp) {
memset(disp_drv->buffer->buf_act, 0x00, disp_drv->buffer->size * sizeof(lv_color32_t));
}
#endif
+
+ disp_drv->buffer->flushing = 0;
}
/**
diff --git a/src/lv_hal/lv_hal_indev.c b/src/lv_hal/lv_hal_indev.c
index 112734117..35ff1b318 100644
--- a/src/lv_hal/lv_hal_indev.c
+++ b/src/lv_hal/lv_hal_indev.c
@@ -8,6 +8,7 @@
/*********************
* INCLUDES
*********************/
+#include "../lv_core/lv_debug.h"
#include "../lv_hal/lv_hal_indev.h"
#include "../lv_core/lv_indev.h"
#include "../lv_misc/lv_mem.h"
@@ -77,7 +78,7 @@ lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver)
lv_indev_t * indev = lv_ll_ins_head(&LV_GC_ROOT(_lv_indev_ll));
if(!indev) {
- lv_mem_assert(indev);
+ LV_ASSERT_MEM(indev);
return NULL;
}
diff --git a/src/lv_hal/lv_hal_indev.h b/src/lv_hal/lv_hal_indev.h
index ef1a55596..ee39e6e95 100644
--- a/src/lv_hal/lv_hal_indev.h
+++ b/src/lv_hal/lv_hal_indev.h
@@ -54,6 +54,18 @@ typedef uint8_t lv_indev_type_t;
enum { LV_INDEV_STATE_REL = 0, LV_INDEV_STATE_PR };
typedef uint8_t lv_indev_state_t;
+
+enum {
+ LV_DRAG_DIR_NONE = 0x0, /**< Both directions are disabled */
+ LV_DRAG_DIR_HOR = 0x1, /**< Object can be dragged horizontally. */
+ LV_DRAG_DIR_VER = 0x2, /**< Object can be dragged vertically. */
+ LV_DRAG_DIR_BOTH = 0x3, /**< Object can be dragged in all directions. */
+ LV_DRAG_DIR_ONE = 0x4, /**< Object can be dragged only one direction (the first move). */
+};
+
+typedef uint8_t lv_drag_dir_t;
+
+
/** Data structure passed to an input driver to fill */
typedef struct
{
@@ -65,6 +77,7 @@ typedef struct
lv_indev_state_t state; /**< LV_INDEV_STATE_REL or LV_INDEV_STATE_PR*/
} lv_indev_data_t;
+
/** Initialized by the user and registered by 'lv_indev_add()'*/
typedef struct _lv_indev_drv_t
{
@@ -127,6 +140,7 @@ typedef struct _lv_indev_proc_t
/*Flags*/
uint8_t drag_limit_out : 1;
uint8_t drag_in_prog : 1;
+ lv_drag_dir_t drag_dir : 3;
} pointer;
struct
{ /*Keypad data*/
diff --git a/src/lv_misc/lv_anim.c b/src/lv_misc/lv_anim.c
index 5a50165b8..073ba7831 100644
--- a/src/lv_misc/lv_anim.c
+++ b/src/lv_misc/lv_anim.c
@@ -11,6 +11,7 @@
#if LV_USE_ANIMATION
#include
#include
+#include "../lv_core/lv_debug.h"
#include "../lv_hal/lv_hal_tick.h"
#include "lv_task.h"
#include "lv_math.h"
@@ -89,7 +90,7 @@ void lv_anim_create(lv_anim_t * a)
/*Add the new animation to the animation linked list*/
lv_anim_t * new_anim = lv_ll_ins_head(&LV_GC_ROOT(_lv_anim_ll));
- lv_mem_assert(new_anim);
+ LV_ASSERT_MEM(new_anim);
if(new_anim == NULL) return;
/*Initialize the animation descriptor*/
@@ -124,7 +125,7 @@ bool lv_anim_del(void * var, lv_anim_exec_xcb_t exec_cb)
a_next = lv_ll_get_next(&LV_GC_ROOT(_lv_anim_ll), a);
if(a->var == var && (a->exec_cb == exec_cb || exec_cb == NULL)) {
- lv_ll_rem(&LV_GC_ROOT(_lv_anim_ll), a);
+ lv_ll_remove(&LV_GC_ROOT(_lv_anim_ll), a);
lv_mem_free(a);
anim_list_changed = true; /*Read by `anim_task`. It need to know if a delete occurred in
the linked list*/
@@ -443,7 +444,7 @@ static bool anim_ready_handler(lv_anim_t * a)
* This way the `ready_cb` will see the animations like it's animation is ready deleted*/
lv_anim_t a_tmp;
memcpy(&a_tmp, a, sizeof(lv_anim_t));
- lv_ll_rem(&LV_GC_ROOT(_lv_anim_ll), a);
+ lv_ll_remove(&LV_GC_ROOT(_lv_anim_ll), a);
lv_mem_free(a);
anim_list_changed = true;
diff --git a/src/lv_misc/lv_anim.h b/src/lv_misc/lv_anim.h
index 299f7c455..36cc35adc 100644
--- a/src/lv_misc/lv_anim.h
+++ b/src/lv_misc/lv_anim.h
@@ -129,10 +129,10 @@ static inline void lv_anim_set_exec_cb(lv_anim_t * a, void * var, lv_anim_exec_x
* @param duration duration of the animation in milliseconds
* @param delay delay before the animation in milliseconds
*/
-static inline void lv_anim_set_time(lv_anim_t * a, uint16_t duration, uint16_t delay)
+static inline void lv_anim_set_time(lv_anim_t * a, uint16_t duration, int16_t delay)
{
a->time = duration;
- a->act_time = -delay;
+ a->act_time = (int16_t)(-delay);
}
/**
diff --git a/src/lv_misc/lv_area.c b/src/lv_misc/lv_area.c
index 025e1733e..de649c5b0 100644
--- a/src/lv_misc/lv_area.c
+++ b/src/lv_misc/lv_area.c
@@ -192,6 +192,19 @@ bool lv_area_is_in(const lv_area_t * ain_p, const lv_area_t * aholder_p)
return is_in;
}
+/**
+ * Increment or decrement an area's size by a single amount
+ * @param a_p pointer to an area to grow
+ * @param amount amount to increment the area, or negative to decrement
+ */
+void lv_area_increment(lv_area_t * a_p, const lv_coord_t amount)
+{
+ a_p->x1 -= amount;
+ a_p->y1 -= amount;
+ a_p->x2 += amount;
+ a_p->y2 += amount;
+}
+
/**********************
* STATIC FUNCTIONS
**********************/
diff --git a/src/lv_misc/lv_area.h b/src/lv_misc/lv_area.h
index 30b62cbec..211bebd84 100644
--- a/src/lv_misc/lv_area.h
+++ b/src/lv_misc/lv_area.h
@@ -29,6 +29,9 @@ extern "C" {
#define LV_COORD_MAX ((lv_coord_t)((uint32_t)((uint32_t)1 << (8 * sizeof(lv_coord_t) - 1)) - 1000))
#define LV_COORD_MIN (-LV_COORD_MAX)
+LV_EXPORT_CONST_INT(LV_COORD_MAX);
+LV_EXPORT_CONST_INT(LV_COORD_MIN);
+
/**********************
* TYPEDEFS
**********************/
@@ -82,7 +85,7 @@ inline static void lv_area_copy(lv_area_t * dest, const lv_area_t * src)
*/
static inline lv_coord_t lv_area_get_width(const lv_area_t * area_p)
{
- return area_p->x2 - area_p->x1 + 1;
+ return (lv_coord_t)(area_p->x2 - area_p->x1 + 1);
}
/**
@@ -92,7 +95,7 @@ static inline lv_coord_t lv_area_get_width(const lv_area_t * area_p)
*/
static inline lv_coord_t lv_area_get_height(const lv_area_t * area_p)
{
- return area_p->y2 - area_p->y1 + 1;
+ return (lv_coord_t)(area_p->y2 - area_p->y1 + 1);
}
/**
@@ -165,6 +168,13 @@ bool lv_area_is_on(const lv_area_t * a1_p, const lv_area_t * a2_p);
*/
bool lv_area_is_in(const lv_area_t * ain_p, const lv_area_t * aholder_p);
+/**
+ * Increment or decrement an area's size by a single amount
+ * @param a_p pointer to an area to grow
+ * @param amount amount to increment the area, or negative to decrement
+ */
+void lv_area_increment(lv_area_t * a_p, const lv_coord_t amount);
+
/**********************
* MACROS
**********************/
diff --git a/src/lv_misc/lv_bidi.c b/src/lv_misc/lv_bidi.c
new file mode 100644
index 000000000..5ab50312d
--- /dev/null
+++ b/src/lv_misc/lv_bidi.c
@@ -0,0 +1,616 @@
+/**
+ * @file lv_bidi.c
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+#include
+#include "lv_bidi.h"
+#include "lv_txt.h"
+#include "../lv_misc/lv_mem.h"
+
+#if LV_USE_BIDI
+
+/*********************
+ * DEFINES
+ *********************/
+#define LV_BIDI_BRACKLET_DEPTH 4
+
+// Highest bit of the 16-bit pos_conv value specifies whether this pos is RTL or not
+#define GET_POS(x) ((x) & 0x7FFF)
+#define IS_RTL_POS(x) (((x) & 0x8000) != 0)
+#define SET_RTL_POS(x, is_rtl) (GET_POS(x) | ((is_rtl)? 0x8000: 0))
+
+/**********************
+ * TYPEDEFS
+ **********************/
+typedef struct
+{
+ uint32_t bracklet_pos;
+ lv_bidi_dir_t dir;
+}bracket_stack_t;
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint32_t max_len, uint32_t * len, uint16_t * pos_conv_len);
+static void rtl_reverse(char * dest, const char * src, uint32_t len, uint16_t *pos_conv_out, uint16_t pos_conv_rd_base, uint16_t pos_conv_len);
+static uint32_t char_change_to_pair(uint32_t letter);
+static lv_bidi_dir_t bracket_process(const char * txt, uint32_t next_pos, uint32_t len, uint32_t letter, lv_bidi_dir_t base_dir);
+static void fill_pos_conv(uint16_t * out, uint16_t len, uint16_t index);
+static uint32_t get_txt_len(const char * txt, uint32_t max_len);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+static const uint8_t bracket_left[] = {"<({["};
+static const uint8_t bracket_right[] = {">)}]"};
+static bracket_stack_t br_stack[LV_BIDI_BRACKLET_DEPTH];
+static uint8_t br_stack_p;
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Convert a text to get the characters in the correct visual order according to
+ * Unicode Bidirectional Algorithm
+ * @param str_in the text to process
+ * @param str_out store the result here. Has the be `strlen(str_in)` length
+ * @param base_dir `LV_BIDI_DIR_LTR` or `LV_BIDI_DIR_RTL`
+ */
+void lv_bidi_process(const char * str_in, char * str_out, lv_bidi_dir_t base_dir)
+{
+ if(base_dir == LV_BIDI_DIR_AUTO) base_dir = lv_bidi_detect_base_dir(str_in);
+
+ uint32_t par_start = 0;
+ uint32_t par_len;
+
+ while(str_in[par_start] == '\n' || str_in[par_start] == '\r') {
+ str_out[par_start] = str_in[par_start];
+ par_start ++;
+ }
+
+ while(str_in[par_start] != '\0') {
+ par_len = lv_bidi_get_next_paragraph(&str_in[par_start]);
+ lv_bidi_process_paragraph(&str_in[par_start], &str_out[par_start], par_len, base_dir, NULL, 0);
+ par_start += par_len;
+
+ while(str_in[par_start] == '\n' || str_in[par_start] == '\r') {
+ str_out[par_start] = str_in[par_start];
+ par_start ++;
+ }
+ }
+
+ str_out[par_start] = '\0';
+}
+
+/**
+ * Auto-detect the direction of a text based on the first strong character
+ * @param txt the text to process
+ * @return `LV_BIDI_DIR_LTR` or `LV_BIDI_DIR_RTL`
+ */
+lv_bidi_dir_t lv_bidi_detect_base_dir(const char * txt)
+{
+ uint32_t i = 0;
+ uint32_t letter;
+ while(txt[i] != '\0') {
+ letter = lv_txt_encoded_next(txt, &i);
+
+ lv_bidi_dir_t dir;
+ dir = lv_bidi_get_letter_dir(letter);
+ if(dir == LV_BIDI_DIR_RTL || dir == LV_BIDI_DIR_LTR) return dir;
+ }
+
+ /*If there were no strong char earlier return with the default base dir */
+ if(LV_BIDI_BASE_DIR_DEF == LV_BIDI_DIR_AUTO) return LV_BIDI_DIR_LTR;
+ else return LV_BIDI_BASE_DIR_DEF;
+}
+/**
+ * Get the direction of a character
+ * @param letter an Unicode character
+ * @return `LV_BIDI_DIR_RTL/LTR/WEAK/NEUTRAL`
+ */
+lv_bidi_dir_t lv_bidi_get_letter_dir(uint32_t letter)
+{
+ if(lv_bidi_letter_is_rtl(letter)) return LV_BIDI_DIR_RTL;
+ if(lv_bidi_letter_is_neutral(letter)) return LV_BIDI_DIR_NEUTRAL;
+ if(lv_bidi_letter_is_weak(letter)) return LV_BIDI_DIR_WEAK;
+
+ return LV_BIDI_DIR_LTR;
+}
+/**
+ * Tell whether a character is weak or not
+ * @param letter an Unicode character
+ * @return true/false
+ */
+bool lv_bidi_letter_is_weak(uint32_t letter)
+{
+ uint32_t i = 0;
+ static const char weaks[] = "0123456789";
+
+ do {
+ uint32_t x = lv_txt_encoded_next(weaks, &i);
+ if(letter == x) {
+ return true;
+ }
+ } while(weaks[i] != '\0');
+
+ return false;
+}
+/**
+ * Tell whether a character is RTL or not
+ * @param letter an Unicode character
+ * @return true/false
+ */
+bool lv_bidi_letter_is_rtl(uint32_t letter)
+{
+ if(letter >= 0x5d0 && letter <= 0x5ea) return true;
+ if(letter == 0x202E) return true; /*Unicode of LV_BIDI_RLO*/
+
+ return false;
+}
+
+/**
+ * Tell whether a character is neutral or not
+ * @param letter an Unicode character
+ * @return true/false
+ */
+bool lv_bidi_letter_is_neutral(uint32_t letter)
+{
+ uint16_t i;
+ static const char neutrals[] = " \t\n\r.,:;'\"`!?%/\\-=()[]{}<>@#&$|";
+ for(i = 0; neutrals[i] != '\0'; i++) {
+ if(letter == (uint32_t)neutrals[i]) return true;
+ }
+
+ return false;
+}
+
+/**
+ * Get the logical position of a character in a line
+ * @param str_in the input string. Can be only one line.
+ * @param bidi_txt internally the text is bidi processed which buffer can be get here.
+ * If not required anymore has to freed with `lv_mem_free()`
+ * Can be `NULL` is unused
+ * @param len length of the line in character count
+ * @param base_dir base direction of the text: `LV_BIDI_DIR_LTR` or `LV_BIDI_DIR_RTL`
+ * @param vicual_pos the visual character position which logical position should be get
+ * @param is_rtl tell the the char at `viasual_pos` is RTL or LTR context
+ * @return the logical character position
+ */
+uint16_t lv_bidi_get_logical_pos(const char * str_in, char **bidi_txt, uint32_t len, lv_bidi_dir_t base_dir, uint32_t visual_pos, bool *is_rtl)
+{
+ uint32_t pos_conv_len = get_txt_len(str_in, len);
+ void *buf = lv_mem_buf_get(len + pos_conv_len * sizeof(uint16_t));
+ if(buf == NULL) return (uint16_t) -1;
+ if (bidi_txt) *bidi_txt = buf;
+
+ uint16_t *pos_conv_buf = (uint16_t*) ((char*)buf + len);
+ lv_bidi_process_paragraph(str_in, bidi_txt? *bidi_txt: NULL, len, base_dir, pos_conv_buf, pos_conv_len);
+
+ if (is_rtl) *is_rtl = IS_RTL_POS(pos_conv_buf[visual_pos]);
+
+ if(bidi_txt == NULL) lv_mem_buf_release(buf);
+ return GET_POS(pos_conv_buf[visual_pos]);
+}
+
+/**
+ * Get the visual position of a character in a line
+ * @param str_in the input string. Can be only one line.
+ * @param bidi_txt internally the text is bidi processed which buffer can be get here.
+ * If not required anymore has to freed with `lv_mem_free()`
+ * Can be `NULL` is unused
+ * @param len length of the line in character count
+ * @param base_dir base direction of the text: `LV_BIDI_DIR_LTR` or `LV_BIDI_DIR_RTL`
+ * @param logical_pos the logical character position which visual position should be get
+ * @param is_rtl tell the the char at `logical_pos` is RTL or LTR context
+ * @return the visual character position
+ */
+uint16_t lv_bidi_get_visual_pos(const char * str_in, char **bidi_txt, uint16_t len, lv_bidi_dir_t base_dir, uint32_t logical_pos, bool *is_rtl)
+{
+ uint32_t pos_conv_len = get_txt_len(str_in, len);
+ void *buf = lv_mem_buf_get(len + pos_conv_len * sizeof(uint16_t));
+ if(buf == NULL) return (uint16_t) -1;
+ if (bidi_txt) *bidi_txt = buf;
+
+ uint16_t *pos_conv_buf = (uint16_t*) ((char*)buf + len);
+ lv_bidi_process_paragraph(str_in, bidi_txt ? *bidi_txt: NULL, len, base_dir, pos_conv_buf, pos_conv_len);
+ for (uint16_t i = 0; i < pos_conv_len; i++){
+ if (GET_POS(pos_conv_buf[i]) == logical_pos){
+ if (is_rtl) *is_rtl = IS_RTL_POS(pos_conv_buf[i]);
+ if(bidi_txt == NULL) lv_mem_buf_release(buf);
+ return i;
+ }
+ }
+ if(bidi_txt == NULL) lv_mem_buf_release(buf);
+ return (uint16_t) -1;
+}
+
+/**
+ * Bidi process a paragraph of text
+ * @param str_in the string to process
+ * @param str_out store the result here
+ * @param len length of teh text
+ * @param base_dir base dir of the text
+ * @param pos_conv_out an `uint16_t` array to store the related logical position of the character.
+ * Can be `NULL` is unused
+ * @param pos_conv_len length of `pos_conv_out` in element count
+ */
+void lv_bidi_process_paragraph(const char * str_in, char * str_out, uint32_t len, lv_bidi_dir_t base_dir, uint16_t *pos_conv_out, uint16_t pos_conv_len)
+{
+ uint32_t run_len = 0;
+ lv_bidi_dir_t run_dir;
+ uint32_t rd = 0;
+ uint32_t wr;
+ uint16_t pos_conv_run_len = 0;
+ uint16_t pos_conv_rd = 0;
+ uint16_t pos_conv_wr;
+
+ if(base_dir == LV_BIDI_DIR_AUTO) base_dir = lv_bidi_detect_base_dir(str_in);
+ if(base_dir == LV_BIDI_DIR_RTL) {
+ wr = len;
+ pos_conv_wr = pos_conv_len;
+ }
+ else {
+ wr = 0;
+ pos_conv_wr = 0;
+ }
+
+ if (str_out) str_out[len] = '\0';
+
+ lv_bidi_dir_t dir = base_dir;
+
+ /*Empty the bracket stack*/
+ br_stack_p = 0;
+
+ /*Process neutral chars in the beginning*/
+ while(rd < len) {
+ uint32_t letter = lv_txt_encoded_next(str_in, &rd);
+ pos_conv_rd++;
+ dir = lv_bidi_get_letter_dir(letter);
+ if(dir == LV_BIDI_DIR_NEUTRAL) dir = bracket_process(str_in, rd, len, letter, base_dir);
+ if(dir != LV_BIDI_DIR_NEUTRAL && dir != LV_BIDI_DIR_WEAK) break;
+ }
+
+ if(rd && str_in[rd] != '\0') {
+ lv_txt_encoded_prev(str_in, &rd);
+ pos_conv_rd--;
+ }
+
+ if(rd) {
+ if(base_dir == LV_BIDI_DIR_LTR) {
+ if (str_out) {
+ memcpy(&str_out[wr], str_in, rd);
+ wr += rd;
+ }
+ if (pos_conv_out) {
+ fill_pos_conv(&pos_conv_out[pos_conv_wr], pos_conv_rd, 0);
+ pos_conv_wr += pos_conv_rd;
+ }
+ } else {
+ wr -= rd;
+ pos_conv_wr -= pos_conv_rd;
+ rtl_reverse(str_out? &str_out[wr]: NULL, str_in, rd, pos_conv_out? &pos_conv_out[pos_conv_wr]: NULL, 0, pos_conv_rd);
+ }
+ }
+
+ /*Get and process the runs*/
+
+ while(rd < len && str_in[rd]) {
+ run_dir = get_next_run(&str_in[rd], base_dir, len - rd, &run_len, &pos_conv_run_len);
+
+ if(base_dir == LV_BIDI_DIR_LTR) {
+ if(run_dir == LV_BIDI_DIR_LTR) {
+ if (str_out) memcpy(&str_out[wr], &str_in[rd], run_len);
+ if (pos_conv_out) fill_pos_conv(&pos_conv_out[pos_conv_wr], pos_conv_run_len, pos_conv_rd);
+ }
+ else rtl_reverse(str_out? &str_out[wr]: NULL, &str_in[rd], run_len, pos_conv_out? &pos_conv_out[pos_conv_wr] : NULL, pos_conv_rd, pos_conv_run_len);
+ wr += run_len;
+ pos_conv_wr += pos_conv_run_len;
+ } else {
+ wr -= run_len;
+ pos_conv_wr -= pos_conv_run_len;
+ if(run_dir == LV_BIDI_DIR_LTR) {
+ if (str_out) memcpy(&str_out[wr], &str_in[rd], run_len);
+ if (pos_conv_out) fill_pos_conv(&pos_conv_out[pos_conv_wr], pos_conv_run_len, pos_conv_rd);
+ }
+ else rtl_reverse(str_out? &str_out[wr]: NULL, &str_in[rd], run_len, pos_conv_out? &pos_conv_out[pos_conv_wr] : NULL, pos_conv_rd, pos_conv_run_len);
+ }
+
+ rd += run_len;
+ pos_conv_rd += pos_conv_run_len;
+ }
+}
+
+/**
+ * Get the next paragraph from a text
+ * @param txt the text to process
+ * @return the length of the current paragraph in byte count
+ */
+uint32_t lv_bidi_get_next_paragraph(const char * txt)
+{
+ uint32_t i = 0;
+
+ lv_txt_encoded_next(txt, &i);
+
+ while(txt[i] != '\0' && txt[i] != '\n' && txt[i] != '\r') {
+ lv_txt_encoded_next(txt, &i);
+ }
+
+ return i;
+}
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+static uint32_t get_txt_len(const char * txt, uint32_t max_len)
+{
+ uint32_t len = 0;
+ uint32_t i = 0;
+
+ while(i < max_len && txt[i] != '\0') {
+ lv_txt_encoded_next(txt, &i);
+ len++;
+ }
+
+ return len;
+}
+
+static void fill_pos_conv(uint16_t * out, uint16_t len, uint16_t index)
+{
+ for (uint16_t i = 0; i < len; i++)
+ {
+ out[i] = SET_RTL_POS(index, false);
+ index++;
+ }
+}
+
+static lv_bidi_dir_t get_next_run(const char * txt, lv_bidi_dir_t base_dir, uint32_t max_len, uint32_t * len, uint16_t * pos_conv_len)
+{
+ uint32_t i = 0;
+ uint32_t letter;
+
+ uint16_t pos_conv_i = 0;
+
+ letter = lv_txt_encoded_next(txt, NULL);
+ lv_bidi_dir_t dir = lv_bidi_get_letter_dir(letter);
+ if(dir == LV_BIDI_DIR_NEUTRAL) dir = bracket_process(txt, 0, max_len, letter, base_dir);
+
+ /*Find the first strong char. Skip the neutrals*/
+ while(dir == LV_BIDI_DIR_NEUTRAL || dir == LV_BIDI_DIR_WEAK) {
+ letter = lv_txt_encoded_next(txt, &i);
+ pos_conv_i++;
+ dir = lv_bidi_get_letter_dir(letter);
+ if(dir == LV_BIDI_DIR_NEUTRAL) dir = bracket_process(txt, i, max_len, letter, base_dir);
+
+ if(i >= max_len || txt[i] == '\0' || txt[i] == '\n' || txt[i] == '\r') {
+ *len = i;
+ *pos_conv_len = pos_conv_i;
+ return base_dir;
+ }
+ }
+
+ lv_bidi_dir_t run_dir = dir;
+
+ uint32_t i_prev = i;
+ uint32_t i_last_strong = i;
+ uint16_t pos_conv_i_prev = pos_conv_i;
+ uint16_t pos_conv_i_last_strong = pos_conv_i;
+
+ /*Find the next char which has different direction*/
+ lv_bidi_dir_t next_dir = base_dir;
+ while(i_prev < max_len && txt[i] != '\0' && txt[i] != '\n' && txt[i] != '\r') {
+ letter = lv_txt_encoded_next(txt, &i);
+ pos_conv_i++;
+ next_dir = lv_bidi_get_letter_dir(letter);
+ if(next_dir == LV_BIDI_DIR_NEUTRAL) next_dir = bracket_process(txt, i, max_len, letter, base_dir);
+
+ /*New dir found?*/
+ if((next_dir == LV_BIDI_DIR_RTL || next_dir == LV_BIDI_DIR_LTR) && next_dir != run_dir) {
+ /*Include neutrals if `run_dir == base_dir` */
+ if(run_dir == base_dir) {
+ *len = i_prev;
+ *pos_conv_len = pos_conv_i_prev;
+ }
+ /*Exclude neutrals if `run_dir != base_dir` */
+ else {
+ *len = i_last_strong;
+ *pos_conv_len = pos_conv_i_last_strong;
+ }
+
+ return run_dir;
+ }
+
+ if(next_dir != LV_BIDI_DIR_NEUTRAL) {
+ i_last_strong = i;
+ pos_conv_i_last_strong = pos_conv_i;
+ }
+
+ i_prev = i;
+ pos_conv_i_prev = pos_conv_i;
+ }
+
+ /*Handle end of of string. Apply `base_dir` on trailing neutrals*/
+
+ /*Include neutrals if `run_dir == base_dir` */
+ if(run_dir == base_dir) {
+ *len = i_prev;
+ *pos_conv_len = pos_conv_i_prev;
+ }
+ /*Exclude neutrals if `run_dir != base_dir` */
+ else {
+ *len = i_last_strong;
+ *pos_conv_len = pos_conv_i_last_strong;
+ }
+
+ return run_dir;
+}
+
+static void rtl_reverse(char * dest, const char * src, uint32_t len, uint16_t *pos_conv_out, uint16_t pos_conv_rd_base, uint16_t pos_conv_len)
+{
+ uint32_t i = len;
+ uint32_t wr = 0;
+ uint16_t pos_conv_i = pos_conv_len;
+ uint16_t pos_conv_wr = 0;
+
+ while(i) {
+ uint32_t letter = lv_txt_encoded_prev(src, &i);
+ uint16_t pos_conv_letter = --pos_conv_i;
+
+ /*Keep weak letters (numbers) as LTR*/
+ if(lv_bidi_letter_is_weak(letter)) {
+ uint32_t last_weak = i;
+ uint32_t first_weak = i;
+ uint16_t pos_conv_last_weak = pos_conv_i;
+ uint16_t pos_conv_first_weak = pos_conv_i;
+ while(i) {
+ letter = lv_txt_encoded_prev(src, &i);
+ pos_conv_letter = --pos_conv_i;
+
+ /*No need to call `char_change_to_pair` because there not such chars here*/
+
+ /*Finish on non-weak char */
+ /*but treat number and currency related chars as weak*/
+ if (lv_bidi_letter_is_weak(letter) == false && letter != '.' && letter != ',' && letter != '$' && letter != '%') {
+ lv_txt_encoded_next(src, &i); /*Rewind one letter*/
+ pos_conv_i++;
+ first_weak = i;
+ pos_conv_first_weak = pos_conv_i;
+ break;
+ }
+ }
+ if(i == 0) {
+ first_weak = 0;
+ pos_conv_first_weak = 0;
+ }
+
+ if (dest) memcpy(&dest[wr], &src[first_weak], last_weak - first_weak + 1);
+ if (pos_conv_out) fill_pos_conv(&pos_conv_out[pos_conv_wr], pos_conv_last_weak - pos_conv_first_weak + 1, pos_conv_rd_base + pos_conv_first_weak);
+ wr += last_weak - first_weak + 1;
+ pos_conv_wr += pos_conv_last_weak - pos_conv_first_weak + 1;
+ }
+
+ /*Simply store in reversed order*/
+ else {
+ uint32_t letter_size = lv_txt_encoded_size((const char *)&src[i]);
+ /*Swap arithmetical symbols*/
+ if(letter_size == 1) {
+ uint32_t new_letter = letter = char_change_to_pair(letter);
+ if (dest) dest[wr] = (uint8_t)new_letter;
+ if (pos_conv_out) pos_conv_out[pos_conv_wr] = SET_RTL_POS(pos_conv_rd_base + pos_conv_letter, true);
+ wr++;
+ pos_conv_wr++;
+ }
+ /*Just store the letter*/
+ else {
+ if (dest) memcpy(&dest[wr], &src[i], letter_size);
+ if (pos_conv_out) pos_conv_out[pos_conv_wr] = SET_RTL_POS(pos_conv_rd_base + pos_conv_i, true);
+ wr += letter_size;
+ pos_conv_wr++;
+ }
+ }
+ }
+}
+
+static uint32_t char_change_to_pair(uint32_t letter)
+{
+
+ uint8_t i;
+ for(i = 0; bracket_left[i] != '\0'; i++) {
+ if(letter == bracket_left[i]) return bracket_right[i];
+ }
+
+ for(i = 0; bracket_right[i] != '\0'; i++) {
+ if(letter == bracket_right[i]) return bracket_left[i];
+ }
+
+ return letter;
+}
+
+static lv_bidi_dir_t bracket_process(const char * txt, uint32_t next_pos, uint32_t len, uint32_t letter, lv_bidi_dir_t base_dir)
+{
+ lv_bidi_dir_t bracket_dir = LV_BIDI_DIR_NEUTRAL;
+
+ uint8_t i;
+ /*Is the letter an opening bracket?*/
+ for(i = 0; bracket_left[i] != '\0'; i++) {
+ if(bracket_left[i] == letter) {
+ /* If so find it's matching closing bracket.
+ * If a char with base dir. direction is found then the brackets will have `base_dir` direction*/
+ uint32_t txt_i = next_pos;
+ while(txt_i < len) {
+ uint32_t letter_next = lv_txt_encoded_next(txt, &txt_i);
+ if(letter_next == bracket_right[i]) {
+ /*Closing bracket found*/
+ break;
+ } else {
+ /*Save the dir*/
+ lv_bidi_dir_t letter_dir = lv_bidi_get_letter_dir(letter_next);
+ if(letter_dir == base_dir) {
+ bracket_dir = base_dir;
+ }
+ }
+ }
+
+ /*There were no matching closing bracket*/
+ if(txt_i > len) return LV_BIDI_DIR_NEUTRAL;
+
+ /*There where a strong char with base dir in the bracket so the dir is found.*/
+ if(bracket_dir != LV_BIDI_DIR_NEUTRAL && bracket_dir != LV_BIDI_DIR_WEAK) break;
+
+ /*If there were no matching strong chars in the brackets then check the previous chars*/
+ txt_i = next_pos;
+ if(txt_i) lv_txt_encoded_prev(txt, &txt_i);
+ while(txt_i > 0) {
+ uint32_t letter_next = lv_txt_encoded_prev(txt, &txt_i);
+ lv_bidi_dir_t letter_dir = lv_bidi_get_letter_dir(letter_next);
+ if(letter_dir == LV_BIDI_DIR_LTR || letter_dir == LV_BIDI_DIR_RTL) {
+ bracket_dir = letter_dir;
+ break;
+ }
+ }
+
+
+ /*There where a previous strong char which can be used*/
+ if(bracket_dir != LV_BIDI_DIR_NEUTRAL) break;
+
+ /*There were no strong chars before the bracket, so use the base dir.*/
+ if(txt_i == 0) bracket_dir = base_dir;
+
+ break;
+ }
+ }
+
+
+ /*The letter was an opening bracket*/
+ if(bracket_left[i] != '\0') {
+
+ if(bracket_dir == LV_BIDI_DIR_NEUTRAL || br_stack_p == LV_BIDI_BRACKLET_DEPTH) return LV_BIDI_DIR_NEUTRAL;
+
+ br_stack[br_stack_p].bracklet_pos = i;
+ br_stack[br_stack_p].dir = bracket_dir;
+
+ br_stack_p++;
+ return bracket_dir;
+ } else if(br_stack_p > 0) {
+ /*Is the letter a closing bracket of the last opening?*/
+ if(letter == bracket_right[br_stack[br_stack_p - 1].bracklet_pos]) {
+ bracket_dir = br_stack[br_stack_p - 1].dir;
+ br_stack_p--;
+ return bracket_dir;
+ }
+ }
+
+ return LV_BIDI_DIR_NEUTRAL;
+}
+
+
+#endif /*LV_USE_BIDI*/
diff --git a/src/lv_misc/lv_bidi.h b/src/lv_misc/lv_bidi.h
new file mode 100644
index 000000000..dfa6565bd
--- /dev/null
+++ b/src/lv_misc/lv_bidi.h
@@ -0,0 +1,156 @@
+/**
+ * @file lv_bifi.h
+ *
+ */
+
+#ifndef LV_BIDI_H
+#define LV_BIDI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#include
+#include
+
+/*********************
+ * DEFINES
+ *********************/
+/* Special non printable strong characters.
+ * They can be inserted to texts to affect the run's direction*/
+#define LV_BIDI_LRO "\xE2\x80\xAD" /*U+202D*/
+#define LV_BIDI_RLO "\xE2\x80\xAE" /*U+202E*/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+enum
+{
+ /*The first 4 values are stored in `lv_obj_t` on 2 bits*/
+ LV_BIDI_DIR_LTR = 0x00,
+ LV_BIDI_DIR_RTL = 0x01,
+ LV_BIDI_DIR_AUTO = 0x02,
+ LV_BIDI_DIR_INHERIT = 0x03,
+
+ LV_BIDI_DIR_NEUTRAL = 0x20,
+ LV_BIDI_DIR_WEAK = 0x21,
+};
+
+typedef uint8_t lv_bidi_dir_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+#if LV_USE_BIDI
+
+/**
+ * Convert a text to get the characters in the correct visual order according to
+ * Unicode Bidirectional Algorithm
+ * @param str_in the text to process
+ * @param str_out store the result here. Has the be `strlen(str_in)` length
+ * @param base_dir `LV_BIDI_DIR_LTR` or `LV_BIDI_DIR_RTL`
+ */
+void lv_bidi_process(const char * str_in, char * str_out, lv_bidi_dir_t base_dir);
+
+/**
+ * Auto-detect the direction of a text based on the first strong character
+ * @param txt the text to process
+ * @return `LV_BIDI_DIR_LTR` or `LV_BIDI_DIR_RTL`
+ */
+lv_bidi_dir_t lv_bidi_detect_base_dir(const char * txt);
+
+/**
+ * Get the direction of a character
+ * @param letter an Unicode character
+ * @return `LV_BIDI_DIR_RTL/LTR/WEAK/NEUTRAL`
+ */
+lv_bidi_dir_t lv_bidi_get_letter_dir(uint32_t letter);
+
+/**
+ * Tell whether a character is weak or not
+ * @param letter an Unicode character
+ * @return true/false
+ */
+bool lv_bidi_letter_is_weak(uint32_t letter);
+
+/**
+ * Tell whether a character is RTL or not
+ * @param letter an Unicode character
+ * @return true/false
+ */
+bool lv_bidi_letter_is_rtl(uint32_t letter);
+
+/**
+ * Tell whether a character is neutral or not
+ * @param letter an Unicode character
+ * @return true/false
+ */
+bool lv_bidi_letter_is_neutral(uint32_t letter);
+
+/**
+ * Get the logical position of a character in a line
+ * @param str_in the input string. Can be only one line.
+ * @param bidi_txt internally the text is bidi processed which buffer can be get here.
+ * If not required anymore has to freed with `lv_mem_free()`
+ * Can be `NULL` is unused
+ * @param len length of the line in character count
+ * @param base_dir base direction of the text: `LV_BIDI_DIR_LTR` or `LV_BIDI_DIR_RTL`
+ * @param vicual_pos the visual character position which logical position should be get
+ * @param is_rtl tell the the char at `viasual_pos` is RTL or LTR context
+ * @return the logical character position
+ */
+uint16_t lv_bidi_get_logical_pos(const char * str_in, char **bidi_txt, uint32_t len, lv_bidi_dir_t base_dir, uint32_t visual_pos, bool *is_rtl);
+
+/**
+ * Get the visual position of a character in a line
+ * @param str_in the input string. Can be only one line.
+ * @param bidi_txt internally the text is bidi processed which buffer can be get here.
+ * If not required anymore has to freed with `lv_mem_free()`
+ * Can be `NULL` is unused
+ * @param len length of the line in character count
+ * @param base_dir base direction of the text: `LV_BIDI_DIR_LTR` or `LV_BIDI_DIR_RTL`
+ * @param logical_pos the logical character position which visual position should be get
+ * @param is_rtl tell the the char at `logical_pos` is RTL or LTR context
+ * @return the visual character position
+ */
+uint16_t lv_bidi_get_visual_pos(const char * str_in, char **bidi_txt, uint16_t len, lv_bidi_dir_t base_dir, uint32_t logical_pos, bool *is_rtl);
+
+/**
+ * Bidi process a paragraph of text
+ * @param str_in the string to process
+ * @param str_out store the result here
+ * @param len length of teh text
+ * @param base_dir base dir of the text
+ * @param pos_conv_out an `uint16_t` array to store the related logical position of the character.
+ * Can be `NULL` is unused
+ * @param pos_conv_len length of `pos_conv_out` in element count
+ */
+void lv_bidi_process_paragraph(const char * str_in, char * str_out, uint32_t len, lv_bidi_dir_t base_dir, uint16_t *pos_conv_out, uint16_t pos_conv_len);
+
+/**
+ * Get the next paragraph from a text
+ * @param txt the text to process
+ * @return the length of the current paragraph in byte count
+ */
+uint32_t lv_bidi_get_next_paragraph(const char * txt);
+
+/**********************
+ * MACROS
+ **********************/
+
+#endif /*LV_USE_BIDI*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_BIDI_H*/
diff --git a/src/lv_misc/lv_color.c b/src/lv_misc/lv_color.c
index f5bec62bb..cd4825dfe 100644
--- a/src/lv_misc/lv_color.c
+++ b/src/lv_misc/lv_color.c
@@ -7,6 +7,7 @@
* INCLUDES
*********************/
#include "lv_color.h"
+#include "lv_math.h"
/*********************
* DEFINES
@@ -105,39 +106,66 @@ lv_color_t lv_color_hsv_to_rgb(uint16_t h, uint8_t s, uint8_t v)
}
/**
- * Convert an RGB color to HSV
- * @param r red
- * @param g green
- * @param b blue
- * @return the given RGB color n HSV
+ * Convert a 32-bit RGB color to HSV
+ * @param r8 8-bit red
+ * @param g8 8-bit green
+ * @param b8 8-bit blue
+ * @return the given RGB color in HSV
*/
-lv_color_hsv_t lv_color_rgb_to_hsv(uint8_t r, uint8_t g, uint8_t b)
+lv_color_hsv_t lv_color_rgb_to_hsv(uint8_t r8, uint8_t g8, uint8_t b8)
{
+ uint16_t r = ((uint32_t)r8 << 10) / 255;
+ uint16_t g = ((uint32_t)g8 << 10) / 255;
+ uint16_t b = ((uint32_t)b8 << 10) / 255;
+
+ uint16_t rgbMin = r < g ? (r < b ? r : b) : (g < b ? g : b);
+ uint16_t rgbMax = r > g ? (r > b ? r : b) : (g > b ? g : b);
+
lv_color_hsv_t hsv;
- uint8_t rgbMin, rgbMax;
- rgbMin = r < g ? (r < b ? r : b) : (g < b ? g : b);
- rgbMax = r > g ? (r > b ? r : b) : (g > b ? g : b);
+ // https://en.wikipedia.org/wiki/HSL_and_HSV#Lightness
+ hsv.v = (100 * rgbMax) >> 10;
- hsv.v = rgbMax;
- if(hsv.v == 0) {
+ int32_t delta = rgbMax - rgbMin;
+ if (LV_MATH_ABS(delta) < 3) {
hsv.h = 0;
hsv.s = 0;
return hsv;
}
- hsv.s = 255 * (long)(rgbMax - rgbMin) / hsv.v;
- if(hsv.s == 0) {
+ // https://en.wikipedia.org/wiki/HSL_and_HSV#Saturation
+ hsv.s = 100 * delta / rgbMax;
+ if(hsv.s < 3) {
hsv.h = 0;
return hsv;
}
+ // https://en.wikipedia.org/wiki/HSL_and_HSV#Hue_and_chroma
+ int32_t h;
if(rgbMax == r)
- hsv.h = 0 + 43 * (g - b) / (rgbMax - rgbMin);
+ h = (((g - b) << 10) / delta) + (g < b ? (6 << 10) : 0); // between yellow & magenta
else if(rgbMax == g)
- hsv.h = 85 + 43 * (b - r) / (rgbMax - rgbMin);
+ h = (((b - r) << 10) / delta) + (2 << 10); // between cyan & yellow
+ else if(rgbMax == b)
+ h = (((r - g) << 10) / delta) + (4 << 10); // between magenta & cyan
else
- hsv.h = 171 + 43 * (r - g) / (rgbMax - rgbMin);
+ h = 0;
+ h *= 60;
+ h >>= 10;
+ if (h < 0) h += 360;
+ hsv.h = h;
return hsv;
}
+
+/**
+ * Convert a color to HSV
+ * @param color color
+ * @return the given color in HSV
+ */
+lv_color_hsv_t lv_color_to_hsv(lv_color_t color)
+{
+ lv_color32_t color32;
+ color32.full = lv_color_to32(color);
+ return lv_color_rgb_to_hsv(color32.ch.red, color32.ch.green, color32.ch.blue);
+}
diff --git a/src/lv_misc/lv_color.h b/src/lv_misc/lv_color.h
index a73ab8c88..606abb245 100644
--- a/src/lv_misc/lv_color.h
+++ b/src/lv_misc/lv_color.h
@@ -75,8 +75,8 @@ enum {
LV_OPA_COVER = 255,
};
-#define LV_OPA_MIN 16 /*Opacities below this will be transparent*/
-#define LV_OPA_MAX 251 /*Opacities above this will fully cover*/
+#define LV_OPA_MIN 5 /*Opacities below this will be transparent*/
+#define LV_OPA_MAX 250 /*Opacities above this will fully cover*/
#if LV_COLOR_DEPTH == 1
#define LV_COLOR_SIZE 8
@@ -90,16 +90,123 @@ enum {
#error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!"
#endif
+/*---------------------------------------
+ * Macros for all existing color depths
+ * to set/get values of the color channels
+ *------------------------------------------*/
+# define LV_COLOR_SET_R1(c, v) (c).ch.red = (uint8_t)((v) & 0x1);
+# define LV_COLOR_SET_G1(c, v) (c).ch.green = (uint8_t)((v) & 0x1);
+# define LV_COLOR_SET_B1(c, v) (c).ch.blue = (uint8_t)((v) & 0x1);
+# define LV_COLOR_SET_A1(c, v)
+
+# define LV_COLOR_GET_R1(c) (c).ch.red
+# define LV_COLOR_GET_G1(c) (c).ch.green
+# define LV_COLOR_GET_B1(c) (c).ch.blue
+# define LV_COLOR_GET_A1(c) 1
+
+# define LV_COLOR_SET_R8(c, v) (c).ch.red = (uint8_t)((v) & 0x7);
+# define LV_COLOR_SET_G8(c, v) (c).ch.green = (uint8_t)((v) & 0x7);
+# define LV_COLOR_SET_B8(c, v) (c).ch.blue = (uint8_t)((v) & 0x3);
+# define LV_COLOR_SET_A8(c, v) do {} while(0)
+
+# define LV_COLOR_GET_R8(c) (c).ch.red
+# define LV_COLOR_GET_G8(c) (c).ch.green
+# define LV_COLOR_GET_B8(c) (c).ch.blue
+# define LV_COLOR_GET_A8(c) 0xFF
+
+# define LV_COLOR_SET_R16(c, v) (c).ch.red = (uint8_t)(((uint8_t)(v)) & 0x1F);
+# define LV_COLOR_SET_G16(c, v) (c).ch.green = (uint8_t)((v) & 0x3F);
+# define LV_COLOR_SET_G16_SWAP(c, v) {(c).ch.green_h = (uint8_t)(((v) >> 3) & 0x7); (c).ch.green_l = (uint8_t)((v) & 0x7);}
+# define LV_COLOR_SET_B16(c, v) (c).ch.blue = (uint8_t)((v) & 0x1F);
+# define LV_COLOR_SET_A16(c, v) do {} while(0)
+
+# define LV_COLOR_GET_R16(c) (c).ch.red
+# define LV_COLOR_GET_G16(c) (c).ch.green
+# define LV_COLOR_GET_G16_SWAP(c) (((c).ch.green_h << 3) + (c).ch.green_l)
+# define LV_COLOR_GET_B16(c) (c).ch.blue
+# define LV_COLOR_GET_A16(c) 0xFF
+
+# define LV_COLOR_SET_R32(c, v) (c).ch.red = (uint32_t)((v) & 0xFF);
+# define LV_COLOR_SET_G32(c, v) (c).ch.green = (uint32_t)((v) & 0xFF);
+# define LV_COLOR_SET_B32(c, v) (c).ch.blue = (uint32_t)((v) & 0xFF);
+# define LV_COLOR_SET_A32(c, v) (c).ch.alpha = (uint32_t)((v) & 0xFF);
+
+# define LV_COLOR_GET_R32(c) (c).ch.red
+# define LV_COLOR_GET_G32(c) (c).ch.green
+# define LV_COLOR_GET_B32(c) (c).ch.blue
+# define LV_COLOR_GET_A32(c) (c).ch.alpha
+
+
+/*---------------------------------------
+ * Macros for the current color depth
+ * to set/get values of the color channels
+ *------------------------------------------*/
+#if LV_COLOR_DEPTH == 1
+# define LV_COLOR_SET_R(c, v) LV_COLOR_SET_R1(c,v)
+# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G1(c,v)
+# define LV_COLOR_SET_B(c, v) LV_COLOR_SET_B1(c,v)
+# define LV_COLOR_SET_A(c, v) LV_COLOR_SET_A1(c,v)
+
+# define LV_COLOR_GET_R(c) LV_COLOR_GET_R1(c)
+# define LV_COLOR_GET_G(c) LV_COLOR_GET_G1(c)
+# define LV_COLOR_GET_B(c) LV_COLOR_GET_B1(c)
+# define LV_COLOR_GET_A(c) LV_COLOR_GET_A1(c)
+
+#elif LV_COLOR_DEPTH == 8
+# define LV_COLOR_SET_R(c, v) LV_COLOR_SET_R8(c,v)
+# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G8(c,v)
+# define LV_COLOR_SET_B(c, v) LV_COLOR_SET_B8(c,v)
+# define LV_COLOR_SET_A(c, v) LV_COLOR_SET_A8(c,v)
+
+# define LV_COLOR_GET_R(c) LV_COLOR_GET_R8(c)
+# define LV_COLOR_GET_G(c) LV_COLOR_GET_G8(c)
+# define LV_COLOR_GET_B(c) LV_COLOR_GET_B8(c)
+# define LV_COLOR_GET_A(c) LV_COLOR_GET_A8(c)
+
+#elif LV_COLOR_DEPTH == 16
+# define LV_COLOR_SET_R(c, v) LV_COLOR_SET_R16(c,v)
+# if LV_COLOR_16_SWAP == 0
+# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G16(c,v)
+# else
+# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G16_SWAP(c,v)
+# endif
+# define LV_COLOR_SET_B(c, v) LV_COLOR_SET_B16(c,v)
+# define LV_COLOR_SET_A(c, v) LV_COLOR_SET_A16(c,v)
+
+# define LV_COLOR_GET_R(c) LV_COLOR_GET_R16(c)
+# if LV_COLOR_16_SWAP == 0
+# define LV_COLOR_GET_G(c) LV_COLOR_GET_G16(c)
+# else
+# define LV_COLOR_GET_G(c) LV_COLOR_GET_G16_SWAP(c)
+# endif
+# define LV_COLOR_GET_B(c) LV_COLOR_GET_B16(c)
+# define LV_COLOR_GET_A(c) LV_COLOR_GET_A16(c)
+
+#elif LV_COLOR_DEPTH == 32
+# define LV_COLOR_SET_R(c, v) LV_COLOR_SET_R32(c,v)
+# define LV_COLOR_SET_G(c, v) LV_COLOR_SET_G32(c,v)
+# define LV_COLOR_SET_B(c, v) LV_COLOR_SET_B32(c,v)
+# define LV_COLOR_SET_A(c, v) LV_COLOR_SET_A32(c,v)
+
+# define LV_COLOR_GET_R(c) LV_COLOR_GET_R32(c)
+# define LV_COLOR_GET_G(c) LV_COLOR_GET_G32(c)
+# define LV_COLOR_GET_B(c) LV_COLOR_GET_B32(c)
+# define LV_COLOR_GET_A(c) LV_COLOR_GET_A32(c)
+#endif
+
/**********************
* TYPEDEFS
**********************/
typedef union
{
- uint8_t blue : 1;
- uint8_t green : 1;
- uint8_t red : 1;
- uint8_t full : 1;
+ struct
+ {
+ uint8_t blue : 1;
+ uint8_t green : 1;
+ uint8_t red : 1;
+ } ch;
+ uint8_t full;
} lv_color1_t;
typedef union
@@ -191,24 +298,19 @@ static inline uint8_t lv_color_to1(lv_color_t color)
#if LV_COLOR_DEPTH == 1
return color.full;
#elif LV_COLOR_DEPTH == 8
- if((color.ch.red & 0x4) || (color.ch.green & 0x4) || (color.ch.blue & 0x2)) {
+ if((LV_COLOR_GET_R(color) & 0x4) || (LV_COLOR_GET_G(color) & 0x4) || (LV_COLOR_GET_B(color) & 0x2)) {
return 1;
} else {
return 0;
}
#elif LV_COLOR_DEPTH == 16
-#if LV_COLOR_16_SWAP == 0
- if((color.ch.red & 0x10) || (color.ch.green & 0x20) || (color.ch.blue & 0x10)) {
+ if((LV_COLOR_GET_R(color) & 0x10) || (LV_COLOR_GET_G(color) & 0x20) || (LV_COLOR_GET_B(color) & 0x10)) {
return 1;
-#else
- if((color.ch.red & 0x10) || (color.ch.green_h & 0x20) || (color.ch.blue & 0x10)) {
- return 1;
-#endif
} else {
return 0;
}
#elif LV_COLOR_DEPTH == 32
- if((color.ch.red & 0x80) || (color.ch.green & 0x80) || (color.ch.blue & 0x80)) {
+ if((LV_COLOR_GET_R(color) & 0x80) || (LV_COLOR_GET_G(color) & 0x80) || (LV_COLOR_GET_B(color) & 0x80)) {
return 1;
} else {
return 0;
@@ -226,31 +328,23 @@ static inline uint8_t lv_color_to8(lv_color_t color)
#elif LV_COLOR_DEPTH == 8
return color.full;
#elif LV_COLOR_DEPTH == 16
-
-#if LV_COLOR_16_SWAP == 0
lv_color8_t ret;
- ret.ch.red = color.ch.red >> 2; /* 5 - 3 = 2*/
- ret.ch.green = color.ch.green >> 3; /* 6 - 3 = 3*/
- ret.ch.blue = color.ch.blue >> 3; /* 5 - 2 = 3*/
+ LV_COLOR_SET_R8(ret, LV_COLOR_GET_R(color) >> 2); /* 5 - 3 = 2*/
+ LV_COLOR_SET_G8(ret, LV_COLOR_GET_G(color) >> 3); /* 6 - 3 = 3*/
+ LV_COLOR_SET_B8(ret, LV_COLOR_GET_B(color) >> 3); /* 5 - 2 = 3*/
return ret.full;
-#else
- lv_color8_t ret;
- ret.ch.red = color.ch.red >> 2; /* 5 - 3 = 2*/
- ret.ch.green = color.ch.green_h; /* 6 - 3 = 3*/
- ret.ch.blue = color.ch.blue >> 3; /* 5 - 2 = 3*/
- return ret.full;
-#endif
#elif LV_COLOR_DEPTH == 32
lv_color8_t ret;
- ret.ch.red = color.ch.red >> 5; /* 8 - 3 = 5*/
- ret.ch.green = color.ch.green >> 5; /* 8 - 3 = 5*/
- ret.ch.blue = color.ch.blue >> 6; /* 8 - 2 = 6*/
+ LV_COLOR_SET_R8(ret, LV_COLOR_GET_R(color) >> 5); /* 8 - 3 = 5*/
+ LV_COLOR_SET_G8(ret, LV_COLOR_GET_G(color) >> 5); /* 8 - 3 = 5*/
+ LV_COLOR_SET_B8(ret, LV_COLOR_GET_B(color) >> 6); /* 8 - 2 = 6*/
return ret.full;
#endif
}
static inline uint16_t lv_color_to16(lv_color_t color)
{
+
#if LV_COLOR_DEPTH == 1
if(color.full == 0)
return 0;
@@ -258,34 +352,30 @@ static inline uint16_t lv_color_to16(lv_color_t color)
return 0xFFFF;
#elif LV_COLOR_DEPTH == 8
lv_color16_t ret;
+ LV_COLOR_SET_R16(ret, LV_COLOR_GET_R(color) * 4); /*(2^5 - 1)/(2^3 - 1) = 31/7 = 4*/
#if LV_COLOR_16_SWAP == 0
- ret.ch.red = color.ch.red * 4; /*(2^5 - 1)/(2^3 - 1) = 31/7 = 4*/
- ret.ch.green = color.ch.green * 9; /*(2^6 - 1)/(2^3 - 1) = 63/7 = 9*/
- ret.ch.blue = color.ch.blue * 10; /*(2^5 - 1)/(2^2 - 1) = 31/3 = 10*/
+ LV_COLOR_SET_G16(ret, LV_COLOR_GET_G(color) * 9); /*(2^6 - 1)/(2^3 - 1) = 63/7 = 9*/
#else
- ret.red = color.ch.red * 4;
- uint8_t g_tmp = color.ch.green * 9;
- ret.ch.green_h = (g_tmp & 0x1F) >> 3;
- ret.ch.green_l = g_tmp & 0x07;
- ret.ch.blue = color.ch.blue * 10;
+ LV_COLOR_SET_G16_SWAP(ret, (LV_COLOR_GET_G(color) * 9)); /*(2^6 - 1)/(2^3 - 1) = 63/7 = 9*/
#endif
+ LV_COLOR_SET_B16(ret, LV_COLOR_GET_B(color) * 10); /*(2^5 - 1)/(2^2 - 1) = 31/3 = 10*/
return ret.full;
#elif LV_COLOR_DEPTH == 16
return color.full;
#elif LV_COLOR_DEPTH == 32
lv_color16_t ret;
+ LV_COLOR_SET_R16(ret, LV_COLOR_GET_R(color) >> 3); /* 8 - 5 = 3*/
+
#if LV_COLOR_16_SWAP == 0
- ret.ch.red = color.ch.red >> 3; /* 8 - 5 = 3*/
- ret.ch.green = color.ch.green >> 2; /* 8 - 6 = 2*/
- ret.ch.blue = color.ch.blue >> 3; /* 8 - 5 = 3*/
+ LV_COLOR_SET_G16(ret, LV_COLOR_GET_G(color) >> 2); /* 8 - 6 = 2*/
#else
- ret.ch.red = color.ch.red >> 3;
- ret.ch.green_h = (color.ch.green & 0xE0) >> 5;
- ret.ch.green_l = (color.ch.green & 0x1C) >> 2;
- ret.ch.blue = color.ch.blue >> 3;
+ LV_COLOR_SET_G16_SWAP(ret, ret.ch.green_h = (LV_COLOR_GET_G(color) >> 2); /*(2^6 - 1)/(2^3 - 1) = 63/7 = 9*/
#endif
+ LV_COLOR_SET_B16(ret, LV_COLOR_GET_B(color) >> 3); /* 8 - 5 = 3*/
return ret.full;
#endif
+
+ return 0;
}
static inline uint32_t lv_color_to32(lv_color_t color)
@@ -297,52 +387,68 @@ static inline uint32_t lv_color_to32(lv_color_t color)
return 0xFFFFFFFF;
#elif LV_COLOR_DEPTH == 8
lv_color32_t ret;
- ret.ch.red = color.ch.red * 36; /*(2^8 - 1)/(2^3 - 1) = 255/7 = 36*/
- ret.ch.green = color.ch.green * 36; /*(2^8 - 1)/(2^3 - 1) = 255/7 = 36*/
- ret.ch.blue = color.ch.blue * 85; /*(2^8 - 1)/(2^2 - 1) = 255/3 = 85*/
- ret.ch.alpha = 0xFF;
+ LV_COLOR_SET_R32(ret, LV_COLOR_GET_R(color) * 36); /*(2^8 - 1)/(2^3 - 1) = 255/7 = 36*/
+ LV_COLOR_SET_G32(ret, LV_COLOR_GET_G(color) * 36); /*(2^8 - 1)/(2^3 - 1) = 255/7 = 36*/
+ LV_COLOR_SET_B32(ret, LV_COLOR_GET_B(color) * 85); /*(2^8 - 1)/(2^2 - 1) = 255/3 = 85*/
+ LV_COLOR_SET_A32(ret, 0xFF);
return ret.full;
#elif LV_COLOR_DEPTH == 16
-#if LV_COLOR_16_SWAP == 0
+ /**
+ * The floating point math for conversion is:
+ * valueto = valuefrom * ( (2^bitsto - 1) / (float)(2^bitsfrom - 1) )
+ * The faster integer math for conversion is:
+ * valueto = ( valuefrom * multiplier + adder ) >> divisor
+ * multiplier = FLOOR( ( (2^bitsto - 1) << divisor ) / (float)(2^bitsfrom - 1) )
+ *
+ * Find the first divisor where ( adder >> divisor ) <= 0
+ *
+ * 5-bit to 8-bit: ( 31 * multiplier + adder ) >> divisor = 255
+ * divisor multiplier adder min (0) max (31)
+ * 0 8 7 7 255
+ * 1 16 14 7 255
+ * 2 32 28 7 255
+ * 3 65 25 3 255
+ * 4 131 19 1 255
+ * 5 263 7 0 255
+ *
+ * 6-bit to 8-bit: 255 = ( 63 * multiplier + adder ) >> divisor
+ * divisor multiplier adder min (0) max (63)
+ * 0 4 3 3 255
+ * 1 8 6 3 255
+ * 2 16 12 3 255
+ * 3 32 24 3 255
+ * 4 64 48 3 255
+ * 5 129 33 1 255
+ * 6 259 3 0 255
+ */
lv_color32_t ret;
- ret.ch.red = color.ch.red * 8; /*(2^8 - 1)/(2^5 - 1) = 255/31 = 8*/
- ret.ch.green = color.ch.green * 4; /*(2^8 - 1)/(2^6 - 1) = 255/63 = 4*/
- ret.ch.blue = color.ch.blue * 8; /*(2^8 - 1)/(2^5 - 1) = 255/31 = 8*/
- ret.ch.alpha = 0xFF;
+ LV_COLOR_SET_R32(ret, (LV_COLOR_GET_R(color) * 263 + 7 ) >> 5);
+ LV_COLOR_SET_G32(ret, (LV_COLOR_GET_G(color) * 259 + 3 ) >> 6);
+ LV_COLOR_SET_B32(ret, (LV_COLOR_GET_B(color) * 263 + 7 ) >> 5);
+ LV_COLOR_SET_A32(ret, 0xFF);
return ret.full;
-#else
- lv_color32_t ret;
- ret.ch.red = color.ch.red * 8; /*(2^8 - 1)/(2^5 - 1) = 255/31 = 8*/
- ret.ch.green = ((color.ch.green_h << 3) + color.ch.green_l) * 4; /*(2^8 - 1)/(2^6 - 1) = 255/63 = 4*/
- ret.ch.blue = color.ch.blue * 8; /*(2^8 - 1)/(2^5 - 1) = 255/31 = 8*/
- ret.ch.alpha = 0xFF;
- return ret.full;
-#endif
#elif LV_COLOR_DEPTH == 32
return color.full;
#endif
}
+/**
+ * Mix two colors with a given ratio.
+ * @param c1
+ * @param c2
+ * @param mix The ratio of the colors. 0: full `c2`, 255: full `c1`, 127: half `c1` and half`c2`
+ * @return the mixed color
+ * @note 255 won't give clearly `c1`.
+ */
static inline lv_color_t lv_color_mix(lv_color_t c1, lv_color_t c2, uint8_t mix)
{
lv_color_t ret;
#if LV_COLOR_DEPTH != 1
/*LV_COLOR_DEPTH == 8, 16 or 32*/
- ret.ch.red = (uint16_t)((uint16_t)c1.ch.red * mix + (c2.ch.red * (255 - mix))) >> 8;
-#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP
- /*If swapped Green is in 2 parts*/
- uint16_t g_1 = (c1.ch.green_h << 3) + c1.ch.green_l;
- uint16_t g_2 = (c2.ch.green_h << 3) + c2.ch.green_l;
- uint16_t g_out = (uint16_t)((uint16_t)g_1 * mix + (g_2 * (255 - mix))) >> 8;
- ret.ch.green_h = g_out >> 3;
- ret.ch.green_l = g_out & 0x7;
-#else
- ret.ch.green = (uint16_t)((uint16_t)c1.ch.green * mix + (c2.ch.green * (255 - mix))) >> 8;
-#endif
- ret.ch.blue = (uint16_t)((uint16_t)c1.ch.blue * mix + (c2.ch.blue * (255 - mix))) >> 8;
-#if LV_COLOR_DEPTH == 32
- ret.ch.alpha = 0xFF;
-#endif
+ LV_COLOR_SET_R(ret, (uint16_t)((uint16_t) LV_COLOR_GET_R(c1) * mix + LV_COLOR_GET_R(c2) * (255 - mix)) >> 8);
+ LV_COLOR_SET_G(ret, (uint16_t)((uint16_t) LV_COLOR_GET_G(c1) * mix + LV_COLOR_GET_G(c2) * (255 - mix)) >> 8);
+ LV_COLOR_SET_B(ret, (uint16_t)((uint16_t) LV_COLOR_GET_B(c1) * mix + LV_COLOR_GET_B(c2) * (255 - mix)) >> 8);
+ LV_COLOR_SET_A(ret, 0xFF);
#else
/*LV_COLOR_DEPTH == 1*/
ret.full = mix > LV_OPA_50 ? c1.full : c2.full;
@@ -351,6 +457,66 @@ static inline lv_color_t lv_color_mix(lv_color_t c1, lv_color_t c2, uint8_t mix)
return ret;
}
+/**
+ * Mix two colors. Both color can have alpha value. It requires ARGB888 colors.
+ * @param bg_color background color
+ * @param bg_opa alpha of the background color
+ * @param fg_color foreground color
+ * @param fg_opa alpha of the foreground color
+ * @param res_color the result color
+ * @param res_opa the result opacity
+ */
+static inline void lv_color_mix_with_alpha(lv_color_t bg_color, lv_opa_t bg_opa, lv_color_t fg_color, lv_opa_t fg_opa, lv_color_t * res_color, lv_opa_t * res_opa)
+{
+ /* Pick the foreground if it's fully opaque or the Background is fully transparent*/
+ if(fg_opa > LV_OPA_MAX || bg_opa <= LV_OPA_MIN) {
+ res_color->full = fg_color.full;
+ *res_opa = fg_opa;
+ }
+ /*Transparent foreground: use the Background*/
+ else if(fg_opa <= LV_OPA_MIN) {
+ res_color->full = bg_color.full;
+ *res_opa = bg_opa;
+ }
+ /*Opaque background: use simple mix*/
+ else if(bg_opa >= LV_OPA_MAX) {
+ *res_color = lv_color_mix(fg_color, bg_color, fg_opa);
+ *res_opa = LV_OPA_COVER;
+ }
+ /*Both colors have alpha. Expensive calculation need to be applied*/
+ else {
+ /*Save the parameters and the result. If they will be asked again don't compute again*/
+ static lv_opa_t fg_opa_save = 0;
+ static lv_opa_t bg_opa_save = 0;
+ static lv_color_t fg_color_save = {{0}};
+ static lv_color_t bg_color_save = {{0}};
+ static lv_color_t res_color_saved = {{0}};
+ static lv_opa_t res_opa_saved = 0;
+
+ if(fg_opa != fg_opa_save || bg_opa != bg_opa_save || fg_color.full != fg_color_save.full ||
+ bg_color.full != bg_color_save.full) {
+ fg_opa_save = fg_opa;
+ bg_opa_save = bg_opa;
+ fg_color_save.full = fg_color.full;
+ bg_color_save.full = bg_color.full;
+ /*Info:
+ * https://en.wikipedia.org/wiki/Alpha_compositing#Analytical_derivation_of_the_over_operator*/
+ res_opa_saved = 255 - ((uint16_t)((uint16_t)(255 - fg_opa) * (255 - bg_opa)) >> 8);
+ if(res_opa_saved == 0) {
+ while(1)
+ ;
+ }
+ lv_opa_t ratio = (uint16_t)((uint16_t)fg_opa * 255) / res_opa_saved;
+ res_color_saved = lv_color_mix(fg_color, bg_color, ratio);
+
+ }
+
+ res_color->full = res_color_saved.full;
+ *res_opa = res_opa_saved;
+ }
+}
+
+
/**
* Get the brightness of a color
* @param color a color
@@ -360,65 +526,30 @@ static inline uint8_t lv_color_brightness(lv_color_t color)
{
lv_color32_t c32;
c32.full = lv_color_to32(color);
- uint16_t bright = 3 * c32.ch.red + c32.ch.blue + 4 * c32.ch.green;
- return (uint16_t)bright >> 3;
+ uint16_t bright = (uint16_t)(3u * LV_COLOR_GET_R32(c32) + LV_COLOR_GET_B32(c32) + 4u * LV_COLOR_GET_G32(c32));
+ return (uint8_t)(bright >> 3);
}
/* The most simple macro to create a color from R,G and B values */
#if LV_COLOR_DEPTH == 1
-#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){(b8 >> 7 | g8 >> 7 | r8 >> 7)})
-static inline lv_color_t lv_color_make(int r8, int g8, int b8)
-{
- lv_color_t color;
- color.full = (b8 >> 7 | g8 >> 7 | r8 >> 7);
- return color;
-}
+#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){.full = (b8 >> 7 | g8 >> 7 | r8 >> 7)})
#elif LV_COLOR_DEPTH == 8
-#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{b8 >> 6, g8 >> 5, r8 >> 5}})
-static inline lv_color_t lv_color_make(uint8_t r8, int g8, int b8)
-{
- lv_color_t color;
- color.ch.blue = b8 >> 6;
- color.ch.green = g8 >> 5;
- color.ch.red = r8 >> 5;
- return color;
-}
+#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{(uint8_t)(b8 >> 6), (uint8_t)(g8 >> 5), (uint8_t)(r8 >> 5)}})
#elif LV_COLOR_DEPTH == 16
#if LV_COLOR_16_SWAP == 0
-#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{b8 >> 3, g8 >> 2, r8 >> 3}})
-static inline lv_color_t lv_color_make(uint8_t r8, uint8_t g8, uint8_t b8)
-{
- lv_color_t color;
- color.ch.blue = (uint16_t)(b8 >> 3);
- color.ch.green = (uint16_t)(g8 >> 2);
- color.ch.red = (uint16_t)(r8 >> 3);
- return color;
-}
+#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{(uint16_t)(b8 >> 3), (uint16_t)(g8 >> 2), (uint16_t)(r8 >> 3)}})
#else
-#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{g8 >> 5, r8 >> 3, b8 >> 3, (g8 >> 2) & 0x7}})
-static inline lv_color_t lv_color_make(uint8_t r8, uint8_t g8, uint8_t b8)
-{
- lv_color_t color;
- color.ch.green_h = (uint16_t)(g8 >> 5);
- color.ch.red = (uint16_t)(r8 >> 3);
- color.ch.blue = (uint16_t)(b8 >> 3);
- color.ch.green_l = (uint16_t)((g8 >> 2) & 0x7);
- return color;
-}
+#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{((uint16_t)(g8 >> 5), (uint16_t)(r8 >> 3), (uint16_t)(b8 >> 3), (uint16_t)((g8 >> 2) & 0x7)}})
#endif
#elif LV_COLOR_DEPTH == 32
#define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{b8, g8, r8, 0xff}}) /*Fix 0xff alpha*/
-static inline lv_color_t lv_color_make(uint8_t r8, uint8_t g8, uint8_t b8)
-{
- lv_color_t color;
- color.ch.blue = b8;
- color.ch.green = g8;
- color.ch.red = r8;
- color.ch.alpha = 0xff;
- return color;
-}
#endif
+static inline lv_color_t lv_color_make(uint8_t r, uint8_t g, uint8_t b)
+{
+ return LV_COLOR_MAKE(r, g, b);
+}
+
static inline lv_color_t lv_color_hex(uint32_t c)
{
return lv_color_make((uint8_t)((c >> 16) & 0xFF), (uint8_t)((c >> 8) & 0xFF), (uint8_t)(c & 0xFF));
@@ -440,13 +571,20 @@ static inline lv_color_t lv_color_hex3(uint32_t c)
lv_color_t lv_color_hsv_to_rgb(uint16_t h, uint8_t s, uint8_t v);
/**
- * Convert an RGB color to HSV
- * @param r red
- * @param g green
- * @param b blue
- * @return the given RGB color n HSV
+ * Convert a 32-bit RGB color to HSV
+ * @param r8 8-bit red
+ * @param g8 8-bit green
+ * @param b8 8-bit blue
+ * @return the given RGB color in HSV
*/
-lv_color_hsv_t lv_color_rgb_to_hsv(uint8_t r, uint8_t g, uint8_t b);
+lv_color_hsv_t lv_color_rgb_to_hsv(uint8_t r8, uint8_t g8, uint8_t b8);
+
+/**
+ * Convert a color to HSV
+ * @param color color
+ * @return the given color in HSV
+ */
+lv_color_hsv_t lv_color_to_hsv(lv_color_t color);
/**********************
* MACROS
diff --git a/src/lv_misc/lv_fs.c b/src/lv_misc/lv_fs.c
index ddf8f3810..d4343c411 100644
--- a/src/lv_misc/lv_fs.c
+++ b/src/lv_misc/lv_fs.c
@@ -9,6 +9,7 @@
#include "lv_fs.h"
#if LV_USE_FILESYSTEM
+#include "../lv_core/lv_debug.h"
#include "lv_ll.h"
#include
#include "lv_gc.h"
@@ -107,7 +108,7 @@ lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mo
}
file_p->file_d = lv_mem_alloc(file_p->drv->file_size);
- lv_mem_assert(file_p->file_d);
+ LV_ASSERT_MEM(file_p->file_d);
if(file_p->file_d == NULL) {
file_p->drv = NULL;
return LV_FS_RES_OUT_OF_MEM; /* Out of memory */
@@ -367,7 +368,7 @@ lv_fs_res_t lv_fs_dir_open(lv_fs_dir_t * rddir_p, const char * path)
}
rddir_p->dir_d = lv_mem_alloc(rddir_p->drv->rddir_size);
- lv_mem_assert(rddir_p->dir_d);
+ LV_ASSERT_MEM(rddir_p->dir_d);
if(rddir_p->dir_d == NULL) {
rddir_p->dir_d = NULL;
return LV_FS_RES_OUT_OF_MEM; /* Out of memory */
@@ -486,7 +487,7 @@ void lv_fs_drv_register(lv_fs_drv_t * drv_p)
/*Save the new driver*/
lv_fs_drv_t * new_drv;
new_drv = lv_ll_ins_head(&LV_GC_ROOT(_lv_drv_ll));
- lv_mem_assert(new_drv);
+ LV_ASSERT_MEM(new_drv);
if(new_drv == NULL) return;
memcpy(new_drv, drv_p, sizeof(lv_fs_drv_t));
@@ -538,7 +539,7 @@ char * lv_fs_get_letters(char * buf)
*/
const char * lv_fs_get_ext(const char * fn)
{
- uint16_t i;
+ size_t i;
for(i = strlen(fn); i > 0; i--) {
if(fn[i] == '.') {
return &fn[i + 1];
@@ -557,7 +558,7 @@ const char * lv_fs_get_ext(const char * fn)
*/
char * lv_fs_up(char * path)
{
- uint16_t len = strlen(path);
+ size_t len = strlen(path);
if(len == 0) return path;
len--; /*Go before the trailing '\0'*/
@@ -588,7 +589,7 @@ char * lv_fs_up(char * path)
*/
const char * lv_fs_get_last(const char * path)
{
- uint16_t len = strlen(path);
+ size_t len = strlen(path);
if(len == 0) return path;
len--; /*Go before the trailing '\0'*/
diff --git a/src/lv_misc/lv_fs.h b/src/lv_misc/lv_fs.h
index 5b86b8efd..f18242820 100644
--- a/src/lv_misc/lv_fs.h
+++ b/src/lv_misc/lv_fs.h
@@ -29,6 +29,7 @@ extern "C" {
* DEFINES
*********************/
#define LV_FS_MAX_FN_LENGTH 64
+#define LV_FS_MAX_PATH_LENGTH 256
/**********************
* TYPEDEFS
diff --git a/src/lv_misc/lv_gc.h b/src/lv_misc/lv_gc.h
index 0db9f5cb9..64bc178f3 100644
--- a/src/lv_misc/lv_gc.h
+++ b/src/lv_misc/lv_gc.h
@@ -25,6 +25,7 @@ extern "C" {
#include "lv_mem.h"
#include "lv_ll.h"
#include "../lv_draw/lv_img_cache.h"
+#include "../lv_draw/lv_draw.h"
/*********************
* DEFINES
@@ -41,7 +42,7 @@ extern "C" {
prefix lv_ll_t _lv_img_defoder_ll; \
prefix lv_img_cache_entry_t * _lv_img_cache_array; \
prefix void * _lv_task_act; \
- prefix void * _lv_draw_buf;
+ prefix lv_mem_buf_t _lv_mem_buf[LV_MEM_BUF_MAX_NUM]; \
#define LV_NO_PREFIX
#define LV_ROOTS LV_GC_ROOTS(LV_NO_PREFIX)
diff --git a/src/lv_misc/lv_ll.c b/src/lv_misc/lv_ll.c
index 7077fff1f..3f39e71e7 100644
--- a/src/lv_misc/lv_ll.c
+++ b/src/lv_misc/lv_ll.c
@@ -160,7 +160,7 @@ void * lv_ll_ins_tail(lv_ll_t * ll_p)
* @param ll_p pointer to the linked list of 'node_p'
* @param node_p pointer to node in 'll_p' linked list
*/
-void lv_ll_rem(lv_ll_t * ll_p, void * node_p)
+void lv_ll_remove(lv_ll_t * ll_p, void * node_p)
{
if(lv_ll_get_head(ll_p) == node_p) {
/*The new head will be the node after 'n_act'*/
@@ -202,7 +202,7 @@ void lv_ll_clear(lv_ll_t * ll_p)
while(i != NULL) {
i_next = lv_ll_get_next(ll_p, i);
- lv_ll_rem(ll_p, i);
+ lv_ll_remove(ll_p, i);
lv_mem_free(i);
i = i_next;
@@ -219,7 +219,7 @@ void lv_ll_clear(lv_ll_t * ll_p)
*/
void lv_ll_chg_list(lv_ll_t * ll_ori_p, lv_ll_t * ll_new_p, void * node, bool head)
{
- lv_ll_rem(ll_ori_p, node);
+ lv_ll_remove(ll_ori_p, node);
if(head) {
/*Set node as head*/
@@ -362,7 +362,7 @@ void lv_ll_move_before(lv_ll_t * ll_p, void * n_act, void * n_after)
if(n_act == n_before) return; /*Already before `n_after`*/
/*It's much easier to remove from the list and add again*/
- lv_ll_rem(ll_p, n_act);
+ lv_ll_remove(ll_p, n_act);
/*Add again by setting the prev. and next nodes*/
node_set_next(ll_p, n_before, n_act);
diff --git a/src/lv_misc/lv_ll.h b/src/lv_misc/lv_ll.h
index 2c02eb480..3c05c1e90 100644
--- a/src/lv_misc/lv_ll.h
+++ b/src/lv_misc/lv_ll.h
@@ -76,7 +76,7 @@ void * lv_ll_ins_tail(lv_ll_t * ll_p);
* @param ll_p pointer to the linked list of 'node_p'
* @param node_p pointer to node in 'll_p' linked list
*/
-void lv_ll_rem(lv_ll_t * ll_p, void * node_p);
+void lv_ll_remove(lv_ll_t * ll_p, void * node_p);
/**
* Remove and free all elements from a linked list. The list remain valid but become empty.
@@ -131,6 +131,14 @@ void * lv_ll_get_prev(const lv_ll_t * ll_p, const void * n_act);
*/
uint32_t lv_ll_get_len(const lv_ll_t * ll_p);
+/**
+ * TODO
+ * @param ll_p
+ * @param n1_p
+ * @param n2_p
+ */
+void lv_ll_swap(lv_ll_t * ll_p, void * n1_p, void * n2_p);
+
/**
* Move a nodw before an other node in the same linked list
* @param ll_p pointer to a linked list
diff --git a/src/lv_misc/lv_log.c b/src/lv_misc/lv_log.c
index 2d12da4e1..acbdfb732 100644
--- a/src/lv_misc/lv_log.c
+++ b/src/lv_misc/lv_log.c
@@ -12,6 +12,7 @@
#if LV_LOG_PRINTF
#include
#endif
+
/*********************
* DEFINES
*********************/
diff --git a/src/lv_misc/lv_log.h b/src/lv_misc/lv_log.h
index 6a6c2d2a4..62c613b43 100644
--- a/src/lv_misc/lv_log.h
+++ b/src/lv_misc/lv_log.h
@@ -33,6 +33,12 @@ extern "C" {
#define LV_LOG_LEVEL_NONE 4 /**< Do not log anything*/
#define _LV_LOG_LEVEL_NUM 5 /**< Number of log levels */
+LV_EXPORT_CONST_INT(LV_LOG_LEVEL_TRACE);
+LV_EXPORT_CONST_INT(LV_LOG_LEVEL_INFO);
+LV_EXPORT_CONST_INT(LV_LOG_LEVEL_WARN);
+LV_EXPORT_CONST_INT(LV_LOG_LEVEL_ERROR);
+LV_EXPORT_CONST_INT(LV_LOG_LEVEL_NONE);
+
typedef int8_t lv_log_level_t;
#if LV_USE_LOG
diff --git a/src/lv_misc/lv_math.c b/src/lv_misc/lv_math.c
index ea332b61b..77db624c4 100644
--- a/src/lv_misc/lv_math.c
+++ b/src/lv_misc/lv_math.c
@@ -9,6 +9,7 @@
#include "lv_math.h"
#include
#include
+#include
/*********************
* DEFINES
@@ -93,6 +94,223 @@ int32_t lv_bezier3(uint32_t t, int32_t u0, int32_t u1, int32_t u2, int32_t u3)
return v1 + v2 + v3 + v4;
}
+#define BITSPERLONG 32
+
+#define TOP2BITS(x) ((x & (3L << (BITSPERLONG-2))) >> (BITSPERLONG-2))
+
+void lv_sqrt(uint32_t x, lv_sqrt_res_t * q)
+{
+
+ if(x == 0) {
+ q->f = 0;
+ q->i = 0;
+ return;
+ }
+
+ /*Look up for x=1..1024*/
+ /*Look up for x=1..1024*/
+ static const uint8_t ci[] = {
+ 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32,
+ };
+
+ static const uint8_t cf[] = {
+ 0, 106, 187, 0, 60, 115, 165, 212, 0, 42, 81, 119, 155, 190, 223, 0, 32, 62, 92, 121, 149, 177, 204, 230,
+ 0, 25, 50, 75, 99, 122, 145, 168, 191, 213, 235, 0, 21, 42, 63, 83, 103, 123, 143, 162, 181, 200, 219,
+ 238, 0, 18, 36, 54, 72, 89, 107, 124, 141, 158, 174, 191, 207, 224, 240, 0, 16, 32, 47, 63, 78, 94, 109,
+ 124, 139, 154, 169, 184, 198, 213, 227, 242, 0, 14, 28, 42, 56, 70, 84, 97, 111, 125, 138, 151, 165, 178,
+ 191, 204, 217, 230, 243, 0, 13, 25, 38, 51, 63, 76, 88, 100, 113, 125, 137, 149, 161, 173, 185, 197, 209,
+ 221, 233, 244, 0, 12, 23, 35, 46, 58, 69, 80, 92, 103, 114, 125, 136, 147, 158, 169, 180, 191, 202, 213,
+ 224, 235, 245, 0, 11, 21, 32, 42, 53, 63, 74, 84, 95, 105, 115, 125, 136, 146, 156, 166, 176, 186, 196,
+ 206, 216, 226, 236, 246, 0, 10, 20, 29, 39, 49, 59, 68, 78, 87, 97, 107, 116, 126, 135, 145, 154, 163,
+ 173, 182, 191, 201, 210, 219, 228, 238, 247, 0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108, 117, 126,
+ 135, 143, 152, 161, 170, 178, 187, 196, 204, 213, 222, 230, 239, 247, 0, 9, 17, 26, 34, 42, 51, 59, 68,
+ 76, 84, 93, 101, 109, 118, 126, 134, 142, 151, 159, 167, 175, 183, 191, 200, 208, 216, 224, 232, 240, 248,
+ 0, 8, 16, 24, 32, 40, 48, 56, 64, 71, 79, 87, 95, 103, 111, 118, 126, 134, 142, 149, 157, 165, 172, 180,
+ 188, 195, 203, 211, 218, 226, 233, 241, 248, 0, 8, 15, 23, 30, 37, 45, 52, 60, 67, 75, 82, 89, 97, 104,
+ 112, 119, 126, 133, 141, 148, 155, 163, 170, 177, 184, 192, 199, 206, 213, 220, 227, 235, 242, 249, 0, 7,
+ 14, 21, 28, 35, 42, 50, 57, 64, 71, 78, 85, 92, 99, 105, 112, 119, 126, 133, 140, 147, 154, 161, 168, 174,
+ 181, 188, 195, 202, 209, 215, 222, 229, 236, 243, 249, 0, 7, 13, 20, 27, 34, 40, 47, 54, 60, 67, 74, 80,
+ 87, 93, 100, 107, 113, 120, 126, 133, 139, 146, 153, 159, 166, 172, 179, 185, 192, 198, 205, 211, 217,
+ 224, 230, 237, 243, 250, 0, 6, 13, 19, 26, 32, 38, 45, 51, 57, 64, 70, 76, 83, 89, 95, 101, 108, 114, 120,
+ 126, 133, 139, 145, 151, 158, 164, 170, 176, 182, 189, 195, 201, 207, 213, 219, 225, 232, 238, 244, 250,
+ 0, 6, 12, 18, 24, 30, 36, 42, 49, 55, 61, 67, 73, 79, 85, 91, 97, 103, 109, 115, 121, 127, 132, 138, 144,
+ 150, 156, 162, 168, 174, 180, 186, 192, 198, 203, 209, 215, 221, 227, 233, 239, 244, 250, 0, 6, 12, 17,
+ 23, 29, 35, 41, 46, 52, 58, 64, 69, 75, 81, 87, 92, 98, 104, 109, 115, 121, 127, 132, 138, 144, 149, 155,
+ 161, 166, 172, 178, 183, 189, 194, 200, 206, 211, 217, 223, 228, 234, 239, 245, 250, 0, 6, 11, 17, 22, 28,
+ 33, 39, 44, 50, 55, 61, 66, 72, 77, 83, 88, 94, 99, 105, 110, 116, 121, 127, 132, 138, 143, 148, 154, 159,
+ 165, 170, 175, 181, 186, 192, 197, 202, 208, 213, 219, 224, 229, 235, 240, 245, 251, 0, 5, 11, 16, 21, 27,
+ 32, 37, 43, 48, 53, 58, 64, 69, 74, 79, 85, 90, 95, 101, 106, 111, 116, 121, 127, 132, 137, 142, 148, 153,
+ 158, 163, 168, 174, 179, 184, 189, 194, 199, 205, 210, 215, 220, 225, 230, 235, 241, 246, 251, 0, 5, 10,
+ 15, 20, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 92, 97, 102, 107, 112, 117, 122, 127, 132,
+ 137, 142, 147, 152, 157, 162, 167, 172, 177, 182, 187, 192, 197, 202, 207, 212, 216, 221, 226, 231, 236,
+ 241, 246, 251, 0, 5, 10, 15, 20, 25, 29, 34, 39, 44, 49, 54, 59, 64, 69, 73, 78, 83, 88, 93, 98, 103, 107,
+ 112, 117, 122, 127, 132, 136, 141, 146, 151, 156, 161, 165, 170, 175, 180, 185, 189, 194, 199, 204, 208,
+ 213, 218, 223, 227, 232, 237, 242, 247, 251, 0, 5, 9, 14, 19, 24, 28, 33, 38, 43, 47, 52, 57, 61, 66, 71,
+ 75, 80, 85, 89, 94, 99, 104, 108, 113, 118, 122, 127, 131, 136, 141, 145, 150, 155, 159, 164, 169, 173,
+ 178, 182, 187, 192, 196, 201, 206, 210, 215, 219, 224, 229, 233, 238, 242, 247, 251, 0, 5, 9, 14, 18, 23,
+ 27, 32, 36, 41, 46, 50, 55, 59, 64, 68, 73, 77, 82, 86, 91, 95, 100, 104, 109, 113, 118, 122, 127, 131,
+ 136, 140, 145, 149, 154, 158, 163, 167, 172, 176, 181, 185, 189, 194, 198, 203, 207, 212, 216, 221, 225,
+ 229, 234, 238, 243, 247, 252, 0, 4, 9, 13, 18, 22, 26, 31, 35, 40, 44, 48, 53, 57, 62, 66, 70, 75, 79, 83,
+ 88, 92, 96, 101, 105, 110, 114, 118, 123, 127, 131, 136, 140, 144, 149, 153, 157, 162, 166, 170, 175, 179,
+ 183, 187, 192, 196, 200, 205, 209, 213, 218, 222, 226, 230, 235, 239, 243, 247, 252, 0, 4, 9, 13, 17, 21,
+ 26, 30, 34, 38, 43, 47, 51, 55, 60, 64, 68, 72, 76, 81, 85, 89, 93, 98, 102, 106, 110, 114, 119, 123,
+ 127, 131, 135, 140, 144, 148, 152, 156, 160, 165, 169, 173, 177, 181, 185, 190, 194, 198, 202, 206, 210,
+ 215, 219, 223, 227, 231, 235, 239, 244, 248, 252, 0, 4, 8, 12, 16, 21, 25, 29, 33, 37, 41, 45, 49, 53, 58,
+ 62, 66, 70, 74, 78, 82, 86, 90, 94, 98, 103, 107, 111, 115, 119, 123, 127, 131, 135, 139, 143, 147, 151,
+ 155, 159, 163, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236,
+ 240, 244, 248, 252, 0,
+
+ };
+ if(x <= 64) {
+ x--;
+ q->i = ci[x];
+ q->f = cf[x];
+ return;
+ }
+
+ /*
+ * Source:
+ * http://web.archive.org/web/20080303101624/http://c.snippets.org/snip_lister.php?fname=isqrt.c
+ * https://stackoverflow.com/questions/1100090/looking-for-an-efficient-integer-square-root-algorithm-for-arm-thumb2
+ */
+
+ uint32_t a = 0L; /* accumulator */
+ uint32_t r = 0L; /* remainder */
+ uint32_t e = 0L; /* trial product */
+
+ uint32_t i;
+ for (i = 0; i < BITSPERLONG / 2 + 8; i++) {
+ r = (r << 2) + TOP2BITS(x); x <<= 2;
+ a <<= 1;
+ e = (a << 1) + 1;
+ if (r >= e) {
+ r -= e;
+ a++;
+ }
+ }
+
+ q->f = a & 0xFF;
+ q->i = a >> 8;
+}
+
+/**
+ * Calculate the atan2 of a vector.
+ * @param x
+ * @param y
+ * @return the angle in degree calculated from the given parameters in range of [0..360]
+ */
+uint16_t lv_atan2(int x, int y)
+{
+ // Fast XY vector to integer degree algorithm - Jan 2011 www.RomanBlack.com
+ // Converts any XY values including 0 to a degree value that should be
+ // within +/- 1 degree of the accurate value without needing
+ // large slow trig functions like ArcTan() or ArcCos().
+ // NOTE! at least one of the X or Y values must be non-zero!
+ // This is the full version, for all 4 quadrants and will generate
+ // the angle in integer degrees from 0-360.
+ // Any values of X and Y are usable including negative values provided
+ // they are between -1456 and 1456 so the 16bit multiply does not overflow.
+
+ unsigned char negflag;
+ unsigned char tempdegree;
+ unsigned char comp;
+ unsigned int degree; // this will hold the result
+ //signed int x; // these hold the XY vector at the start
+ //signed int y; // (and they will be destroyed)
+ unsigned int ux;
+ unsigned int uy;
+
+ // Save the sign flags then remove signs and get XY as unsigned ints
+ negflag = 0;
+ if(x < 0) {
+ negflag += 0x01; // x flag bit
+ x = (0 - x); // is now +
+ }
+ ux = x; // copy to unsigned var before multiply
+ if(y < 0) {
+ negflag += 0x02; // y flag bit
+ y = (0 - y); // is now +
+ }
+ uy = y; // copy to unsigned var before multiply
+
+ // 1. Calc the scaled "degrees"
+ if(ux > uy) {
+ degree = (uy * 45) / ux; // degree result will be 0-45 range
+ negflag += 0x10; // octant flag bit
+ } else {
+ degree = (ux * 45) / uy; // degree result will be 0-45 range
+ }
+
+ // 2. Compensate for the 4 degree error curve
+ comp = 0;
+ tempdegree = degree; // use an unsigned char for speed!
+ if(tempdegree > 22) { // if top half of range
+ if(tempdegree <= 44) comp++;
+ if(tempdegree <= 41) comp++;
+ if(tempdegree <= 37) comp++;
+ if(tempdegree <= 32) comp++; // max is 4 degrees compensated
+ } else { // else is lower half of range
+ if(tempdegree >= 2) comp++;
+ if(tempdegree >= 6) comp++;
+ if(tempdegree >= 10) comp++;
+ if(tempdegree >= 15) comp++; // max is 4 degrees compensated
+ }
+ degree += comp; // degree is now accurate to +/- 1 degree!
+
+ // Invert degree if it was X>Y octant, makes 0-45 into 90-45
+ if(negflag & 0x10) degree = (90 - degree);
+
+ // 3. Degree is now 0-90 range for this quadrant,
+ // need to invert it for whichever quadrant it was in
+ if(negflag & 0x02) { // if -Y
+ if(negflag & 0x01) // if -Y -X
+ degree = (180 + degree);
+ else // else is -Y +X
+ degree = (180 - degree);
+ } else { // else is +Y
+ if(negflag & 0x01) // if +Y -X
+ degree = (360 - degree);
+ }
+ return degree;
+}
/**********************
* STATIC FUNCTIONS
diff --git a/src/lv_misc/lv_math.h b/src/lv_misc/lv_math.h
index 83ace3a54..2782e887a 100644
--- a/src/lv_misc/lv_math.h
+++ b/src/lv_misc/lv_math.h
@@ -32,6 +32,12 @@ extern "C" {
* TYPEDEFS
**********************/
+typedef struct {
+ uint16_t i;
+ uint16_t f;
+ }lv_sqrt_res_t;
+
+
/**********************
* GLOBAL PROTOTYPES
**********************/
@@ -54,6 +60,16 @@ int16_t lv_trigo_sin(int16_t angle);
*/
int32_t lv_bezier3(uint32_t t, int32_t u0, int32_t u1, int32_t u2, int32_t u3);
+void lv_sqrt(uint32_t x, lv_sqrt_res_t * q);
+
+/**
+ * Calculate the atan2 of a vector.
+ * @param x
+ * @param y
+ * @return the angle in degree calculated from the given parameters in range of [0..360]
+ */
+uint16_t lv_atan2(int x, int y);
+
/**********************
* MACROS
**********************/
diff --git a/src/lv_misc/lv_mem.c b/src/lv_misc/lv_mem.c
index 9812a95c4..8cd815cdb 100644
--- a/src/lv_misc/lv_mem.c
+++ b/src/lv_misc/lv_mem.c
@@ -9,6 +9,7 @@
*********************/
#include "lv_mem.h"
#include "lv_math.h"
+#include "lv_gc.h"
#include
#if LV_MEM_CUSTOM != 0
@@ -19,7 +20,9 @@
* DEFINES
*********************/
/*Add memory junk on alloc (0xaa) and free(0xbb) (just for testing purposes)*/
-#define LV_MEM_ADD_JUNK 1
+#ifndef LV_MEM_ADD_JUNK
+#define LV_MEM_ADD_JUNK 0
+#endif
#ifdef LV_MEM_ENV64
#define MEM_UNIT uint64_t
@@ -105,7 +108,7 @@ void lv_mem_init(void)
* @param size size of the memory to allocate in bytes
* @return pointer to the allocated memory
*/
-void * lv_mem_alloc(uint32_t size)
+void * lv_mem_alloc(size_t size)
{
if(size == 0) {
return &zero_mem;
@@ -220,7 +223,7 @@ void lv_mem_free(const void * data)
#if LV_ENABLE_GC == 0
-void * lv_mem_realloc(void * data_p, uint32_t new_size)
+void * lv_mem_realloc(void * data_p, size_t new_size)
{
/*data_p could be previously freed pointer (in this case it is invalid)*/
if(data_p != NULL) {
@@ -244,8 +247,12 @@ void * lv_mem_realloc(void * data_p, uint32_t new_size)
void * new_p;
new_p = lv_mem_alloc(new_size);
+ if(new_p == NULL) {
+ LV_LOG_WARN("Couldn't allocate memory");
+ return NULL;
+ }
- if(new_p != NULL && data_p != NULL) {
+ if(data_p != NULL) {
/*Copy the old data to the new. Use the smaller size*/
if(old_size != 0) {
memcpy(new_p, data_p, LV_MATH_MIN(new_size, old_size));
@@ -253,7 +260,6 @@ void * lv_mem_realloc(void * data_p, uint32_t new_size)
}
}
- if(new_p == NULL) LV_LOG_WARN("Couldn't allocate memory");
return new_p;
}
@@ -373,6 +379,73 @@ uint32_t lv_mem_get_size(const void * data)
#endif /*LV_ENABLE_GC*/
+/**
+ * Get a temporal buffer with the given size.
+ * @param size the required size
+ */
+void * lv_mem_buf_get(uint32_t size)
+{
+ /*Try to find a free buffer with suitable size */
+ uint8_t i;
+ for(i = 0; i < LV_MEM_BUF_MAX_NUM; i++) {
+ if(_lv_mem_buf[i].used == 0 && _lv_mem_buf[i].size >= size) {
+ _lv_mem_buf[i].used = 1;
+ return _lv_mem_buf[i].p;
+ }
+ }
+
+ /*Reallocate a free buffer*/
+ for(i = 0; i < LV_MEM_BUF_MAX_NUM; i++) {
+ if(_lv_mem_buf[i].used == 0) {
+ _lv_mem_buf[i].used = 1;
+ _lv_mem_buf[i].size = size;
+ /*if this fails you probably need to increase your LV_MEM_SIZE/heap size*/
+ _lv_mem_buf[i].p = lv_mem_realloc(_lv_mem_buf[i].p, size);
+ if(_lv_mem_buf[i].p == NULL) {
+ LV_LOG_ERROR("lv_mem_buf_get: Out of memory, can't allocate a new buffer (increase your LV_MEM_SIZE/heap size)")
+ }
+ return _lv_mem_buf[i].p;
+ }
+ }
+
+ LV_LOG_ERROR("lv_mem_buf_get: no free buffer. Increase LV_DRAW_BUF_MAX_NUM.");
+
+ return NULL;
+}
+
+/**
+ * Release a memory buffer
+ * @param p buffer to release
+ */
+void lv_mem_buf_release(void * p)
+{
+ uint8_t i;
+ for(i = 0; i < LV_MEM_BUF_MAX_NUM; i++) {
+ if(_lv_mem_buf[i].p == p) {
+ _lv_mem_buf[i].used = 0;
+ return;
+ }
+ }
+
+ LV_LOG_ERROR("lv_mem_buf_release: p is not a known buffer")
+}
+
+/**
+ * Free all memory buffers
+ */
+void lv_mem_buf_free_all(void)
+{
+ uint8_t i;
+ for(i = 0; i < LV_MEM_BUF_MAX_NUM; i++) {
+ if(_lv_mem_buf[i].p) {
+ lv_mem_free(_lv_mem_buf[i].p);
+ _lv_mem_buf[i].p = NULL;
+ _lv_mem_buf[i].used = 0;
+ _lv_mem_buf[i].size = 0;
+ }
+ }
+}
+
/**********************
* STATIC FUNCTIONS
**********************/
diff --git a/src/lv_misc/lv_mem.h b/src/lv_misc/lv_mem.h
index 81a3e7a2f..09944f787 100644
--- a/src/lv_misc/lv_mem.h
+++ b/src/lv_misc/lv_mem.h
@@ -22,20 +22,14 @@ extern "C" {
#include
#include
#include "lv_log.h"
+#include "lv_types.h"
/*********************
* DEFINES
*********************/
-// Check windows
-#ifdef __WIN64
-#define LV_MEM_ENV64
-#endif
-// Check GCC
-#ifdef __GNUC__
-#if defined(__x86_64__) || defined(__ppc64__)
-#define LV_MEM_ENV64
-#endif
+#ifndef LV_MEM_BUF_MAX_NUM
+#define LV_MEM_BUF_MAX_NUM 16
#endif
/**********************
@@ -56,6 +50,12 @@ typedef struct
uint8_t frag_pct; /**< Amount of fragmentation */
} lv_mem_monitor_t;
+typedef struct {
+ void * p;
+ uint16_t size;
+ uint8_t used :1;
+}lv_mem_buf_t;
+
/**********************
* GLOBAL PROTOTYPES
**********************/
@@ -70,7 +70,7 @@ void lv_mem_init(void);
* @param size size of the memory to allocate in bytes
* @return pointer to the allocated memory
*/
-void * lv_mem_alloc(uint32_t size);
+void * lv_mem_alloc(size_t size);
/**
* Free an allocated data
@@ -85,7 +85,7 @@ void lv_mem_free(const void * data);
* @param new_size the desired new size in byte
* @return pointer to the new memory
*/
-void * lv_mem_realloc(void * data_p, uint32_t new_size);
+void * lv_mem_realloc(void * data_p, size_t new_size);
/**
* Join the adjacent free memory blocks
@@ -106,31 +106,27 @@ void lv_mem_monitor(lv_mem_monitor_t * mon_p);
*/
uint32_t lv_mem_get_size(const void * data);
+/**
+ * Get a temporal buffer with the given size.
+ * @param size the required size
+ */
+void * lv_mem_buf_get(uint32_t size);
+
+/**
+ * Release a memory buffer
+ * @param p buffer to release
+ */
+void lv_mem_buf_release(void * p);
+
+/**
+ * Free all memory buffers
+ */
+void lv_mem_buf_free_all(void);
+
/**********************
* MACROS
**********************/
-/**
- * Halt on NULL pointer
- * p pointer to a memory
- */
-#if LV_USE_LOG == 0
-#define lv_mem_assert(p) \
- { \
- if(p == NULL) \
- while(1) \
- ; \
- }
-#else
-#define lv_mem_assert(p) \
- { \
- if(p == NULL) { \
- LV_LOG_ERROR("Out of memory!"); \
- while(1) \
- ; \
- } \
- }
-#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
diff --git a/src/lv_misc/lv_misc.mk b/src/lv_misc/lv_misc.mk
index 41e4720f0..d0b682ab2 100644
--- a/src/lv_misc/lv_misc.mk
+++ b/src/lv_misc/lv_misc.mk
@@ -12,6 +12,8 @@ CSRCS += lv_log.c
CSRCS += lv_gc.c
CSRCS += lv_utils.c
CSRCS += lv_async.c
+CSRCS += lv_printf.c
+CSRCS += lv_bidi.c
DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_misc
VPATH += :$(LVGL_DIR)/lvgl/src/lv_misc
diff --git a/src/lv_misc/lv_printf.c b/src/lv_misc/lv_printf.c
new file mode 100644
index 000000000..e05f35beb
--- /dev/null
+++ b/src/lv_misc/lv_printf.c
@@ -0,0 +1,852 @@
+///////////////////////////////////////////////////////////////////////////////
+// \author (c) Marco Paland (info@paland.com)
+// 2014-2019, PALANDesign Hannover, Germany
+//
+// \license The MIT License (MIT)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+// \brief Tiny printf, sprintf and (v)snprintf implementation, optimized for speed on
+// embedded systems with a very limited resources. These routines are thread
+// safe and reentrant!
+// Use this instead of the bloated standard/newlib printf cause these use
+// malloc for printf (and may not be thread safe).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include "lv_printf.h"
+
+#if LV_SPRINTF_CUSTOM == 0
+
+#include
+#include
+
+
+// 'ntoa' conversion buffer size, this must be big enough to hold one converted
+// numeric number including padded zeros (dynamically created on stack)
+// default: 32 byte
+#ifndef PRINTF_NTOA_BUFFER_SIZE
+#define PRINTF_NTOA_BUFFER_SIZE 32U
+#endif
+
+// 'ftoa' conversion buffer size, this must be big enough to hold one converted
+// float number including padded zeros (dynamically created on stack)
+// default: 32 byte
+#ifndef PRINTF_FTOA_BUFFER_SIZE
+#define PRINTF_FTOA_BUFFER_SIZE 32U
+#endif
+
+// support for the floating point type (%f)
+// default: activated
+#ifndef PRINTF_DISABLE_SUPPORT_FLOAT
+#define PRINTF_SUPPORT_FLOAT
+#endif
+
+// support for exponential floating point notation (%e/%g)
+// default: activated
+#ifndef PRINTF_DISABLE_SUPPORT_EXPONENTIAL
+#define PRINTF_SUPPORT_EXPONENTIAL
+#endif
+
+// define the default floating point precision
+// default: 6 digits
+#ifndef PRINTF_DEFAULT_FLOAT_PRECISION
+#define PRINTF_DEFAULT_FLOAT_PRECISION 6U
+#endif
+
+// define the largest float suitable to print with %f
+// default: 1e9
+#ifndef PRINTF_MAX_FLOAT
+#define PRINTF_MAX_FLOAT 1e9
+#endif
+
+// support for the long long types (%llu or %p)
+// default: activated
+#ifndef PRINTF_DISABLE_SUPPORT_LONG_LONG
+#define PRINTF_SUPPORT_LONG_LONG
+#endif
+
+// support for the ptrdiff_t type (%t)
+// ptrdiff_t is normally defined in as long or long long type
+// default: activated
+#ifndef PRINTF_DISABLE_SUPPORT_PTRDIFF_T
+#define PRINTF_SUPPORT_PTRDIFF_T
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+
+// internal flag definitions
+#define FLAGS_ZEROPAD (1U << 0U)
+#define FLAGS_LEFT (1U << 1U)
+#define FLAGS_PLUS (1U << 2U)
+#define FLAGS_SPACE (1U << 3U)
+#define FLAGS_HASH (1U << 4U)
+#define FLAGS_UPPERCASE (1U << 5U)
+#define FLAGS_CHAR (1U << 6U)
+#define FLAGS_SHORT (1U << 7U)
+#define FLAGS_LONG (1U << 8U)
+#define FLAGS_LONG_LONG (1U << 9U)
+#define FLAGS_PRECISION (1U << 10U)
+#define FLAGS_ADAPT_EXP (1U << 11U)
+
+
+// import float.h for DBL_MAX
+#if defined(PRINTF_SUPPORT_FLOAT)
+#include
+#endif
+
+
+// output function type
+typedef void (*out_fct_type)(char character, void* buffer, size_t idx, size_t maxlen);
+
+
+// wrapper (used as buffer) for output function type
+typedef struct {
+ void (*fct)(char character, void* arg);
+ void* arg;
+} out_fct_wrap_type;
+
+
+// internal buffer output
+static inline void _out_buffer(char character, void* buffer, size_t idx, size_t maxlen)
+{
+ if (idx < maxlen) {
+ ((char*)buffer)[idx] = character;
+ }
+}
+
+
+// internal null output
+static inline void _out_null(char character, void* buffer, size_t idx, size_t maxlen)
+{
+ (void)character; (void)buffer; (void)idx; (void)maxlen;
+}
+
+
+
+// internal secure strlen
+// \return The length of the string (excluding the terminating 0) limited by 'maxsize'
+static inline unsigned int _strnlen_s(const char* str, size_t maxsize)
+{
+ const char* s;
+ for (s = str; *s && maxsize--; ++s);
+ return (unsigned int)(s - str);
+}
+
+
+// internal test if char is a digit (0-9)
+// \return true if char is a digit
+static inline bool _is_digit(char ch)
+{
+ return (ch >= '0') && (ch <= '9');
+}
+
+
+// internal ASCII string to unsigned int conversion
+static unsigned int _atoi(const char** str)
+{
+ unsigned int i = 0U;
+ while (_is_digit(**str)) {
+ i = i * 10U + (unsigned int)(*((*str)++) - '0');
+ }
+ return i;
+}
+
+
+// output the specified string in reverse, taking care of any zero-padding
+static size_t _out_rev(out_fct_type out, char* buffer, size_t idx, size_t maxlen, const char* buf, size_t len, unsigned int width, unsigned int flags)
+{
+ const size_t start_idx = idx;
+
+ // pad spaces up to given width
+ if (!(flags & FLAGS_LEFT) && !(flags & FLAGS_ZEROPAD)) {
+ size_t i;
+ for (i = len; i < width; i++) {
+ out(' ', buffer, idx++, maxlen);
+ }
+ }
+
+ // reverse string
+ while (len) {
+ out(buf[--len], buffer, idx++, maxlen);
+ }
+
+ // append pad spaces up to given width
+ if (flags & FLAGS_LEFT) {
+ while (idx - start_idx < width) {
+ out(' ', buffer, idx++, maxlen);
+ }
+ }
+
+ return idx;
+}
+
+
+// internal itoa format
+static size_t _ntoa_format(out_fct_type out, char* buffer, size_t idx, size_t maxlen, char* buf, size_t len, bool negative, unsigned int base, unsigned int prec, unsigned int width, unsigned int flags)
+{
+ // pad leading zeros
+ if (!(flags & FLAGS_LEFT)) {
+ if (width && (flags & FLAGS_ZEROPAD) && (negative || (flags & (FLAGS_PLUS | FLAGS_SPACE)))) {
+ width--;
+ }
+ while ((len < prec) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
+ buf[len++] = '0';
+ }
+ while ((flags & FLAGS_ZEROPAD) && (len < width) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
+ buf[len++] = '0';
+ }
+ }
+
+ // handle hash
+ if (flags & FLAGS_HASH) {
+ if (!(flags & FLAGS_PRECISION) && len && ((len == prec) || (len == width))) {
+ len--;
+ if (len && (base == 16U)) {
+ len--;
+ }
+ }
+ if ((base == 16U) && !(flags & FLAGS_UPPERCASE) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
+ buf[len++] = 'x';
+ }
+ else if ((base == 16U) && (flags & FLAGS_UPPERCASE) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
+ buf[len++] = 'X';
+ }
+ else if ((base == 2U) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
+ buf[len++] = 'b';
+ }
+ if (len < PRINTF_NTOA_BUFFER_SIZE) {
+ buf[len++] = '0';
+ }
+ }
+
+ if (len < PRINTF_NTOA_BUFFER_SIZE) {
+ if (negative) {
+ buf[len++] = '-';
+ }
+ else if (flags & FLAGS_PLUS) {
+ buf[len++] = '+'; // ignore the space if the '+' exists
+ }
+ else if (flags & FLAGS_SPACE) {
+ buf[len++] = ' ';
+ }
+ }
+
+ return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
+}
+
+
+// internal itoa for 'long' type
+static size_t _ntoa_long(out_fct_type out, char* buffer, size_t idx, size_t maxlen, unsigned long value, bool negative, unsigned long base, unsigned int prec, unsigned int width, unsigned int flags)
+{
+ char buf[PRINTF_NTOA_BUFFER_SIZE];
+ size_t len = 0U;
+
+ // no hash for 0 values
+ if (!value) {
+ flags &= ~FLAGS_HASH;
+ }
+
+ // write if precision != 0 and value is != 0
+ if (!(flags & FLAGS_PRECISION) || value) {
+ do {
+ const char digit = (char)(value % base);
+ buf[len++] = digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10;
+ value /= base;
+ } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
+ }
+
+ return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative, (unsigned int)base, prec, width, flags);
+}
+
+
+// internal itoa for 'long long' type
+#if defined(PRINTF_SUPPORT_LONG_LONG)
+static size_t _ntoa_long_long(out_fct_type out, char* buffer, size_t idx, size_t maxlen, unsigned long long value, bool negative, unsigned long long base, unsigned int prec, unsigned int width, unsigned int flags)
+{
+ char buf[PRINTF_NTOA_BUFFER_SIZE];
+ size_t len = 0U;
+
+ // no hash for 0 values
+ if (!value) {
+ flags &= ~FLAGS_HASH;
+ }
+
+ // write if precision != 0 and value is != 0
+ if (!(flags & FLAGS_PRECISION) || value) {
+ do {
+ const char digit = (char)(value % base);
+ buf[len++] = digit < 10 ? '0' + digit : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10;
+ value /= base;
+ } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
+ }
+
+ return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative, (unsigned int)base, prec, width, flags);
+}
+#endif // PRINTF_SUPPORT_LONG_LONG
+
+
+#if defined(PRINTF_SUPPORT_FLOAT)
+
+#if defined(PRINTF_SUPPORT_EXPONENTIAL)
+// forward declaration so that _ftoa can switch to exp notation for values > PRINTF_MAX_FLOAT
+static size_t _etoa(out_fct_type out, char* buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags);
+#endif
+
+
+// internal ftoa for fixed decimal floating point
+static size_t _ftoa(out_fct_type out, char* buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags)
+{
+ char buf[PRINTF_FTOA_BUFFER_SIZE];
+ size_t len = 0U;
+ double diff = 0.0;
+
+ // powers of 10
+ static const double pow10[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };
+
+ // test for special values
+ if (value != value)
+ return _out_rev(out, buffer, idx, maxlen, "nan", 3, width, flags);
+ if (value < -DBL_MAX)
+ return _out_rev(out, buffer, idx, maxlen, "fni-", 4, width, flags);
+ if (value > DBL_MAX)
+ return _out_rev(out, buffer, idx, maxlen, (flags & FLAGS_PLUS) ? "fni+" : "fni", (flags & FLAGS_PLUS) ? 4U : 3U, width, flags);
+
+ // test for very large values
+ // standard printf behavior is to print EVERY whole number digit -- which could be 100s of characters overflowing your buffers == bad
+ if ((value > PRINTF_MAX_FLOAT) || (value < -PRINTF_MAX_FLOAT)) {
+#if defined(PRINTF_SUPPORT_EXPONENTIAL)
+ return _etoa(out, buffer, idx, maxlen, value, prec, width, flags);
+#else
+ return 0U;
+#endif
+ }
+
+ // test for negative
+ bool negative = false;
+ if (value < 0) {
+ negative = true;
+ value = 0 - value;
+ }
+
+ // set default precision, if not set explicitly
+ if (!(flags & FLAGS_PRECISION)) {
+ prec = PRINTF_DEFAULT_FLOAT_PRECISION;
+ }
+ // limit precision to 9, cause a prec >= 10 can lead to overflow errors
+ while ((len < PRINTF_FTOA_BUFFER_SIZE) && (prec > 9U)) {
+ buf[len++] = '0';
+ prec--;
+ }
+
+ int whole = (int)value;
+ double tmp = (value - whole) * pow10[prec];
+ unsigned long frac = (unsigned long)tmp;
+ diff = tmp - frac;
+
+ if (diff > 0.5) {
+ ++frac;
+ // handle rollover, e.g. case 0.99 with prec 1 is 1.0
+ if (frac >= pow10[prec]) {
+ frac = 0;
+ ++whole;
+ }
+ }
+ else if (diff < 0.5) {
+ }
+ else if ((frac == 0U) || (frac & 1U)) {
+ // if halfway, round up if odd OR if last digit is 0
+ ++frac;
+ }
+
+ if (prec == 0U) {
+ diff = value - (double)whole;
+ if ((!(diff < 0.5) || (diff > 0.5)) && (whole & 1)) {
+ // exactly 0.5 and ODD, then round up
+ // 1.5 -> 2, but 2.5 -> 2
+ ++whole;
+ }
+ }
+ else {
+ unsigned int count = prec;
+ // now do fractional part, as an unsigned number
+ while (len < PRINTF_FTOA_BUFFER_SIZE) {
+ --count;
+ buf[len++] = (char)(48U + (frac % 10U));
+ if (!(frac /= 10U)) {
+ break;
+ }
+ }
+ // add extra 0s
+ while ((len < PRINTF_FTOA_BUFFER_SIZE) && (count-- > 0U)) {
+ buf[len++] = '0';
+ }
+ if (len < PRINTF_FTOA_BUFFER_SIZE) {
+ // add decimal
+ buf[len++] = '.';
+ }
+ }
+
+ // do whole part, number is reversed
+ while (len < PRINTF_FTOA_BUFFER_SIZE) {
+ buf[len++] = (char)(48 + (whole % 10));
+ if (!(whole /= 10)) {
+ break;
+ }
+ }
+
+ // pad leading zeros
+ if (!(flags & FLAGS_LEFT) && (flags & FLAGS_ZEROPAD)) {
+ if (width && (negative || (flags & (FLAGS_PLUS | FLAGS_SPACE)))) {
+ width--;
+ }
+ while ((len < width) && (len < PRINTF_FTOA_BUFFER_SIZE)) {
+ buf[len++] = '0';
+ }
+ }
+
+ if (len < PRINTF_FTOA_BUFFER_SIZE) {
+ if (negative) {
+ buf[len++] = '-';
+ }
+ else if (flags & FLAGS_PLUS) {
+ buf[len++] = '+'; // ignore the space if the '+' exists
+ }
+ else if (flags & FLAGS_SPACE) {
+ buf[len++] = ' ';
+ }
+ }
+
+ return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
+}
+
+
+#if defined(PRINTF_SUPPORT_EXPONENTIAL)
+// internal ftoa variant for exponential floating-point type, contributed by Martijn Jasperse
+static size_t _etoa(out_fct_type out, char* buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags)
+{
+ // check for NaN and special values
+ if ((value != value) || (value > DBL_MAX) || (value < -DBL_MAX)) {
+ return _ftoa(out, buffer, idx, maxlen, value, prec, width, flags);
+ }
+
+ // determine the sign
+ const bool negative = value < 0;
+ if (negative) {
+ value = -value;
+ }
+
+ // default precision
+ if (!(flags & FLAGS_PRECISION)) {
+ prec = PRINTF_DEFAULT_FLOAT_PRECISION;
+ }
+
+ // determine the decimal exponent
+ // based on the algorithm by David Gay (https://www.ampl.com/netlib/fp/dtoa.c)
+ union {
+ uint64_t U;
+ double F;
+ } conv;
+
+ conv.F = value;
+ int exp2 = (int)((conv.U >> 52U) & 0x07FFU) - 1023; // effectively log2
+ conv.U = (conv.U & ((1ULL << 52U) - 1U)) | (1023ULL << 52U); // drop the exponent so conv.F is now in [1,2)
+ // now approximate log10 from the log2 integer part and an expansion of ln around 1.5
+ int expval = (int)(0.1760912590558 + exp2 * 0.301029995663981 + (conv.F - 1.5) * 0.289529654602168);
+ // now we want to compute 10^expval but we want to be sure it won't overflow
+ exp2 = (int)(expval * 3.321928094887362 + 0.5);
+ const double z = expval * 2.302585092994046 - exp2 * 0.6931471805599453;
+ const double z2 = z * z;
+ conv.U = (uint64_t)(exp2 + 1023) << 52U;
+ // compute exp(z) using continued fractions, see https://en.wikipedia.org/wiki/Exponential_function#Continued_fractions_for_ex
+ conv.F *= 1 + 2 * z / (2 - z + (z2 / (6 + (z2 / (10 + z2 / 14)))));
+ // correct for rounding errors
+ if (value < conv.F) {
+ expval--;
+ conv.F /= 10;
+ }
+
+ // the exponent format is "%+03d" and largest value is "307", so set aside 4-5 characters
+ unsigned int minwidth = ((expval < 100) && (expval > -100)) ? 4U : 5U;
+
+ // in "%g" mode, "prec" is the number of *significant figures* not decimals
+ if (flags & FLAGS_ADAPT_EXP) {
+ // do we want to fall-back to "%f" mode?
+ if ((value >= 1e-4) && (value < 1e6)) {
+ if ((int)prec > expval) {
+ prec = (unsigned)((int)prec - expval - 1);
+ }
+ else {
+ prec = 0;
+ }
+ flags |= FLAGS_PRECISION; // make sure _ftoa respects precision
+ // no characters in exponent
+ minwidth = 0U;
+ expval = 0;
+ }
+ else {
+ // we use one sigfig for the whole part
+ if ((prec > 0) && (flags & FLAGS_PRECISION)) {
+ --prec;
+ }
+ }
+ }
+
+ // will everything fit?
+ unsigned int fwidth = width;
+ if (width > minwidth) {
+ // we didn't fall-back so subtract the characters required for the exponent
+ fwidth -= minwidth;
+ } else {
+ // not enough characters, so go back to default sizing
+ fwidth = 0U;
+ }
+ if ((flags & FLAGS_LEFT) && minwidth) {
+ // if we're padding on the right, DON'T pad the floating part
+ fwidth = 0U;
+ }
+
+ // rescale the float value
+ if (expval) {
+ value /= conv.F;
+ }
+
+ // output the floating part
+ const size_t start_idx = idx;
+ idx = _ftoa(out, buffer, idx, maxlen, negative ? -value : value, prec, fwidth, flags & ~FLAGS_ADAPT_EXP);
+
+ // output the exponent part
+ if (minwidth) {
+ // output the exponential symbol
+ out((flags & FLAGS_UPPERCASE) ? 'E' : 'e', buffer, idx++, maxlen);
+ // output the exponent value
+ idx = _ntoa_long(out, buffer, idx, maxlen, (expval < 0) ? -expval : expval, expval < 0, 10, 0, minwidth-1, FLAGS_ZEROPAD | FLAGS_PLUS);
+ // might need to right-pad spaces
+ if (flags & FLAGS_LEFT) {
+ while (idx - start_idx < width) out(' ', buffer, idx++, maxlen);
+ }
+ }
+ return idx;
+}
+#endif // PRINTF_SUPPORT_EXPONENTIAL
+#endif // PRINTF_SUPPORT_FLOAT
+
+
+// internal vsnprintf
+static int _vsnprintf(out_fct_type out, char* buffer, const size_t maxlen, const char* format, va_list va)
+{
+ unsigned int flags, width, precision, n;
+ size_t idx = 0U;
+
+ if (!buffer) {
+ // use null output function
+ out = _out_null;
+ }
+
+ while (*format)
+ {
+ // format specifier? %[flags][width][.precision][length]
+ if (*format != '%') {
+ // no
+ out(*format, buffer, idx++, maxlen);
+ format++;
+ continue;
+ }
+ else {
+ // yes, evaluate it
+ format++;
+ }
+
+ // evaluate flags
+ flags = 0U;
+ do {
+ switch (*format) {
+ case '0': flags |= FLAGS_ZEROPAD; format++; n = 1U; break;
+ case '-': flags |= FLAGS_LEFT; format++; n = 1U; break;
+ case '+': flags |= FLAGS_PLUS; format++; n = 1U; break;
+ case ' ': flags |= FLAGS_SPACE; format++; n = 1U; break;
+ case '#': flags |= FLAGS_HASH; format++; n = 1U; break;
+ default : n = 0U; break;
+ }
+ } while (n);
+
+ // evaluate width field
+ width = 0U;
+ if (_is_digit(*format)) {
+ width = _atoi(&format);
+ }
+ else if (*format == '*') {
+ const int w = va_arg(va, int);
+ if (w < 0) {
+ flags |= FLAGS_LEFT; // reverse padding
+ width = (unsigned int)-w;
+ }
+ else {
+ width = (unsigned int)w;
+ }
+ format++;
+ }
+
+ // evaluate precision field
+ precision = 0U;
+ if (*format == '.') {
+ flags |= FLAGS_PRECISION;
+ format++;
+ if (_is_digit(*format)) {
+ precision = _atoi(&format);
+ }
+ else if (*format == '*') {
+ const int prec = (int)va_arg(va, int);
+ precision = prec > 0 ? (unsigned int)prec : 0U;
+ format++;
+ }
+ }
+
+ // evaluate length field
+ switch (*format) {
+ case 'l' :
+ flags |= FLAGS_LONG;
+ format++;
+ if (*format == 'l') {
+ flags |= FLAGS_LONG_LONG;
+ format++;
+ }
+ break;
+ case 'h' :
+ flags |= FLAGS_SHORT;
+ format++;
+ if (*format == 'h') {
+ flags |= FLAGS_CHAR;
+ format++;
+ }
+ break;
+#if defined(PRINTF_SUPPORT_PTRDIFF_T)
+ case 't' :
+ flags |= (sizeof(ptrdiff_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG);
+ format++;
+ break;
+#endif
+ case 'j' :
+ flags |= (sizeof(intmax_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG);
+ format++;
+ break;
+ case 'z' :
+ flags |= (sizeof(size_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG);
+ format++;
+ break;
+ default :
+ break;
+ }
+
+ // evaluate specifier
+ switch (*format) {
+ case 'd' :
+ case 'i' :
+ case 'u' :
+ case 'x' :
+ case 'X' :
+ case 'o' :
+ case 'b' : {
+ // set the base
+ unsigned int base;
+ if (*format == 'x' || *format == 'X') {
+ base = 16U;
+ }
+ else if (*format == 'o') {
+ base = 8U;
+ }
+ else if (*format == 'b') {
+ base = 2U;
+ }
+ else {
+ base = 10U;
+ flags &= ~FLAGS_HASH; // no hash for dec format
+ }
+ // uppercase
+ if (*format == 'X') {
+ flags |= FLAGS_UPPERCASE;
+ }
+
+ // no plus or space flag for u, x, X, o, b
+ if ((*format != 'i') && (*format != 'd')) {
+ flags &= ~(FLAGS_PLUS | FLAGS_SPACE);
+ }
+
+ // ignore '0' flag when precision is given
+ if (flags & FLAGS_PRECISION) {
+ flags &= ~FLAGS_ZEROPAD;
+ }
+
+ // convert the integer
+ if ((*format == 'i') || (*format == 'd')) {
+ // signed
+ if (flags & FLAGS_LONG_LONG) {
+#if defined(PRINTF_SUPPORT_LONG_LONG)
+ const long long value = va_arg(va, long long);
+ idx = _ntoa_long_long(out, buffer, idx, maxlen, (unsigned long long)(value > 0 ? value : 0 - value), value < 0, base, precision, width, flags);
+#endif
+ }
+ else if (flags & FLAGS_LONG) {
+ const long value = va_arg(va, long);
+ idx = _ntoa_long(out, buffer, idx, maxlen, (unsigned long)(value > 0 ? value : 0 - value), value < 0, base, precision, width, flags);
+ }
+ else {
+ const int value = (flags & FLAGS_CHAR) ? (char)va_arg(va, int) : (flags & FLAGS_SHORT) ? (short int)va_arg(va, int) : va_arg(va, int);
+ idx = _ntoa_long(out, buffer, idx, maxlen, (unsigned int)(value > 0 ? value : 0 - value), value < 0, base, precision, width, flags);
+ }
+ }
+ else {
+ // unsigned
+ if (flags & FLAGS_LONG_LONG) {
+#if defined(PRINTF_SUPPORT_LONG_LONG)
+ idx = _ntoa_long_long(out, buffer, idx, maxlen, va_arg(va, unsigned long long), false, base, precision, width, flags);
+#endif
+ }
+ else if (flags & FLAGS_LONG) {
+ idx = _ntoa_long(out, buffer, idx, maxlen, va_arg(va, unsigned long), false, base, precision, width, flags);
+ }
+ else {
+ const unsigned int value = (flags & FLAGS_CHAR) ? (unsigned char)va_arg(va, unsigned int) : (flags & FLAGS_SHORT) ? (unsigned short int)va_arg(va, unsigned int) : va_arg(va, unsigned int);
+ idx = _ntoa_long(out, buffer, idx, maxlen, value, false, base, precision, width, flags);
+ }
+ }
+ format++;
+ break;
+ }
+#if defined(PRINTF_SUPPORT_FLOAT)
+ case 'f' :
+ case 'F' :
+ if (*format == 'F') flags |= FLAGS_UPPERCASE;
+ idx = _ftoa(out, buffer, idx, maxlen, va_arg(va, double), precision, width, flags);
+ format++;
+ break;
+#if defined(PRINTF_SUPPORT_EXPONENTIAL)
+ case 'e':
+ case 'E':
+ case 'g':
+ case 'G':
+ if ((*format == 'g')||(*format == 'G')) flags |= FLAGS_ADAPT_EXP;
+ if ((*format == 'E')||(*format == 'G')) flags |= FLAGS_UPPERCASE;
+ idx = _etoa(out, buffer, idx, maxlen, va_arg(va, double), precision, width, flags);
+ format++;
+ break;
+#endif // PRINTF_SUPPORT_EXPONENTIAL
+#endif // PRINTF_SUPPORT_FLOAT
+ case 'c' : {
+ unsigned int l = 1U;
+ // pre padding
+ if (!(flags & FLAGS_LEFT)) {
+ while (l++ < width) {
+ out(' ', buffer, idx++, maxlen);
+ }
+ }
+ // char output
+ out((char)va_arg(va, int), buffer, idx++, maxlen);
+ // post padding
+ if (flags & FLAGS_LEFT) {
+ while (l++ < width) {
+ out(' ', buffer, idx++, maxlen);
+ }
+ }
+ format++;
+ break;
+ }
+
+ case 's' : {
+ const char* p = va_arg(va, char*);
+ unsigned int l = _strnlen_s(p, precision ? precision : (size_t)-1);
+ // pre padding
+ if (flags & FLAGS_PRECISION) {
+ l = (l < precision ? l : precision);
+ }
+ if (!(flags & FLAGS_LEFT)) {
+ while (l++ < width) {
+ out(' ', buffer, idx++, maxlen);
+ }
+ }
+ // string output
+ while ((*p != 0) && (!(flags & FLAGS_PRECISION) || precision--)) {
+ out(*(p++), buffer, idx++, maxlen);
+ }
+ // post padding
+ if (flags & FLAGS_LEFT) {
+ while (l++ < width) {
+ out(' ', buffer, idx++, maxlen);
+ }
+ }
+ format++;
+ break;
+ }
+
+ case 'p' : {
+ width = sizeof(void*) * 2U;
+ flags |= FLAGS_ZEROPAD | FLAGS_UPPERCASE;
+#if defined(PRINTF_SUPPORT_LONG_LONG)
+ const bool is_ll = sizeof(uintptr_t) == sizeof(long long);
+ if (is_ll) {
+ idx = _ntoa_long_long(out, buffer, idx, maxlen, (uintptr_t)va_arg(va, void*), false, 16U, precision, width, flags);
+ }
+ else {
+#endif
+ idx = _ntoa_long(out, buffer, idx, maxlen, (unsigned long)((uintptr_t)va_arg(va, void*)), false, 16U, precision, width, flags);
+#if defined(PRINTF_SUPPORT_LONG_LONG)
+ }
+#endif
+ format++;
+ break;
+ }
+
+ case '%' :
+ out('%', buffer, idx++, maxlen);
+ format++;
+ break;
+
+ default :
+ out(*format, buffer, idx++, maxlen);
+ format++;
+ break;
+ }
+ }
+
+ // termination
+ out((char)0, buffer, idx < maxlen ? idx : maxlen - 1U, maxlen);
+
+ // return written chars without terminating \0
+ return (int)idx;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+int lv_snprintf(char* buffer, size_t count, const char* format, ...)
+{
+ va_list va;
+ va_start(va, format);
+ const int ret = _vsnprintf(_out_buffer, buffer, count, format, va);
+ va_end(va);
+ return ret;
+}
+
+int lv_vsnprintf(char* buffer, size_t count, const char* format, va_list va)
+{
+ return _vsnprintf(_out_buffer, buffer, count, format, va);
+}
+
+#endif /*LV_SPRINTF_CUSTOM*/
+
diff --git a/src/lv_misc/lv_printf.h b/src/lv_misc/lv_printf.h
new file mode 100644
index 000000000..b3b8598dd
--- /dev/null
+++ b/src/lv_misc/lv_printf.h
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////////
+// \author (c) Marco Paland (info@paland.com)
+// 2014-2019, PALANDesign Hannover, Germany
+//
+// \license The MIT License (MIT)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+// \brief Tiny printf, sprintf and snprintf implementation, optimized for speed on
+// embedded systems with a very limited resources.
+// Use this instead of bloated standard/newlib printf.
+// These routines are thread safe and reentrant.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _LV_PRINTF_H_
+#define _LV_PRINTF_H_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#if LV_SPRINTF_CUSTOM == 0
+
+#include
+#include
+
+/**
+ * Tiny snprintf/vsnprintf implementation
+ * \param buffer A pointer to the buffer where to store the formatted string
+ * \param count The maximum number of characters to store in the buffer, including a terminating null character
+ * \param format A string that specifies the format of the output
+ * \param va A value identifying a variable arguments list
+ * \return The number of characters that COULD have been written into the buffer, not counting the terminating
+ * null character. A value equal or larger than count indicates truncation. Only when the returned value
+ * is non-negative and less than count, the string has been completely written.
+ */
+int lv_snprintf(char* buffer, size_t count, const char* format, ...);
+int lv_vsnprintf(char* buffer, size_t count, const char* format, va_list va);
+
+#else
+#include LV_SPRINTF_INCLUDE
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif // _PRINTF_H_
diff --git a/src/lv_misc/lv_task.c b/src/lv_misc/lv_task.c
index 296fa8f91..8a7bffca8 100644
--- a/src/lv_misc/lv_task.c
+++ b/src/lv_misc/lv_task.c
@@ -9,6 +9,7 @@
*********************/
#include
#include "lv_task.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_hal/lv_hal_tick.h"
#include "lv_gc.h"
@@ -64,19 +65,21 @@ void lv_task_core_init(void)
*/
LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void)
{
+
+
LV_LOG_TRACE("lv_task_handler started");
/*Avoid concurrent running of the task handler*/
- static bool task_handler_mutex = false;
- if(task_handler_mutex) return;
- task_handler_mutex = true;
+ static bool already_running = false;
+ if(already_running) return;
+ already_running = true;
static uint32_t idle_period_start = 0;
static uint32_t handler_start = 0;
static uint32_t busy_time = 0;
if(lv_task_run == false) {
- task_handler_mutex = false; /*Release mutex*/
+ already_running = false; /*Release mutex*/
return;
}
@@ -115,14 +118,16 @@ LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void)
if(((lv_task_t *)LV_GC_ROOT(_lv_task_act))->prio == LV_TASK_PRIO_HIGHEST) {
lv_task_exec(LV_GC_ROOT(_lv_task_act));
}
- /*Tasks with higher priority then the interrupted shall be run in every case*/
+ /*Tasks with higher priority than the interrupted shall be run in every case*/
else if(task_interrupter) {
if(((lv_task_t *)LV_GC_ROOT(_lv_task_act))->prio > task_interrupter->prio) {
if(lv_task_exec(LV_GC_ROOT(_lv_task_act))) {
- task_interrupter =
- LV_GC_ROOT(_lv_task_act); /*Check all tasks again from the highest priority */
- end_flag = false;
- break;
+ if(!task_created && !task_deleted) {
+ /*Check all tasks again from the highest priority */
+ task_interrupter = LV_GC_ROOT(_lv_task_act);
+ end_flag = false;
+ break;
+ }
}
}
}
@@ -130,14 +135,19 @@ LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void)
* Just run the remaining tasks*/
else {
if(lv_task_exec(LV_GC_ROOT(_lv_task_act))) {
- task_interrupter = LV_GC_ROOT(_lv_task_act); /*Check all tasks again from the highest priority */
- end_flag = false;
- break;
+ if(!task_created && !task_deleted) {
+ task_interrupter = LV_GC_ROOT(_lv_task_act); /*Check all tasks again from the highest priority */
+ end_flag = false;
+ break;
+ }
}
}
- if(task_deleted) break; /*If a task was deleted then this or the next item might be corrupted*/
- if(task_created) break; /*If a task was created then this or the next item might be corrupted*/
+ /*If a task was created or deleted then this or the next item might be corrupted*/
+ if(task_created || task_deleted) {
+ task_interrupter = NULL;
+ break;
+ }
LV_GC_ROOT(_lv_task_act) = next; /*Load the next task*/
}
@@ -153,7 +163,7 @@ LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void)
idle_period_start = lv_tick_get();
}
- task_handler_mutex = false; /*Release the mutex*/
+ already_running = false; /*Release the mutex*/
LV_LOG_TRACE("lv_task_handler ready");
}
@@ -173,7 +183,7 @@ lv_task_t * lv_task_create_basic(void)
/*It's the first task*/
if(NULL == tmp) {
new_task = lv_ll_ins_head(&LV_GC_ROOT(_lv_task_ll));
- lv_mem_assert(new_task);
+ LV_ASSERT_MEM(new_task);
if(new_task == NULL) return NULL;
}
/*Insert the new task to proper place according to its priority*/
@@ -181,7 +191,7 @@ lv_task_t * lv_task_create_basic(void)
do {
if(tmp->prio <= DEF_PRIO) {
new_task = lv_ll_ins_prev(&LV_GC_ROOT(_lv_task_ll), tmp);
- lv_mem_assert(new_task);
+ LV_ASSERT_MEM(new_task);
if(new_task == NULL) return NULL;
break;
}
@@ -191,7 +201,7 @@ lv_task_t * lv_task_create_basic(void)
/*Only too high priority tasks were found. Add the task to the end*/
if(tmp == NULL) {
new_task = lv_ll_ins_tail(&LV_GC_ROOT(_lv_task_ll));
- lv_mem_assert(new_task);
+ LV_ASSERT_MEM(new_task);
if(new_task == NULL) return NULL;
}
}
@@ -223,7 +233,7 @@ lv_task_t * lv_task_create_basic(void)
lv_task_t * lv_task_create(lv_task_cb_t task_cb, uint32_t period, lv_task_prio_t prio, void * user_data)
{
lv_task_t * new_task = lv_task_create_basic();
- lv_mem_assert(new_task);
+ LV_ASSERT_MEM(new_task);
if(new_task == NULL) return NULL;
lv_task_set_cb(new_task, task_cb);
@@ -250,7 +260,7 @@ void lv_task_set_cb(lv_task_t * task, lv_task_cb_t task_cb)
*/
void lv_task_del(lv_task_t * task)
{
- lv_ll_rem(&LV_GC_ROOT(_lv_task_ll), task);
+ lv_ll_remove(&LV_GC_ROOT(_lv_task_ll), task);
lv_mem_free(task);
diff --git a/src/lv_misc/lv_txt.c b/src/lv_misc/lv_txt.c
index 8b35c7149..7251f3dbe 100644
--- a/src/lv_misc/lv_txt.c
+++ b/src/lv_misc/lv_txt.c
@@ -56,7 +56,7 @@ uint32_t (*lv_txt_encoded_conv_wc)(uint32_t) = lv_txt_utf8_con
uint32_t (*lv_txt_encoded_next)(const char *, uint32_t *) = lv_txt_utf8_next;
uint32_t (*lv_txt_encoded_prev)(const char *, uint32_t *) = lv_txt_utf8_prev;
uint32_t (*lv_txt_encoded_get_byte_id)(const char *, uint32_t) = lv_txt_utf8_get_byte_id;
-uint32_t (*lv_encoded_get_char_id)(const char *, uint32_t) = lv_txt_utf8_get_char_id;
+uint32_t (*lv_txt_encoded_get_char_id)(const char *, uint32_t) = lv_txt_utf8_get_char_id;
uint32_t (*lv_txt_get_encoded_length)(const char *) = lv_txt_utf8_get_length;
#elif LV_TXT_ENC == LV_TXT_ENC_ASCII
uint8_t (*lv_txt_encoded_size)(const char *) = lv_txt_iso8859_1_size;
@@ -65,7 +65,7 @@ uint32_t (*lv_txt_encoded_conv_wc)(uint32_t) = lv_txt_iso8859_
uint32_t (*lv_txt_encoded_next)(const char *, uint32_t *) = lv_txt_iso8859_1_next;
uint32_t (*lv_txt_encoded_prev)(const char *, uint32_t *) = lv_txt_iso8859_1_prev;
uint32_t (*lv_txt_encoded_get_byte_id)(const char *, uint32_t) = lv_txt_iso8859_1_get_byte_id;
-uint32_t (*lv_encoded_get_char_id)(const char *, uint32_t) = lv_txt_iso8859_1_get_char_id;
+uint32_t (*lv_txt_encoded_get_char_id)(const char *, uint32_t) = lv_txt_iso8859_1_get_char_id;
uint32_t (*lv_txt_get_encoded_length)(const char *) = lv_txt_iso8859_1_get_length;
#endif
@@ -103,7 +103,7 @@ void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_font_t *
uint32_t line_start = 0;
uint32_t new_line_start = 0;
lv_coord_t act_line_length;
- uint8_t letter_height = lv_font_get_line_height(font);
+ uint16_t letter_height = lv_font_get_line_height(font);
/*Calc. the height and longest line*/
while(text[line_start] != '\0') {
@@ -130,8 +130,150 @@ void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_font_t *
size_res->y -= line_space;
}
+/**
+ * Get the next word of text. A word is delimited by break characters.
+ *
+ * If the word cannot fit in the max_width space, obey LV_TXT_LINE_BREAK_LONG_* rules.
+ *
+ * If the next word cannot fit anything, return 0.
+ *
+ * If the first character is a break character, returns the next index.
+ *
+ * Example calls from lv_txt_get_next_line() assuming sufficent max_width and
+ * txt = "Test text\n"
+ * 0123456789
+ *
+ * Calls would be as follows:
+ * 1. Return i=4, pointing at breakchar ' ', for the string "Test"
+ * 2. Return i=5, since i=4 was a breakchar.
+ * 3. Return i=9, pointing at breakchar '\n'
+ * 4. Parenting lv_txt_get_next_line() would detect subsequent '\0'
+ *
+ * TODO: Returned word_w_ptr may overestimate the returned word's width when
+ * max_width is reached. In current usage, this has no impact.
+ *
+ * @param txt a '\0' terminated string
+ * @param font pointer to a font
+ * @param letter_space letter space
+ * @param max_width max with of the text (break the lines to fit this size) Set CORD_MAX to avoid line breaks
+ * @param flags settings for the text from 'txt_flag_type' enum
+ * @param[out] word_w_ptr width (in pixels) of the parsed word. May be NULL.
+ * @param force Force return the fraction of the word that can fit in the provided space.
+ * @return the index of the first char of the next word (in byte index not letter index. With UTF-8 they are different)
+ */
+static uint16_t lv_txt_get_next_word(const char * txt, const lv_font_t * font,
+ lv_coord_t letter_space, lv_coord_t max_width,
+ lv_txt_flag_t flag, uint32_t *word_w_ptr, lv_txt_cmd_state_t * cmd_state, bool force)
+{
+ if(txt == NULL || txt[0] == '\0') return 0;
+ if(font == NULL) return 0;
+
+ if(flag & LV_TXT_FLAG_EXPAND) max_width = LV_COORD_MAX;
+
+ uint32_t i = 0, i_next = 0, i_next_next = 0; /* Iterating index into txt */
+ uint32_t letter = 0; /* Letter at i */
+ uint32_t letter_next = 0; /* Letter at i_next */
+ lv_coord_t letter_w;
+ lv_coord_t cur_w = 0; /* Pixel Width of transversed string */
+ uint32_t word_len = 0; /* Number of characters in the transversed word */
+ uint32_t break_index = NO_BREAK_FOUND; /* only used for "long" words */
+ uint32_t break_letter_count = 0; /* Number of characters up to the long word break point */
+
+ letter = lv_txt_encoded_next(txt, &i_next);
+ i_next_next = i_next;
+
+ /* Obtain the full word, regardless if it fits or not in max_width */
+ while(txt[i] != '\0') {
+ letter_next = lv_txt_encoded_next(txt, &i_next_next);
+ word_len++;
+
+ /*Handle the recolor command*/
+ if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
+ if(lv_txt_is_cmd(cmd_state, letter) != false) {
+ i = i_next;
+ i_next = i_next_next;
+ letter = letter_next;
+ continue; /*Skip the letter is it is part of a command*/
+ }
+ }
+
+ letter_w = lv_font_get_glyph_width(font, letter, letter_next);
+ cur_w += letter_w;
+
+ /* Test if this character fits within max_width */
+ if(break_index == NO_BREAK_FOUND && cur_w > max_width) {
+ break_index = i;
+ break_letter_count = word_len - 1;
+ /* break_index is now pointing at the character that doesn't fit */
+ }
+
+ /*Check for new line chars and breakchars*/
+ if(letter == '\n' || letter == '\r' || is_break_char(letter)) {
+ /* Update the output width on the first character if it fits.
+ * Must do this here incase first letter is a break character. */
+ if(i == 0 && break_index == NO_BREAK_FOUND && word_w_ptr != NULL) *word_w_ptr = cur_w;
+ word_len--;
+ break;
+ }
+
+ /* Update the output width */
+ if( word_w_ptr != NULL && break_index == NO_BREAK_FOUND ) *word_w_ptr = cur_w;
+
+ if(letter_w > 0) {
+ cur_w += letter_space;
+ }
+
+ i = i_next;
+ i_next = i_next_next;
+ letter = letter_next;
+ }
+
+ /* Entire Word fits in the provided space */
+ if( break_index == NO_BREAK_FOUND ) {
+ if( word_len == 0 || (letter == '\r' && letter_next == '\n') ) i = i_next;
+ return i;
+ }
+
+#if LV_TXT_LINE_BREAK_LONG_LEN > 0
+ /* Word doesn't fit in provided space, but isn't "long" */
+ if(word_len < LV_TXT_LINE_BREAK_LONG_LEN) {
+ if( force ) return break_index;
+ if(word_w_ptr != NULL) *word_w_ptr = 0; /* Return no word */
+ return 0;
+ }
+
+ /* Word is "long," but insufficient amounts can fit in provided space */
+ if(break_letter_count < LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN) {
+ if( force ) return break_index;
+ if(word_w_ptr != NULL) *word_w_ptr = 0;
+ return 0;
+ }
+
+ /* Word is a "long", but letters may need to be better distributed */
+ {
+ i = break_index;
+ int32_t n_move = LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN - (word_len - break_letter_count);
+ /* Move pointer "i" backwards */
+ for(;n_move>0; n_move--){
+ lv_txt_encoded_prev(txt, &i);
+ // TODO: it would be appropriate to update the returned word width here
+ // However, in current usage, this doesn't impact anything.
+ }
+ }
+ return i;
+#else
+ if( force ) return break_index;
+ if(word_w_ptr != NULL) *word_w_ptr = 0; /* Return no word */
+ (void) break_letter_count;
+ return 0;
+#endif
+}
+
/**
* Get the next line of text. Check line length and break chars too.
+ *
+ * A line of txt includes the \n character.
+ *
* @param txt a '\0' terminated string
* @param font pointer to a font
* @param letter_space letter space
@@ -139,75 +281,40 @@ void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_font_t *
* @param flags settings for the text from 'txt_flag_type' enum
* @return the index of the first char of the new line (in byte index not letter index. With UTF-8 they are different)
*/
-uint16_t lv_txt_get_next_line(const char * txt, const lv_font_t * font, lv_coord_t letter_space, lv_coord_t max_width,
- lv_txt_flag_t flag)
+uint16_t lv_txt_get_next_line(const char * txt, const lv_font_t * font,
+ lv_coord_t letter_space, lv_coord_t max_width, lv_txt_flag_t flag)
{
if(txt == NULL) return 0;
if(font == NULL) return 0;
if(flag & LV_TXT_FLAG_EXPAND) max_width = LV_COORD_MAX;
-
- uint32_t i = 0;
- uint32_t i_next = 0;
- lv_coord_t cur_w = 0;
- uint32_t last_break = NO_BREAK_FOUND;
lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
- uint32_t letter_w;
- uint32_t letter = 0;
- uint32_t letter_next = 0;
+ uint32_t i = 0; /* Iterating index into txt */
- letter_next = lv_txt_encoded_next(txt, &i_next);
+ while(txt[i] != '\0' && max_width > 0) {
+ uint32_t word_w = 0;
+ uint32_t advance = lv_txt_get_next_word(&txt[i], font, letter_space, max_width, flag, &word_w, &cmd_state, i==0);
+ max_width -= word_w;
- while(txt[i] != '\0') {
- letter = letter_next;
- i = i_next;
- letter_next = lv_txt_encoded_next(txt, &i_next);
-
- /*Handle the recolor command*/
- if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
- if(lv_txt_is_cmd(&cmd_state, letter) != false) {
- continue; /*Skip the letter is it is part of a command*/
- }
+ if( advance == 0 ){
+ if(i == 0) lv_txt_encoded_next(txt, &i); // prevent inf loops
+ break;
}
- /*Check for new line chars*/
- if(letter == '\n' || letter == '\r') {
- /*Return with the first letter of the next line*/
- if(letter == '\r' && letter_next == '\n')
- return i_next;
- else
- return i;
- } else { /*Check the actual length*/
- letter_w = lv_font_get_glyph_width(font, letter, letter_next);
- cur_w += letter_w;
+ i += advance;
- /*If the txt is too long then finish, this is the line end*/
- if(cur_w > max_width) {
- /*If a break character was already found break there*/
- if(last_break != NO_BREAK_FOUND) {
- i = last_break;
- } else {
- /* Now this character is out of the area so it will be first character of the next line*/
- /* But 'i' already points to the next character (because of lv_txt_utf8_next) step beck one*/
- lv_txt_encoded_prev(txt, &i);
- }
+ if(txt[0] == '\n') break;
- /* Do not let to return without doing nothing.
- * Find at least one character (Avoid infinite loop )*/
- if(i == 0) lv_txt_encoded_next(txt, &i);
-
- return i;
- }
- /*If this char still can fit to this line then check if
- * txt can be broken here later */
- else if(is_break_char(letter)) {
- last_break = i; /*Save the first char index after break*/
- }
+ if(txt[i] == '\n'){
+ i++; /* Include the following newline in the current line */
+ break;
}
- if(letter_w > 0) {
- cur_w += letter_space;
- }
+ }
+
+ /* Always step at least one to avoid infinite loops */
+ if(i == 0) {
+ lv_txt_encoded_next(txt, &i);
}
return i;
@@ -309,8 +416,8 @@ bool lv_txt_is_cmd(lv_txt_cmd_state_t * state, uint32_t c)
*/
void lv_txt_ins(char * txt_buf, uint32_t pos, const char * ins_txt)
{
- uint32_t old_len = strlen(txt_buf);
- uint32_t ins_len = strlen(ins_txt);
+ size_t old_len = strlen(txt_buf);
+ size_t ins_len = strlen(ins_txt);
uint32_t new_len = ins_len + old_len;
pos = lv_txt_encoded_get_byte_id(txt_buf, pos); /*Convert to byte index instead of letter index*/
@@ -334,7 +441,7 @@ void lv_txt_ins(char * txt_buf, uint32_t pos, const char * ins_txt)
void lv_txt_cut(char * txt, uint32_t pos, uint32_t len)
{
- uint32_t old_len = strlen(txt);
+ size_t old_len = strlen(txt);
pos = lv_txt_encoded_get_byte_id(txt, pos); /*Convert to byte index instead of letter index*/
len = lv_txt_encoded_get_byte_id(&txt[pos], len);
@@ -366,7 +473,7 @@ static uint8_t lv_txt_utf8_size(const char * str)
return 3;
else if((str[0] & 0xF8) == 0xF0)
return 4;
- return 1; /*If the char was invalid step tell it's 1 byte long*/
+ return 0; /*If the char was invalid tell it's 1 byte long*/
}
/**
@@ -543,7 +650,8 @@ static uint32_t lv_txt_utf8_get_byte_id(const char * txt, uint32_t utf8_id)
uint32_t i;
uint32_t byte_cnt = 0;
for(i = 0; i < utf8_id; i++) {
- byte_cnt += lv_txt_encoded_size(&txt[byte_cnt]);
+ uint8_t c_size = lv_txt_encoded_size(&txt[byte_cnt]);
+ byte_cnt += c_size > 0 ? c_size : 1;
}
return byte_cnt;
diff --git a/src/lv_misc/lv_txt.h b/src/lv_misc/lv_txt.h
index 6fc6e4a63..6dbce5d44 100644
--- a/src/lv_misc/lv_txt.h
+++ b/src/lv_misc/lv_txt.h
@@ -27,7 +27,9 @@ extern "C" {
/*********************
* DEFINES
*********************/
+#ifndef LV_TXT_COLOR_CMD
#define LV_TXT_COLOR_CMD "#"
+#endif
#define LV_TXT_ENC_UTF8 1
#define LV_TXT_ENC_ASCII 2
@@ -188,7 +190,7 @@ extern uint32_t (*lv_txt_encoded_get_byte_id)(const char *, uint32_t);
* @param byte_id byte index
* @return character index of the letter at 'byte_id'th position
*/
-extern uint32_t (*lv_encoded_get_char_id)(const char *, uint32_t);
+extern uint32_t (*lv_txt_encoded_get_char_id)(const char *, uint32_t);
/**
* Get the number of characters (and NOT bytes) in a string.
diff --git a/src/lv_misc/lv_types.h b/src/lv_misc/lv_types.h
index 89f04aa40..c588e2451 100644
--- a/src/lv_misc/lv_types.h
+++ b/src/lv_misc/lv_types.h
@@ -17,6 +17,17 @@ extern "C" {
/*********************
* DEFINES
*********************/
+// Check windows
+#ifdef __WIN64
+#define LV_ARCH_64
+#endif
+
+// Check GCC
+#ifdef __GNUC__
+#if defined(__x86_64__) || defined(__ppc64__)
+#define LV_ARCH_64
+#endif
+#endif
/**********************
* TYPEDEFS
@@ -32,7 +43,11 @@ enum {
};
typedef uint8_t lv_res_t;
-typedef unsigned long int lv_uintptr_t;
+#ifdef LV_ARCH_64
+typedef uint64_t lv_uintptr_t;
+#else
+typedef uint32_t lv_uintptr_t;
+#endif
/**********************
* GLOBAL PROTOTYPES
diff --git a/src/lv_objx/lv_arc.c b/src/lv_objx/lv_arc.c
index 7db5fb5e4..5e6b1ab10 100644
--- a/src/lv_objx/lv_arc.c
+++ b/src/lv_objx/lv_arc.c
@@ -9,6 +9,7 @@
#include "lv_arc.h"
#if LV_USE_ARC != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_misc/lv_math.h"
#include "../lv_draw/lv_draw_arc.h"
#include "../lv_themes/lv_theme.h"
@@ -16,6 +17,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_arc"
/**********************
* TYPEDEFS
@@ -24,7 +26,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_arc_design(lv_obj_t * arc, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_arc_design(lv_obj_t * arc, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param);
/**********************
@@ -54,13 +56,16 @@ lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of arc*/
lv_obj_t * new_arc = lv_obj_create(par, copy);
- lv_mem_assert(new_arc);
+ LV_ASSERT_MEM(new_arc);
if(new_arc == NULL) return NULL;
/*Allocate the arc type specific extended data*/
lv_arc_ext_t * ext = lv_obj_allocate_ext_attr(new_arc, sizeof(lv_arc_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_arc);
+ return NULL;
+ }
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_arc);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_arc);
@@ -112,20 +117,39 @@ lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy)
*====================*/
/**
- * Set the start and end angles of an arc. 0 deg: bottom, 90 deg: right etc.
+ * Set the start angle of an arc. 0 deg: right, 90 bottom: right etc.
* @param arc pointer to an arc object
* @param start the start angle [0..360]
- * @param end the end angle [0..360]
*/
-void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end)
+void lv_arc_set_start_angle(lv_obj_t * arc, int16_t start)
{
+ LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
+
lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
- if(start > 360) start = 360;
- if(end > 360) end = 360;
+ if(start > 360) start -= 360;
+ if(start < 0) start += 360;
ext->angle_start = start;
- ext->angle_end = end;
+
+ lv_obj_invalidate(arc);
+}
+
+/**
+ * Set the start angle of an arc. 0 deg: right, 90 bottom: right etc.
+ * @param arc pointer to an arc object
+ * @param start the start angle [0..360]
+ */
+void lv_arc_set_end_angle(lv_obj_t * arc, int16_t end)
+{
+ LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
+
+ lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
+
+ if(end > 360) end -= 360;
+ if(end < 0) end += 360;
+
+ ext->angle_end= end;
lv_obj_invalidate(arc);
}
@@ -138,6 +162,8 @@ void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end)
* */
void lv_arc_set_style(lv_obj_t * arc, lv_arc_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
+
switch(type) {
case LV_ARC_STYLE_MAIN: lv_obj_set_style(arc, style); break;
}
@@ -154,6 +180,8 @@ void lv_arc_set_style(lv_obj_t * arc, lv_arc_style_t type, const lv_style_t * st
*/
uint16_t lv_arc_get_angle_start(lv_obj_t * arc)
{
+ LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
+
lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
return ext->angle_start;
@@ -166,6 +194,8 @@ uint16_t lv_arc_get_angle_start(lv_obj_t * arc)
*/
uint16_t lv_arc_get_angle_end(lv_obj_t * arc)
{
+ LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
+
lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
return ext->angle_end;
@@ -179,6 +209,8 @@ uint16_t lv_arc_get_angle_end(lv_obj_t * arc)
* */
const lv_style_t * lv_arc_get_style(const lv_obj_t * arc, lv_arc_style_t type)
{
+ LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
switch(type) {
@@ -204,18 +236,18 @@ const lv_style_t * lv_arc_get_style(const lv_obj_t * arc, lv_arc_style_t type)
/**
* Handle the drawing related tasks of the arcs
* @param arc pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_arc_design(lv_obj_t * arc, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_arc_design(lv_obj_t * arc, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
@@ -226,44 +258,13 @@ static bool lv_arc_design(lv_obj_t * arc, const lv_area_t * mask, lv_design_mode
lv_coord_t x = arc->coords.x1 + lv_obj_get_width(arc) / 2;
lv_coord_t y = arc->coords.y1 + lv_obj_get_height(arc) / 2;
lv_opa_t opa_scale = lv_obj_get_opa_scale(arc);
- lv_draw_arc(x, y, r, mask, ext->angle_start, ext->angle_end, style, opa_scale);
-
- /*Draw circle on the ends if enabled */
- if(style->line.rounded) {
- lv_coord_t thick_half = style->line.width / 2;
- lv_coord_t cir_x = ((r - thick_half) * lv_trigo_sin(ext->angle_start) >> LV_TRIGO_SHIFT);
- lv_coord_t cir_y = ((r - thick_half) * lv_trigo_sin(ext->angle_start + 90) >> LV_TRIGO_SHIFT);
-
- lv_style_t cir_style;
- lv_style_copy(&cir_style, &lv_style_plain);
- cir_style.body.grad_color = style->line.color;
- cir_style.body.main_color = cir_style.body.grad_color;
- cir_style.body.radius = LV_RADIUS_CIRCLE;
- lv_area_t cir_area;
- cir_area.x1 = cir_x + x - thick_half;
- cir_area.y1 = cir_y + y - thick_half;
- cir_area.x2 = cir_x + x + thick_half;
- cir_area.y2 = cir_y + y + thick_half;
-
- lv_draw_rect(&cir_area, mask, &cir_style, opa_scale);
-
- cir_x = ((r - thick_half) * lv_trigo_sin(ext->angle_end) >> LV_TRIGO_SHIFT);
- cir_y = ((r - thick_half) * lv_trigo_sin(ext->angle_end + 90) >> LV_TRIGO_SHIFT);
-
- cir_area.x1 = cir_x + x - thick_half;
- cir_area.y1 = cir_y + y - thick_half;
- cir_area.x2 = cir_x + x + thick_half;
- cir_area.y2 = cir_y + y + thick_half;
-
- lv_draw_rect(&cir_area, mask, &cir_style, opa_scale);
- }
-
+ lv_draw_arc(x, y, r, clip_area, ext->angle_start, ext->angle_end, style, opa_scale);
}
/*Post draw when the children are drawn*/
else if(mode == LV_DESIGN_DRAW_POST) {
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -281,15 +282,10 @@ static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param)
res = ancestor_signal(arc, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
+
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_arc";
}
return res;
diff --git a/src/lv_objx/lv_arc.h b/src/lv_objx/lv_arc.h
index 8cc34d5f7..89800958b 100644
--- a/src/lv_objx/lv_arc.h
+++ b/src/lv_objx/lv_arc.h
@@ -65,12 +65,18 @@ lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy);
*====================*/
/**
- * Set the start and end angles of an arc. 0 deg: bottom, 90 deg: right etc.
+ * Set the start angle of an arc. 0 deg: right, 90 bottom: right etc.
* @param arc pointer to an arc object
- * @param start the start angle [0..360]
- * @param end the end angle [0..360]
+ * @param start the start angle
*/
-void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end);
+void lv_arc_set_start_angle(lv_obj_t * arc, int16_t start);
+
+/**
+ * Set the start angle of an arc. 0 deg: right, 90 bottom: right etc.
+ * @param arc pointer to an arc object
+ * @param end the end angle
+ */
+void lv_arc_set_end_angle(lv_obj_t * arc, int16_t end);
/**
* Set a style of a arc.
diff --git a/src/lv_objx/lv_bar.c b/src/lv_objx/lv_bar.c
index 6b6ebb349..1eab6e313 100644
--- a/src/lv_objx/lv_bar.c
+++ b/src/lv_objx/lv_bar.c
@@ -11,14 +11,19 @@
#include "lv_bar.h"
#if LV_USE_BAR != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_anim.h"
+#include "../lv_misc/lv_math.h"
#include
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_bar"
+
+#define LV_BAR_SIZE_MIN 4 /*hor. pad and ver. pad cannot make the indicator smaller then this [px]*/
/**********************
* TYPEDEFS
@@ -27,11 +32,16 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_bar_design(lv_obj_t * bar, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_bar_design(lv_obj_t * bar, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_bar_signal(lv_obj_t * bar, lv_signal_t sign, void * param);
+static void lv_bar_set_value_with_anim(lv_obj_t * bar, int16_t new_value, int16_t *value_ptr, lv_bar_anim_t *anim_info, lv_anim_enable_t en);
+static void lv_bar_init_anim(lv_obj_t * bar, lv_bar_anim_t * bar_anim);
+
+static void draw_bg(lv_obj_t * bar, const lv_area_t * clip_area, lv_design_mode_t mode, lv_opa_t opa);
+static void draw_indic(lv_obj_t * bar, const lv_area_t * clip_area, lv_design_mode_t mode, lv_opa_t opa);
#if LV_USE_ANIMATION
-static void lv_bar_anim(void * bar, lv_anim_value_t value);
+static void lv_bar_anim(lv_bar_anim_t * bar, lv_anim_value_t value);
static void lv_bar_anim_ready(lv_anim_t * a);
#endif
@@ -61,7 +71,7 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor basic object*/
lv_obj_t * new_bar = lv_obj_create(par, copy);
- lv_mem_assert(new_bar);
+ LV_ASSERT_MEM(new_bar);
if(new_bar == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_bar);
@@ -69,19 +79,22 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
/*Allocate the object type specific extended data*/
lv_bar_ext_t * ext = lv_obj_allocate_ext_attr(new_bar, sizeof(lv_bar_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_bar);
+ return NULL;
+ }
ext->min_value = 0;
+ ext->start_value = 0;
ext->max_value = 100;
ext->cur_value = 0;
#if LV_USE_ANIMATION
ext->anim_time = 200;
- ext->anim_start = 0;
- ext->anim_end = 0;
- ext->anim_state = LV_BAR_ANIM_STATE_INV;
+ lv_bar_init_anim(new_bar, &ext->cur_value_anim);
+ lv_bar_init_anim(new_bar, &ext->start_value_anim);
#endif
- ext->sym = 0;
+ ext->type = LV_BAR_TYPE_NORMAL;
ext->style_indic = &lv_style_pretty_color;
lv_obj_set_signal_cb(new_bar, lv_bar_signal);
@@ -90,7 +103,7 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
/*Init the new bar object*/
if(copy == NULL) {
lv_obj_set_click(new_bar, false);
- lv_obj_set_size(new_bar, LV_DPI * 2, LV_DPI / 3);
+ lv_obj_set_size(new_bar, LV_DPI * 2, LV_DPI / 4);
lv_bar_set_value(new_bar, ext->cur_value, false);
lv_theme_t * th = lv_theme_get_current();
@@ -103,10 +116,11 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
} else {
lv_bar_ext_t * ext_copy = lv_obj_get_ext_attr(copy);
ext->min_value = ext_copy->min_value;
+ ext->start_value = ext_copy->start_value;
ext->max_value = ext_copy->max_value;
ext->cur_value = ext_copy->cur_value;
ext->style_indic = ext_copy->style_indic;
- ext->sym = ext_copy->sym;
+ ext->type = ext_copy->type;
/*Refresh the style with new signal function*/
lv_obj_refresh_style(new_bar);
@@ -130,6 +144,8 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION == 0
anim = false;
#endif
@@ -142,39 +158,33 @@ void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim)
if(ext->cur_value == new_value) return;
- if(anim == LV_ANIM_OFF) {
- ext->cur_value = new_value;
- lv_obj_invalidate(bar);
- } else {
-#if LV_USE_ANIMATION
- /*No animation in progress -> simply set the values*/
- if(ext->anim_state == LV_BAR_ANIM_STATE_INV) {
- ext->anim_start = ext->cur_value;
- ext->anim_end = new_value;
- }
- /*Animation in progress. Start from the animation end value*/
- else {
- ext->anim_start = ext->anim_end;
- ext->anim_end = new_value;
- }
+ lv_bar_set_value_with_anim(bar, new_value, &ext->cur_value, &ext->cur_value_anim, anim);
- lv_anim_t a;
- a.var = bar;
- a.start = LV_BAR_ANIM_STATE_START;
- a.end = LV_BAR_ANIM_STATE_END;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_bar_anim;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = lv_bar_anim_ready;
- a.act_time = 0;
- a.time = ext->anim_time;
- a.playback = 0;
- a.playback_pause = 0;
- a.repeat = 0;
- a.repeat_pause = 0;
+}
- lv_anim_create(&a);
+/**
+ * Set a new start value on the bar
+ * @param bar pointer to a bar object
+ * @param value new start value
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediatelly
+ */
+void lv_bar_set_start_value(lv_obj_t * bar, int16_t start_value, lv_anim_enable_t anim)
+{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
+#if LV_USE_ANIMATION == 0
+ anim = false;
#endif
- }
+ lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
+ if(ext->start_value == start_value) return;
+
+ int16_t new_value;
+ new_value = start_value > ext->max_value ? ext->max_value : start_value;
+ new_value = new_value < ext->min_value ? ext->min_value : start_value;
+
+ if(ext->start_value == new_value) return;
+
+ lv_bar_set_value_with_anim(bar, start_value, &ext->start_value, &ext->start_value_anim, anim);
}
/**
@@ -185,11 +195,17 @@ void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim)
*/
void lv_bar_set_range(lv_obj_t * bar, int16_t min, int16_t max)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
if(ext->min_value == min && ext->max_value == max) return;
ext->max_value = max;
ext->min_value = min;
+
+ if(lv_bar_get_type(bar) != LV_BAR_TYPE_CUSTOM)
+ ext->start_value = min;
+
if(ext->cur_value > max) {
ext->cur_value = max;
lv_bar_set_value(bar, ext->cur_value, false);
@@ -202,15 +218,20 @@ void lv_bar_set_range(lv_obj_t * bar, int16_t min, int16_t max)
}
/**
- * Make the bar symmetric to zero. The indicator will grow from zero instead of the minimum
- * position.
- * @param bar pointer to a bar object
- * @param en true: enable disable symmetric behavior; false: disable
+ * Set the type of bar.
+ * @param bar pointer to bar object
+ * @param type bar type
*/
-void lv_bar_set_sym(lv_obj_t * bar, bool en)
+void lv_bar_set_type(lv_obj_t * bar, lv_bar_type_t type)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- ext->sym = en ? 1 : 0;
+ ext->type = type;
+ if(ext->type != LV_BAR_TYPE_CUSTOM)
+ ext->start_value = ext->min_value;
+
+ lv_obj_invalidate(bar);
}
/**
@@ -220,6 +241,8 @@ void lv_bar_set_sym(lv_obj_t * bar, bool en)
*/
void lv_bar_set_anim_time(lv_obj_t * bar, uint16_t anim_time)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
ext->anim_time = anim_time;
@@ -237,6 +260,8 @@ void lv_bar_set_anim_time(lv_obj_t * bar, uint16_t anim_time)
*/
void lv_bar_set_style(lv_obj_t * bar, lv_bar_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
switch(type) {
@@ -259,15 +284,38 @@ void lv_bar_set_style(lv_obj_t * bar, lv_bar_style_t type, const lv_style_t * st
*/
int16_t lv_bar_get_value(const lv_obj_t * bar)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
/*If animated tell that it's already at the end value*/
#if LV_USE_ANIMATION
- if(ext->anim_state != LV_BAR_ANIM_STATE_INV) return ext->anim_end;
+ if(ext->cur_value_anim.is_animating) return ext->cur_value_anim.anim_end;
#endif
/*No animation, simple return the current value*/
return ext->cur_value;
}
+/**
+ * Get the start value of a bar
+ * @param bar pointer to a bar object
+ * @return the start value of the bar
+ */
+int16_t lv_bar_get_start_value(const lv_obj_t * bar)
+{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
+ lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
+
+ if(ext->type != LV_BAR_TYPE_CUSTOM) return ext->min_value;
+
+ /*If animated tell that it's already at the end value*/
+#if LV_USE_ANIMATION
+ if(ext->start_value_anim.is_animating) return ext->start_value_anim.anim_end;
+#endif
+ /*No animation, simple return the current value*/
+ return ext->start_value;
+}
+
/**
* Get the minimum value of a bar
* @param bar pointer to a bar object
@@ -275,6 +323,8 @@ int16_t lv_bar_get_value(const lv_obj_t * bar)
*/
int16_t lv_bar_get_min_value(const lv_obj_t * bar)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
return ext->min_value;
}
@@ -286,19 +336,22 @@ int16_t lv_bar_get_min_value(const lv_obj_t * bar)
*/
int16_t lv_bar_get_max_value(const lv_obj_t * bar)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
return ext->max_value;
}
/**
- * Get whether the bar is symmetric or not.
- * @param bar pointer to a bar object
- * @return true: symmetric is enabled; false: disable
+ * Get the type of bar.
+ * @param bar pointer to bar object
+ * @return bar type
*/
-bool lv_bar_get_sym(lv_obj_t * bar)
-{
+lv_bar_type_t lv_bar_get_type(lv_obj_t * bar) {
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- return ext->sym ? true : false;
+ return ext->type;
}
/**
@@ -306,8 +359,10 @@ bool lv_bar_get_sym(lv_obj_t * bar)
* @param bar pointer to a bar object
* @return the animation time in milliseconds.
*/
-uint16_t lv_bar_get_anim_time(lv_obj_t * bar)
+uint16_t lv_bar_get_anim_time(const lv_obj_t * bar)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
return ext->anim_time;
@@ -325,6 +380,8 @@ uint16_t lv_bar_get_anim_time(lv_obj_t * bar)
*/
const lv_style_t * lv_bar_get_style(const lv_obj_t * bar, lv_bar_style_t type)
{
+ LV_ASSERT_OBJ(bar, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
@@ -344,141 +401,217 @@ const lv_style_t * lv_bar_get_style(const lv_obj_t * bar, lv_bar_style_t type)
/**
* Handle the drawing related tasks of the bars
* @param bar pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_bar_design(lv_obj_t * bar, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_bar_design(lv_obj_t * bar, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
/*Return false if the object is not covers the mask area*/
- return ancestor_design_f(bar, mask, mode);
+ return ancestor_design_f(bar, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_MAIN) {
lv_opa_t opa_scale = lv_obj_get_opa_scale(bar);
-#if LV_USE_GROUP == 0
- ancestor_design_f(bar, mask, mode);
-#else
- /* Draw the borders later if the bar is focused.
- * At value = 100% the indicator can cover to whole background and the focused style won't
- * be visible*/
- if(lv_obj_is_focused(bar)) {
- const lv_style_t * style_bg = lv_bar_get_style(bar, LV_BAR_STYLE_BG);
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style_bg);
- style_tmp.body.border.width = 0;
- lv_draw_rect(&bar->coords, mask, &style_tmp, opa_scale);
- } else {
- ancestor_design_f(bar, mask, mode);
- }
-#endif
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
+ draw_bg(bar, clip_area, mode, opa_scale);
+ draw_indic(bar, clip_area, mode, opa_scale);
- if(ext->cur_value != ext->min_value || ext->sym
-#if LV_USE_ANIMATION
- || ext->anim_start != LV_BAR_ANIM_STATE_INV
-#endif
- ) {
- const lv_style_t * style_indic = lv_bar_get_style(bar, LV_BAR_STYLE_INDIC);
- lv_area_t indic_area;
- lv_area_copy(&indic_area, &bar->coords);
- indic_area.x1 += style_indic->body.padding.left;
- indic_area.x2 -= style_indic->body.padding.right;
- indic_area.y1 += style_indic->body.padding.top;
- indic_area.y2 -= style_indic->body.padding.bottom;
-
- lv_coord_t w = lv_area_get_width(&indic_area);
- lv_coord_t h = lv_area_get_height(&indic_area);
-
- if(w >= h) {
- /*Horizontal*/
-#if LV_USE_ANIMATION
- if(ext->anim_state != LV_BAR_ANIM_STATE_INV) {
- /*Calculate the coordinates of anim. start and end*/
- lv_coord_t anim_start_x =
- (int32_t)((int32_t)w * (ext->anim_start - ext->min_value)) / (ext->max_value - ext->min_value);
- lv_coord_t anim_end_x =
- (int32_t)((int32_t)w * (ext->anim_end - ext->min_value)) / (ext->max_value - ext->min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- indic_area.x2 =
- anim_start_x + (((anim_end_x - anim_start_x) * ext->anim_state) >> LV_BAR_ANIM_STATE_NORM);
- } else
-#endif
- {
- indic_area.x2 =
- (int32_t)((int32_t)w * (ext->cur_value - ext->min_value)) / (ext->max_value - ext->min_value);
- }
-
- indic_area.x2 = indic_area.x1 + indic_area.x2 - 1;
- if(ext->sym && ext->min_value < 0 && ext->max_value > 0) {
- /*Calculate the coordinate of the zero point*/
- lv_coord_t zero;
- zero = indic_area.x1 + (-ext->min_value * w) / (ext->max_value - ext->min_value);
- if(indic_area.x2 > zero)
- indic_area.x1 = zero;
- else {
- indic_area.x1 = indic_area.x2;
- indic_area.x2 = zero;
- }
- }
- } else {
-#if LV_USE_ANIMATION
- if(ext->anim_state != LV_BAR_ANIM_STATE_INV) {
- /*Calculate the coordinates of anim. start and end*/
- lv_coord_t anim_start_y =
- (int32_t)((int32_t)h * (ext->anim_start - ext->min_value)) / (ext->max_value - ext->min_value);
- lv_coord_t anim_end_y =
- (int32_t)((int32_t)h * (ext->anim_end - ext->min_value)) / (ext->max_value - ext->min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- indic_area.y1 =
- anim_start_y + (((anim_end_y - anim_start_y) * ext->anim_state) >> LV_BAR_ANIM_STATE_NORM);
- } else
-#endif
- {
- indic_area.y1 =
- (int32_t)((int32_t)h * (ext->cur_value - ext->min_value)) / (ext->max_value - ext->min_value);
- }
-
- indic_area.y1 = indic_area.y2 - indic_area.y1 + 1;
-
- if(ext->sym && ext->min_value < 0 && ext->max_value > 0) {
- /*Calculate the coordinate of the zero point*/
- lv_coord_t zero;
- zero = indic_area.y2 - (-ext->min_value * h) / (ext->max_value - ext->min_value);
- if(indic_area.y1 < zero)
- indic_area.y2 = zero;
- else {
- indic_area.y2 = indic_area.y1;
- indic_area.y1 = zero;
- }
- }
- }
-
- /*Draw the indicator*/
- lv_draw_rect(&indic_area, mask, style_indic, opa_scale);
- }
- } else if(mode == LV_DESIGN_DRAW_POST) {
#if LV_USE_GROUP
/*Draw the border*/
if(lv_obj_is_focused(bar)) {
- lv_opa_t opa_scale = lv_obj_get_opa_scale(bar);
const lv_style_t * style_bg = lv_bar_get_style(bar, LV_BAR_STYLE_BG);
lv_style_t style_tmp;
lv_style_copy(&style_tmp, style_bg);
style_tmp.body.opa = LV_OPA_TRANSP;
style_tmp.body.shadow.width = 0;
- lv_draw_rect(&bar->coords, mask, &style_tmp, opa_scale);
+ lv_draw_rect(&bar->coords, clip_area, &style_tmp, opa_scale);
}
#endif
+
+ } else if(mode == LV_DESIGN_DRAW_POST) {
+
}
- return true;
+ return LV_DESIGN_RES_OK;
+}
+
+static void draw_bg(lv_obj_t * bar, const lv_area_t * clip_area, lv_design_mode_t mode, lv_opa_t opa)
+{
+
+ const lv_style_t * style_bg = lv_bar_get_style(bar, LV_BAR_STYLE_BG);
+#if LV_USE_GROUP == 0
+ /*Simply draw the background*/
+ lv_draw_rect(&bar->coords, clip_area, style_bg, opa);
+#else
+ /* Draw the borders later if the bar is focused.
+ * At value = 100% the indicator can cover to whole background and the focused style won't
+ * be visible*/
+ if(lv_obj_is_focused(bar)) {
+ lv_style_t style_tmp;
+ lv_style_copy(&style_tmp, style_bg);
+ style_tmp.body.border.width = 0;
+ lv_draw_rect(&bar->coords, clip_area, &style_tmp, opa);
+ } else {
+ lv_draw_rect(&bar->coords, clip_area, style_bg, opa);
+ }
+#endif
+}
+
+static void draw_indic(lv_obj_t * bar, const lv_area_t * clip_area, lv_design_mode_t mode, lv_opa_t opa)
+{
+ (void) mode; /*Unused*/
+
+ lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
+
+ lv_coord_t objw = lv_obj_get_width(bar);
+ lv_coord_t objh = lv_obj_get_height(bar);
+ int32_t range = ext->max_value - ext->min_value;
+ bool hor = objw >= objh ? true : false;
+ bool sym = false;
+ if(ext->type == LV_BAR_TYPE_SYM && ext->min_value < 0 && ext->max_value > 0) sym = true;
+
+ bool cur_value_anim = false;
+#if LV_USE_ANIMATION
+ if(ext->cur_value_anim.is_animating) cur_value_anim = true;
+#endif
+ bool start_value_anim = false;
+#if LV_USE_ANIMATION
+ if(ext->start_value_anim.is_animating) start_value_anim = true;
+#endif
+
+ /*Calculate the indicator area*/
+ lv_area_copy(&ext->indic_area, &bar->coords);
+ const lv_style_t * style_indic = lv_bar_get_style(bar, LV_BAR_STYLE_INDIC);
+ const lv_style_t * style_bg = lv_bar_get_style(bar, LV_BAR_STYLE_BG);
+
+ /*Respect padding and minimum width/height too*/
+ ext->indic_area.x1 += style_indic->body.padding.left;
+ ext->indic_area.x2 -= style_indic->body.padding.right;
+ ext->indic_area.y1 += style_indic->body.padding.top;
+ ext->indic_area.y2 -= style_indic->body.padding.bottom;
+
+ if(hor && lv_area_get_height(&ext->indic_area) < LV_BAR_SIZE_MIN) {
+ ext->indic_area.y1 = bar->coords.y1 + (objh / 2) - (LV_BAR_SIZE_MIN / 2);
+ ext->indic_area.y2 = ext->indic_area.y1 + LV_BAR_SIZE_MIN;
+ } else if(!hor && lv_area_get_width(&ext->indic_area) < LV_BAR_SIZE_MIN) {
+ ext->indic_area.x1 = bar->coords.x1 + (objw / 2) - (LV_BAR_SIZE_MIN / 2);
+ ext->indic_area.x2 = ext->indic_area.x1 + LV_BAR_SIZE_MIN;
+ }
+
+ lv_coord_t indicw = lv_area_get_width(&ext->indic_area);
+ lv_coord_t indich = lv_area_get_height(&ext->indic_area);
+
+ /*Calculate the indicator length*/
+ lv_coord_t indic_length;
+
+ lv_coord_t anim_cur_value, anim_start_value;
+ if(cur_value_anim) {
+#if LV_USE_ANIMATION
+ anim_cur_value = ext->cur_value_anim.anim_val;
+#endif
+ } else {
+ anim_cur_value = ext->cur_value;
+ }
+
+ if(start_value_anim) {
+#if LV_USE_ANIMATION
+ anim_start_value = ext->start_value_anim.anim_val;
+#endif
+ } else {
+ anim_start_value = ext->start_value;
+ }
+
+ indic_length = (int32_t)((int32_t)(hor ? indicw : indich) * ((anim_cur_value - ext->min_value) - (anim_start_value - ext->min_value))) /
+ (ext->max_value - ext->min_value);
+
+ /*Horizontal bar*/
+ if(hor) {
+ ext->indic_area.x2 = ext->indic_area.x1 + indic_length - 1;
+ if(sym) {
+ lv_coord_t zero;
+ zero = ext->indic_area.x1 + (-ext->min_value * indicw) / range;
+ if(ext->indic_area.x2 > zero)
+ ext->indic_area.x1 = zero;
+ else {
+ ext->indic_area.x1 = ext->indic_area.x2;
+ ext->indic_area.x2 = zero;
+ }
+ } else {
+ lv_coord_t increment = (anim_start_value * indicw) / range;
+ ext->indic_area.x1 += increment;
+ ext->indic_area.x2 += increment;
+ }
+ }
+ /*Vertical bar*/
+ else {
+ ext->indic_area.y1 = ext->indic_area.y2 - indic_length + 1;
+ if(sym) {
+ lv_coord_t zero;
+ zero = ext->indic_area.y2 - (-ext->min_value * objh) / range;
+ if(ext->indic_area.y1 < zero)
+ ext->indic_area.y2 = zero;
+ else {
+ ext->indic_area.y2 = ext->indic_area.y1;
+ ext->indic_area.y1 = zero;
+ }
+ } else {
+ lv_coord_t increment = (anim_start_value * objh) / range;
+ ext->indic_area.y1 += increment;
+ ext->indic_area.y2 += increment;
+ }
+ }
+
+ /*Draw the indicator*/
+
+ /*Do not draw a zero length indicator*/
+ if(!sym && indic_length == 0) return;
+
+ lv_style_t style_indic_tmp;
+ lv_style_copy(&style_indic_tmp, style_indic);
+ uint16_t bg_radius = style_bg->body.radius;
+ lv_coord_t short_side = LV_MATH_MIN(objw, objh);
+ if(bg_radius > short_side >> 1) bg_radius = short_side >> 1;
+ /*Draw only the shadow*/
+ if((hor && lv_area_get_width(&ext->indic_area) > bg_radius * 2) ||
+ (!hor && lv_area_get_height(&ext->indic_area) > bg_radius * 2)) {
+ style_indic_tmp.body.opa = LV_OPA_TRANSP;
+ style_indic_tmp.body.border.width = 0;
+ lv_draw_rect(&ext->indic_area, clip_area, &style_indic_tmp, opa);
+ }
+
+
+ lv_draw_mask_radius_param_t mask_bg_param;
+ lv_draw_mask_radius_init(&mask_bg_param, &bar->coords, style_bg->body.radius, false);
+ int16_t mask_bg_id = lv_draw_mask_add(&mask_bg_param, NULL);
+
+ /*Draw_only the background*/
+ style_indic_tmp.body.shadow.width = 0;
+ style_indic_tmp.body.opa = style_indic->body.opa;
+
+ /*Get the max possible indicator area. The gradient should be applied on this*/
+ lv_area_t mask_indic_max_area;
+ lv_area_copy(&mask_indic_max_area, &bar->coords);
+ mask_indic_max_area.x1 += style_indic->body.padding.left;
+ mask_indic_max_area.y1 += style_indic->body.padding.top;
+ mask_indic_max_area.x2 -= style_indic->body.padding.right;
+ mask_indic_max_area.y2 -= style_indic->body.padding.bottom;
+
+ /*Create a mask to the current indicator area to see only this part from the whole gradient.*/
+ lv_draw_mask_radius_param_t mask_indic_param;
+ lv_draw_mask_radius_init(&mask_indic_param, &ext->indic_area, style_indic->body.radius, false);
+ int16_t mask_indic_id = lv_draw_mask_add(&mask_indic_param, NULL);
+ lv_draw_rect(&mask_indic_max_area, clip_area, &style_indic_tmp, opa);
+
+ /*Draw the border*/
+ style_indic_tmp.body.border.width = style_indic->body.border.width;
+ style_indic_tmp.body.opa = LV_OPA_TRANSP;
+ lv_draw_rect(&ext->indic_area, clip_area, &style_indic_tmp, opa);
+
+ lv_draw_mask_remove_id(mask_indic_id);
+ lv_draw_mask_remove_id(mask_bg_id);
+
}
/**
@@ -495,36 +628,99 @@ static lv_res_t lv_bar_signal(lv_obj_t * bar, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(bar, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
const lv_style_t * style_indic = lv_bar_get_style(bar, LV_BAR_STYLE_INDIC);
+ const lv_style_t * style_bg = lv_bar_get_style(bar, LV_BAR_STYLE_BG);
+
+ lv_coord_t bg_size = style_bg->body.shadow.width + style_bg->body.shadow.spread;
+ bg_size += LV_MATH_MAX(LV_MATH_ABS(style_bg->body.shadow.offset.x), LV_MATH_ABS(style_bg->body.shadow.offset.y));
+
+ lv_coord_t indic_size = style_indic->body.shadow.width + style_indic->body.shadow.spread;
+ indic_size += LV_MATH_MAX(LV_MATH_ABS(style_indic->body.shadow.offset.x), LV_MATH_ABS(style_indic->body.shadow.offset.y));
+
+ bar->ext_draw_pad = LV_MATH_MAX(bar->ext_draw_pad, bg_size);
+ bar->ext_draw_pad = LV_MATH_MAX(bar->ext_draw_pad, indic_size);
+
if(style_indic->body.shadow.width > bar->ext_draw_pad) bar->ext_draw_pad = style_indic->body.shadow.width;
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_bar";
}
+ if(sign == LV_SIGNAL_CLEANUP) {
+ lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
+ lv_anim_del(&ext->cur_value_anim, NULL);
+ lv_anim_del(&ext->start_value_anim, NULL);
+ }
+
return res;
}
#if LV_USE_ANIMATION
-static void lv_bar_anim(void * bar, lv_anim_value_t value)
+static void lv_bar_anim(lv_bar_anim_t * var, lv_anim_value_t value)
{
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
- ext->anim_state = value;
- lv_obj_invalidate(bar);
+ var->anim_val = value;
+ lv_obj_invalidate(var->bar);
}
static void lv_bar_anim_ready(lv_anim_t * a)
{
- lv_bar_ext_t * ext = lv_obj_get_ext_attr(a->var);
- ext->anim_state = LV_BAR_ANIM_STATE_INV;
- lv_bar_set_value(a->var, ext->anim_end, false);
+ lv_bar_anim_t * var = a->var;
+ lv_bar_ext_t * ext = lv_obj_get_ext_attr(var->bar);
+ var->is_animating = false;
+ if(var == &ext->cur_value_anim)
+ ext->cur_value = var->anim_end;
+ else if(var == &ext->start_value_anim)
+ ext->start_value = var->anim_end;
+ lv_obj_invalidate(var->bar);
}
#endif
+static void lv_bar_set_value_with_anim(lv_obj_t * bar, int16_t new_value, int16_t *value_ptr, lv_bar_anim_t *anim_info, lv_anim_enable_t en) {
+ if(en == LV_ANIM_OFF) {
+ *value_ptr = new_value;
+ lv_obj_invalidate(bar);
+ } else {
+#if LV_USE_ANIMATION
+ lv_bar_ext_t *ext = lv_obj_get_ext_attr(bar);
+ /*No animation in progress -> simply set the values*/
+ if(!anim_info->is_animating) {
+ anim_info->anim_start = *value_ptr;
+ anim_info->anim_end = new_value;
+ }
+ /*Animation in progress. Start from the animation end value*/
+ else {
+ anim_info->anim_start = anim_info->anim_end;
+ anim_info->anim_end = new_value;
+ }
+ /* Stop the previous animation if it exists */
+ lv_anim_del(anim_info, NULL);
+
+ lv_anim_t a;
+ a.var = anim_info;
+ a.start = anim_info->anim_start;
+ a.end = anim_info->anim_end;
+ a.exec_cb = (lv_anim_exec_xcb_t)lv_bar_anim;
+ a.path_cb = lv_anim_path_linear;
+ a.ready_cb = lv_bar_anim_ready;
+ a.act_time = 0;
+ a.time = ext->anim_time;
+ a.playback = 0;
+ a.playback_pause = 0;
+ a.repeat = 0;
+ a.repeat_pause = 0;
+
+ lv_anim_create(&a);
+ anim_info->is_animating = true;
+#endif
+ }
+}
+
+static void lv_bar_init_anim(lv_obj_t * bar, lv_bar_anim_t * bar_anim)
+{
+ bar_anim->bar = bar;
+ bar_anim->anim_start = 0;
+ bar_anim->anim_end = 0;
+ bar_anim->is_animating = false;
+}
+
#endif
diff --git a/src/lv_objx/lv_bar.h b/src/lv_objx/lv_bar.h
index 14c558e7a..86747c43c 100644
--- a/src/lv_objx/lv_bar.h
+++ b/src/lv_objx/lv_bar.h
@@ -31,22 +31,27 @@ extern "C" {
* DEFINES
*********************/
-/** Bar animation start value. (Not the real value of the Bar just indicates process animation)*/
-#define LV_BAR_ANIM_STATE_START 0
-
-/** Bar animation end value. (Not the real value of the Bar just indicates process animation)*/
-#define LV_BAR_ANIM_STATE_END 256
-
-/** Mark no animation is in progress */
-#define LV_BAR_ANIM_STATE_INV -1
-
-/** log2(LV_BAR_ANIM_STATE_END) used to normalize data*/
-#define LV_BAR_ANIM_STATE_NORM 8
-
/**********************
* TYPEDEFS
**********************/
+enum {
+ LV_BAR_TYPE_NORMAL,
+ LV_BAR_TYPE_SYM,
+ LV_BAR_TYPE_CUSTOM
+};
+typedef uint8_t lv_bar_type_t;
+
+#if LV_USE_ANIMATION
+typedef struct {
+ lv_obj_t * bar;
+ lv_anim_value_t anim_start;
+ lv_anim_value_t anim_end;
+ lv_anim_value_t anim_val;
+ uint8_t is_animating : 1;
+} lv_bar_anim_t;
+#endif
+
/** Data of bar*/
typedef struct
{
@@ -56,13 +61,14 @@ typedef struct
int16_t cur_value; /*Current value of the bar*/
int16_t min_value; /*Minimum value of the bar*/
int16_t max_value; /*Maximum value of the bar*/
+ int16_t start_value; /*Start value of the bar*/
+ lv_area_t indic_area; /*Save the indicator area. MIght be used by derived types*/
#if LV_USE_ANIMATION
- lv_anim_value_t anim_start;
- lv_anim_value_t anim_end;
- lv_anim_value_t anim_state;
lv_anim_value_t anim_time;
+ lv_bar_anim_t cur_value_anim;
+ lv_bar_anim_t start_value_anim;
#endif
- uint8_t sym : 1; /*Symmetric: means the center is around zero value*/
+ uint8_t type : 2; /*Type of bar*/
const lv_style_t * style_indic; /*Style of the indicator*/
} lv_bar_ext_t;
@@ -97,6 +103,14 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy);
*/
void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim);
+/**
+ * Set a new start value on the bar
+ * @param bar pointer to a bar object
+ * @param value new start value
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediatelly
+ */
+void lv_bar_set_start_value(lv_obj_t * bar, int16_t start_value, lv_anim_enable_t anim);
+
/**
* Set minimum and the maximum values of a bar
* @param bar pointer to the bar object
@@ -106,12 +120,11 @@ void lv_bar_set_value(lv_obj_t * bar, int16_t value, lv_anim_enable_t anim);
void lv_bar_set_range(lv_obj_t * bar, int16_t min, int16_t max);
/**
- * Make the bar symmetric to zero. The indicator will grow from zero instead of the minimum
- * position.
- * @param bar pointer to a bar object
- * @param en true: enable disable symmetric behavior; false: disable
+ * Set the type of bar.
+ * @param bar pointer to bar object
+ * @param type bar type
*/
-void lv_bar_set_sym(lv_obj_t * bar, bool en);
+void lv_bar_set_type(lv_obj_t * bar, lv_bar_type_t type);
/**
* Set the animation time of the bar
@@ -139,6 +152,13 @@ void lv_bar_set_style(lv_obj_t * bar, lv_bar_style_t type, const lv_style_t * st
*/
int16_t lv_bar_get_value(const lv_obj_t * bar);
+/**
+ * Get the start value of a bar
+ * @param bar pointer to a bar object
+ * @return the start value of the bar
+ */
+int16_t lv_bar_get_start_value(const lv_obj_t * bar);
+
/**
* Get the minimum value of a bar
* @param bar pointer to a bar object
@@ -154,18 +174,18 @@ int16_t lv_bar_get_min_value(const lv_obj_t * bar);
int16_t lv_bar_get_max_value(const lv_obj_t * bar);
/**
- * Get whether the bar is symmetric or not.
- * @param bar pointer to a bar object
- * @return true: symmetric is enabled; false: disable
+ * Get the type of bar.
+ * @param bar pointer to bar object
+ * @return bar type
*/
-bool lv_bar_get_sym(lv_obj_t * bar);
+lv_bar_type_t lv_bar_get_type(lv_obj_t * bar);
/**
* Get the animation time of the bar
* @param bar pointer to a bar object
* @return the animation time in milliseconds.
*/
-uint16_t lv_bar_get_anim_time(lv_obj_t * bar);
+uint16_t lv_bar_get_anim_time(const lv_obj_t * bar);
/**
* Get a style of a bar
diff --git a/src/lv_objx/lv_btn.c b/src/lv_objx/lv_btn.c
index 7ab3e5b25..f26628394 100644
--- a/src/lv_objx/lv_btn.c
+++ b/src/lv_objx/lv_btn.c
@@ -12,6 +12,7 @@
#include
#include "../lv_core/lv_group.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_area.h"
@@ -21,6 +22,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_btn"
#define LV_BTN_INK_VALUE_MAX 256
#define LV_BTN_INK_VALUE_MAX_SHIFT 8
@@ -31,7 +33,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_btn_design(lv_obj_t * btn, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_btn_design(lv_obj_t * btn, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param);
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
@@ -76,7 +78,7 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
lv_obj_t * new_btn;
new_btn = lv_cont_create(par, copy);
- lv_mem_assert(new_btn);
+ LV_ASSERT_MEM(new_btn);
if(new_btn == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_btn);
@@ -84,8 +86,11 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
/*Allocate the extended data*/
lv_btn_ext_t * ext = lv_obj_allocate_ext_attr(new_btn, sizeof(lv_btn_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_btn);
+ return NULL;
+ }
ext->state = LV_BTN_STATE_REL;
@@ -136,7 +141,7 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
ext->ink_wait_time = copy_ext->ink_wait_time;
ext->ink_out_time = copy_ext->ink_out_time;
#endif
- memcpy(ext->styles, copy_ext->styles, sizeof(ext->styles));
+ memcpy((void*) ext->styles, copy_ext->styles, sizeof(ext->styles));
/*Refresh the style with new signal function*/
lv_obj_refresh_style(new_btn);
@@ -158,6 +163,8 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_btn_set_toggle(lv_obj_t * btn, bool tgl)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
ext->toggle = tgl != false ? 1 : 0;
@@ -170,6 +177,8 @@ void lv_btn_set_toggle(lv_obj_t * btn, bool tgl)
*/
void lv_btn_set_state(lv_obj_t * btn, lv_btn_state_t state)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
if(ext->state != state) {
ext->state = state;
@@ -183,6 +192,8 @@ void lv_btn_set_state(lv_obj_t * btn, lv_btn_state_t state)
*/
void lv_btn_toggle(lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
switch(ext->state) {
case LV_BTN_STATE_REL: lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL); break;
@@ -200,6 +211,8 @@ void lv_btn_toggle(lv_obj_t * btn)
*/
void lv_btn_set_ink_in_time(lv_obj_t * btn, uint16_t time)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
ext->ink_in_time = time;
@@ -218,6 +231,8 @@ void lv_btn_set_ink_in_time(lv_obj_t * btn, uint16_t time)
*/
void lv_btn_set_ink_wait_time(lv_obj_t * btn, uint16_t time)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
@@ -237,6 +252,8 @@ void lv_btn_set_ink_wait_time(lv_obj_t * btn, uint16_t time)
*/
void lv_btn_set_ink_out_time(lv_obj_t * btn, uint16_t time)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
ext->ink_out_time = time;
@@ -256,6 +273,8 @@ void lv_btn_set_ink_out_time(lv_obj_t * btn, uint16_t time)
*/
void lv_btn_set_style(lv_obj_t * btn, lv_btn_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
switch(type) {
@@ -281,6 +300,8 @@ void lv_btn_set_style(lv_obj_t * btn, lv_btn_style_t type, const lv_style_t * st
*/
lv_btn_state_t lv_btn_get_state(const lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
return ext->state;
}
@@ -292,6 +313,8 @@ lv_btn_state_t lv_btn_get_state(const lv_obj_t * btn)
*/
bool lv_btn_get_toggle(const lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
return ext->toggle != 0 ? true : false;
@@ -304,6 +327,8 @@ bool lv_btn_get_toggle(const lv_obj_t * btn)
*/
uint16_t lv_btn_get_ink_in_time(const lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
return ext->ink_in_time;
@@ -320,6 +345,8 @@ uint16_t lv_btn_get_ink_in_time(const lv_obj_t * btn)
*/
uint16_t lv_btn_get_ink_wait_time(const lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
return ext->ink_wait_time;
@@ -335,9 +362,11 @@ uint16_t lv_btn_get_ink_wait_time(const lv_obj_t * btn)
*/
uint16_t lv_btn_get_ink_out_time(const lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
- return ext->ink_in_time;
+ return ext->ink_out_time;
#else
(void)btn; /*Unused*/
return 0;
@@ -352,6 +381,8 @@ uint16_t lv_btn_get_ink_out_time(const lv_obj_t * btn)
*/
const lv_style_t * lv_btn_get_style(const lv_obj_t * btn, lv_btn_style_t type)
{
+ LV_ASSERT_OBJ(btn, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
lv_btn_state_t state = lv_btn_get_state(btn);
@@ -392,17 +423,17 @@ const lv_style_t * lv_btn_get_style(const lv_obj_t * btn, lv_btn_style_t type)
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_btn_design(lv_obj_t * btn, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_btn_design(lv_obj_t * btn, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
- return false;
+ return ancestor_design(btn, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_MAIN) {
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
if(btn != ink_obj) {
- ancestor_design(btn, mask, mode);
+ ancestor_design(btn, clip_area, mode);
} else {
lv_opa_t opa_scale = lv_obj_get_opa_scale(btn);
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
@@ -412,7 +443,7 @@ static bool lv_btn_design(lv_obj_t * btn, const lv_area_t * mask, lv_design_mode
lv_style_t style_tmp;
lv_style_copy(&style_tmp, ext->styles[ink_bg_state]);
style_tmp.body.shadow.width = ext->styles[ink_top_state]->body.shadow.width;
- lv_draw_rect(&btn->coords, mask, &style_tmp, opa_scale);
+ lv_draw_rect(&btn->coords, clip_area, &style_tmp, opa_scale);
lv_coord_t w = lv_obj_get_width(btn);
lv_coord_t h = lv_obj_get_height(btn);
@@ -451,22 +482,22 @@ static bool lv_btn_design(lv_obj_t * btn, const lv_area_t * mask, lv_design_mode
style_tmp.body.border.width = 0;
/*Draw the circle*/
- lv_draw_rect(&cir_area, mask, &style_tmp, opa_scale);
+ lv_draw_rect(&cir_area, clip_area, &style_tmp, opa_scale);
} else {
lv_style_t res;
lv_style_copy(&res, ext->styles[ink_bg_state]);
lv_style_mix(ext->styles[ink_bg_state], ext->styles[ink_top_state], &res, ink_act_value);
- lv_draw_rect(&btn->coords, mask, &res, opa_scale);
+ lv_draw_rect(&btn->coords, clip_area, &res, opa_scale);
}
}
#else
- ancestor_design(btn, mask, mode);
+ ancestor_design(btn, clip_area, mode);
#endif
} else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_design(btn, mask, mode);
+ ancestor_design(btn, clip_area, mode);
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -483,6 +514,7 @@ static lv_res_t lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(btn, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
bool tgl = lv_btn_get_toggle(btn);
@@ -634,13 +666,6 @@ static lv_res_t lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param)
ink_obj = NULL;
}
#endif
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_btn";
}
return res;
diff --git a/src/lv_objx/lv_btnm.c b/src/lv_objx/lv_btnm.c
index 3c517d1f3..9b38a70f3 100644
--- a/src/lv_objx/lv_btnm.c
+++ b/src/lv_objx/lv_btnm.c
@@ -9,6 +9,7 @@
#include "lv_btnm.h"
#if LV_USE_BTNM != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_core/lv_group.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_core/lv_refr.h"
@@ -18,6 +19,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_btnm"
/**********************
* TYPEDEFS
@@ -27,7 +29,7 @@
* STATIC PROTOTYPES
**********************/
static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param);
-static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_btnm_design(lv_obj_t * btnm, const lv_area_t * clip_area, lv_design_mode_t mode);
static uint8_t get_button_width(lv_btnm_ctrl_t ctrl_bits);
static bool button_is_hidden(lv_btnm_ctrl_t ctrl_bits);
static bool button_is_repeat_disabled(lv_btnm_ctrl_t ctrl_bits);
@@ -70,15 +72,18 @@ lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor object*/
lv_obj_t * new_btnm = lv_obj_create(par, copy);
- lv_mem_assert(new_btnm);
+ LV_ASSERT_MEM(new_btnm);
if(new_btnm == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_btnm);
/*Allocate the object type specific extended data*/
lv_btnm_ext_t * ext = lv_obj_allocate_ext_attr(new_btnm, sizeof(lv_btnm_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_btnm);
+ return NULL;
+ }
ext->btn_cnt = 0;
ext->btn_id_pr = LV_BTNM_BTN_NONE;
@@ -101,8 +106,8 @@ lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy)
/*Init the new button matrix object*/
if(copy == NULL) {
- lv_obj_set_size(new_btnm, LV_DPI * 3, LV_DPI * 2);
lv_btnm_set_map(new_btnm, lv_btnm_def_map);
+ lv_obj_set_size(new_btnm, LV_DPI * 3, LV_DPI * 2);
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
@@ -120,7 +125,7 @@ lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy)
/*Copy an existing object*/
else {
lv_btnm_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
- memcpy(ext->styles_btn, copy_ext->styles_btn, sizeof(ext->styles_btn));
+ memcpy((void*)ext->styles_btn, copy_ext->styles_btn, sizeof(ext->styles_btn));
lv_btnm_set_map(new_btnm, lv_btnm_get_map_array(copy));
}
@@ -142,7 +147,8 @@ lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[])
{
- if(map == NULL) return;
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+ LV_ASSERT_NULL(map);
/*
* lv_btnm_set_map is called on receipt of signals such as
@@ -204,6 +210,8 @@ void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[])
btn_h = lv_obj_get_height(btnm)- act_y - style_bg->body.padding.bottom - 1;
}
+ lv_bidi_dir_t base_dir = lv_obj_get_base_dir(btnm);
+
/*Only deal with the non empty lines*/
if(btn_cnt != 0) {
/*Calculate the width of all units*/
@@ -211,7 +219,8 @@ void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[])
/*Set the button size and positions and set the texts*/
uint16_t i;
- lv_coord_t act_x = style_bg->body.padding.left;
+ lv_coord_t act_x;
+
lv_coord_t act_unit_w;
unit_act_cnt = 0;
for(i = 0; i < btn_cnt; i++) {
@@ -222,9 +231,13 @@ void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[])
act_unit_w--; /*-1 because e.g. width = 100 means 101 pixels (0..100)*/
/*Always recalculate act_x because of rounding errors */
- act_x = (unit_act_cnt * all_unit_w) / unit_cnt + i * style_bg->body.padding.inner +
- style_bg->body.padding.left;
-
+ if(base_dir == LV_BIDI_DIR_RTL) {
+ act_x = (unit_act_cnt * all_unit_w) / unit_cnt + i * style_bg->body.padding.inner;
+ act_x = lv_obj_get_width(btnm) - style_bg->body.padding.right - act_x - act_unit_w - 1;
+ } else {
+ act_x = (unit_act_cnt * all_unit_w) / unit_cnt + i * style_bg->body.padding.inner +
+ style_bg->body.padding.left;
+ }
/* Set the button's area.
* If inner padding is zero then use the prev. button x2 as x1 to avoid rounding
* errors*/
@@ -265,6 +278,8 @@ void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[])
*/
void lv_btnm_set_ctrl_map(const lv_obj_t * btnm, const lv_btnm_ctrl_t ctrl_map[])
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
memcpy(ext->ctrl_bits, ctrl_map, sizeof(lv_btnm_ctrl_t) * ext->btn_cnt);
@@ -279,6 +294,8 @@ void lv_btnm_set_ctrl_map(const lv_obj_t * btnm, const lv_btnm_ctrl_t ctrl_map[]
*/
void lv_btnm_set_pressed(const lv_obj_t * btnm, uint16_t id)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
if(id >= ext->btn_cnt && id != LV_BTNM_BTN_NONE) return;
@@ -297,6 +314,8 @@ void lv_btnm_set_pressed(const lv_obj_t * btnm, uint16_t id)
*/
void lv_btnm_set_style(lv_obj_t * btnm, lv_btnm_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
switch(type) {
@@ -331,6 +350,8 @@ void lv_btnm_set_style(lv_obj_t * btnm, lv_btnm_style_t type, const lv_style_t *
*/
void lv_btnm_set_recolor(const lv_obj_t * btnm, bool en)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
ext->recolor = en;
@@ -344,6 +365,8 @@ void lv_btnm_set_recolor(const lv_obj_t * btnm, bool en)
*/
void lv_btnm_set_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
if(btn_id >= ext->btn_cnt) return;
@@ -359,6 +382,8 @@ void lv_btnm_set_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t
*/
void lv_btnm_clear_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
if(btn_id >= ext->btn_cnt) return;
@@ -374,6 +399,8 @@ void lv_btnm_clear_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl
*/
void lv_btnm_set_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
uint16_t i;
for(i = 0; i < ext->btn_cnt; i++) {
@@ -389,6 +416,8 @@ void lv_btnm_set_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl)
*/
void lv_btnm_clear_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
uint16_t i;
for(i = 0; i < ext->btn_cnt; i++) {
@@ -407,6 +436,8 @@ void lv_btnm_clear_btn_ctrl_all(lv_obj_t * btnm, lv_btnm_ctrl_t ctrl)
*/
void lv_btnm_set_btn_width(const lv_obj_t * btnm, uint16_t btn_id, uint8_t width)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
if(btn_id >= ext->btn_cnt) return;
@@ -427,6 +458,8 @@ void lv_btnm_set_btn_width(const lv_obj_t * btnm, uint16_t btn_id, uint8_t width
*/
void lv_btnm_set_one_toggle(lv_obj_t * btnm, bool one_toggle)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
ext->one_toggle = one_toggle;
@@ -445,6 +478,8 @@ void lv_btnm_set_one_toggle(lv_obj_t * btnm, bool one_toggle)
*/
const char ** lv_btnm_get_map_array(const lv_obj_t * btnm)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
return ext->map_p;
}
@@ -456,6 +491,8 @@ const char ** lv_btnm_get_map_array(const lv_obj_t * btnm)
*/
bool lv_btnm_get_recolor(const lv_obj_t * btnm)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
return ext->recolor;
@@ -469,6 +506,8 @@ bool lv_btnm_get_recolor(const lv_obj_t * btnm)
*/
uint16_t lv_btnm_get_active_btn(const lv_obj_t * btnm)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
return ext->btn_id_act;
}
@@ -481,6 +520,8 @@ uint16_t lv_btnm_get_active_btn(const lv_obj_t * btnm)
*/
const char * lv_btnm_get_active_btn_text(const lv_obj_t * btnm)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
if(ext->btn_id_act != LV_BTNM_BTN_NONE) {
return lv_btnm_get_btn_text(btnm, ext->btn_id_act);
@@ -497,6 +538,8 @@ const char * lv_btnm_get_active_btn_text(const lv_obj_t * btnm)
*/
uint16_t lv_btnm_get_pressed_btn(const lv_obj_t * btnm)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
return ext->btn_id_pr;
}
@@ -510,6 +553,8 @@ uint16_t lv_btnm_get_pressed_btn(const lv_obj_t * btnm)
*/
const char * lv_btnm_get_btn_text(const lv_obj_t * btnm, uint16_t btn_id)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
if(btn_id > ext->btn_cnt) return NULL;
@@ -539,6 +584,8 @@ const char * lv_btnm_get_btn_text(const lv_obj_t * btnm, uint16_t btn_id)
*/
bool lv_btnm_get_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
if(btn_id >= ext->btn_cnt) return false;
@@ -553,6 +600,8 @@ bool lv_btnm_get_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl)
*/
const lv_style_t * lv_btnm_get_style(const lv_obj_t * btnm, lv_btnm_style_t type)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
@@ -576,6 +625,8 @@ const lv_style_t * lv_btnm_get_style(const lv_obj_t * btnm, lv_btnm_style_t type
*/
bool lv_btnm_get_one_toggle(const lv_obj_t * btnm)
{
+ LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
+
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
return ext->one_toggle;
@@ -588,23 +639,21 @@ bool lv_btnm_get_one_toggle(const lv_obj_t * btnm)
/**
* Handle the drawing related tasks of the button matrixs
* @param btnm pointer to a button matrix object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_btnm_design(lv_obj_t * btnm, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design_f(btnm, mask, mode);
- /*Return false if the object is not covers the mask_p area*/
+ return ancestor_design_f(btnm, clip_area, mode);
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
-
- ancestor_design_f(btnm, mask, mode);
+ ancestor_design_f(btnm, clip_area, mode);
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
const lv_style_t * bg_style = lv_obj_get_style(btnm);
@@ -624,7 +673,6 @@ static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mo
lv_txt_flag_t txt_flag = LV_TXT_FLAG_NONE;
if(ext->recolor) txt_flag = LV_TXT_FLAG_RECOLOR;
-
for(btn_i = 0; btn_i < ext->btn_cnt; btn_i++, txt_i++) {
/*Search the next valid text in the map*/
while(strcmp(ext->map_p[txt_i], "\n") == 0) {
@@ -661,25 +709,25 @@ static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mo
lv_style_copy(&style_tmp, btn_style);
/*Remove borders on the edges if `LV_BORDER_INTERNAL`*/
- if(style_tmp.body.border.part & LV_BORDER_INTERNAL) {
+ if(style_tmp.body.border.part & LV_BORDER_PART_INTERNAL) {
if(area_tmp.y1 == btnm->coords.y1 + bg_style->body.padding.top) {
- style_tmp.body.border.part &= ~LV_BORDER_TOP;
+ style_tmp.body.border.part &= ~LV_BORDER_PART_TOP;
}
if(area_tmp.y2 == btnm->coords.y2 - bg_style->body.padding.bottom) {
- style_tmp.body.border.part &= ~LV_BORDER_BOTTOM;
+ style_tmp.body.border.part &= ~LV_BORDER_PART_BOTTOM;
}
if(txt_i == 0) {
- style_tmp.body.border.part &= ~LV_BORDER_LEFT;
+ style_tmp.body.border.part &= ~LV_BORDER_PART_LEFT;
} else if(strcmp(ext->map_p[txt_i - 1], "\n") == 0) {
- style_tmp.body.border.part &= ~LV_BORDER_LEFT;
+ style_tmp.body.border.part &= ~LV_BORDER_PART_LEFT;
}
if(ext->map_p[txt_i + 1][0] == '\0' || strcmp(ext->map_p[txt_i + 1], "\n") == 0) {
- style_tmp.body.border.part &= ~LV_BORDER_RIGHT;
+ style_tmp.body.border.part &= ~LV_BORDER_PART_RIGHT;
}
}
- lv_draw_rect(&area_tmp, mask, &style_tmp, opa_scale);
+ lv_draw_rect(&area_tmp, clip_area, &style_tmp, opa_scale);
/*Calculate the size of the text*/
if(btn_style->glass) btn_style = bg_style;
@@ -693,10 +741,10 @@ static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mo
area_tmp.x2 = area_tmp.x1 + txt_size.x;
area_tmp.y2 = area_tmp.y1 + txt_size.y;
- lv_draw_label(&area_tmp, mask, btn_style, opa_scale, ext->map_p[txt_i], txt_flag, NULL, -1, -1, NULL);
+ lv_draw_label(&area_tmp, clip_area, btn_style, opa_scale, ext->map_p[txt_i], txt_flag, NULL, NULL, NULL, lv_obj_get_base_dir(btnm));
}
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -713,6 +761,7 @@ static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(btnm, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm);
lv_point_t p;
@@ -813,6 +862,12 @@ static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param)
#if LV_USE_GROUP
lv_indev_t * indev = lv_indev_get_act();
lv_indev_type_t indev_type = lv_indev_get_type(indev);
+
+ /*If not focused by an input device assume the last input device*/
+ if(indev_type == LV_INDEV_TYPE_NONE) {
+ indev_type = lv_indev_get_type(lv_indev_get_next(NULL));
+ }
+
if(indev_type == LV_INDEV_TYPE_POINTER) {
/*Select the clicked button*/
lv_point_t p1;
@@ -897,15 +952,7 @@ static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param)
} else if(sign == LV_SIGNAL_GET_EDITABLE) {
bool * editable = (bool *)param;
*editable = true;
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_btnm";
}
-
return res;
}
@@ -938,9 +985,9 @@ static void allocate_btn_areas_and_controls(const lv_obj_t * btnm, const char **
}
ext->button_areas = lv_mem_alloc(sizeof(lv_area_t) * btn_cnt);
- lv_mem_assert(ext->button_areas);
+ LV_ASSERT_MEM(ext->button_areas);
ext->ctrl_bits = lv_mem_alloc(sizeof(lv_btnm_ctrl_t) * btn_cnt);
- lv_mem_assert(ext->ctrl_bits);
+ LV_ASSERT_MEM(ext->ctrl_bits);
if(ext->button_areas == NULL || ext->ctrl_bits == NULL) btn_cnt = 0;
memset(ext->ctrl_bits, 0, sizeof(lv_btnm_ctrl_t) * btn_cnt);
diff --git a/src/lv_objx/lv_btnm.h b/src/lv_objx/lv_btnm.h
index bedcdf436..44bc4efbb 100644
--- a/src/lv_objx/lv_btnm.h
+++ b/src/lv_objx/lv_btnm.h
@@ -31,6 +31,8 @@ extern "C" {
#define LV_BTNM_WIDTH_MASK 0x0007
#define LV_BTNM_BTN_NONE 0xFFFF
+LV_EXPORT_CONST_INT(LV_BTNM_BTN_NONE);
+
/**********************
* TYPEDEFS
**********************/
diff --git a/src/lv_objx/lv_calendar.c b/src/lv_objx/lv_calendar.c
index 36baea3dc..1dd83464f 100644
--- a/src/lv_objx/lv_calendar.c
+++ b/src/lv_objx/lv_calendar.c
@@ -9,6 +9,7 @@
#include "lv_calendar.h"
#if LV_USE_CALENDAR != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_hal/lv_hal_indev.h"
#include "../lv_misc/lv_utils.h"
@@ -19,6 +20,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_calendar"
/**********************
* TYPEDEFS
@@ -33,7 +35,7 @@ typedef uint8_t day_draw_state_t;
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_calendar_design(lv_obj_t * calendar, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_calendar_design(lv_obj_t * calendar, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_calendar_signal(lv_obj_t * calendar, lv_signal_t sign, void * param);
static bool calculate_touched_day(lv_obj_t * calendar, const lv_point_t * touched_point);
static lv_coord_t get_header_height(lv_obj_t * calendar);
@@ -77,13 +79,17 @@ lv_obj_t * lv_calendar_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of calendar*/
lv_obj_t * new_calendar = lv_obj_create(par, copy);
- lv_mem_assert(new_calendar);
+ LV_ASSERT_MEM(new_calendar);
if(new_calendar == NULL) return NULL;
/*Allocate the calendar type specific extended data*/
lv_calendar_ext_t * ext = lv_obj_allocate_ext_attr(new_calendar, sizeof(lv_calendar_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_calendar);
+ return NULL;
+ }
+
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_calendar);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_calendar);
@@ -195,6 +201,9 @@ lv_obj_t * lv_calendar_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_calendar_set_today_date(lv_obj_t * calendar, lv_calendar_date_t * today)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+ LV_ASSERT_NULL(today);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
ext->today.year = today->year;
ext->today.month = today->month;
@@ -211,6 +220,9 @@ void lv_calendar_set_today_date(lv_obj_t * calendar, lv_calendar_date_t * today)
*/
void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t * showed)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+ LV_ASSERT_NULL(showed);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
ext->showed_date.year = showed->year;
ext->showed_date.month = showed->month;
@@ -226,8 +238,11 @@ void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t * showe
* WILL BE SAVED! CAN'T BE LOCAL ARRAY.
* @param date_num number of dates in the array
*/
-void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t * highlighted, uint16_t date_num)
+void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t highlighted[], uint16_t date_num)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+ LV_ASSERT_NULL(highlighted);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
ext->highlighted_dates = highlighted;
ext->highlighted_dates_num = date_num;
@@ -244,6 +259,9 @@ void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t *
*/
void lv_calendar_set_day_names(lv_obj_t * calendar, const char ** day_names)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+ LV_ASSERT_NULL(day_names);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
ext->day_names = day_names;
lv_obj_invalidate(calendar);
@@ -252,14 +270,17 @@ void lv_calendar_set_day_names(lv_obj_t * calendar, const char ** day_names)
/**
* Set the name of the month
* @param calendar pointer to a calendar object
- * @param day_names pointer to an array with the names. E.g. `const char * days[12] = {"Jan", "Feb",
+ * @param month_names pointer to an array with the names. E.g. `const char * days[12] = {"Jan", "Feb",
* ...}` Only the pointer will be saved so this variable can't be local which will be destroyed
* later.
*/
-void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** day_names)
+void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** month_names)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+ LV_ASSERT_NULL(month_names);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
- ext->month_names = day_names;
+ ext->month_names = month_names;
lv_obj_invalidate(calendar);
}
@@ -271,6 +292,8 @@ void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** day_names)
* */
void lv_calendar_set_style(lv_obj_t * calendar, lv_calendar_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
switch(type) {
@@ -298,6 +321,8 @@ void lv_calendar_set_style(lv_obj_t * calendar, lv_calendar_style_t type, const
*/
lv_calendar_date_t * lv_calendar_get_today_date(const lv_obj_t * calendar)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
return &ext->today;
}
@@ -309,6 +334,8 @@ lv_calendar_date_t * lv_calendar_get_today_date(const lv_obj_t * calendar)
*/
lv_calendar_date_t * lv_calendar_get_showed_date(const lv_obj_t * calendar)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
return &ext->showed_date;
}
@@ -321,6 +348,8 @@ lv_calendar_date_t * lv_calendar_get_showed_date(const lv_obj_t * calendar)
*/
lv_calendar_date_t * lv_calendar_get_pressed_date(const lv_obj_t * calendar)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
return ext->pressed_date.year != 0 ? &ext->pressed_date : NULL;
}
@@ -332,6 +361,8 @@ lv_calendar_date_t * lv_calendar_get_pressed_date(const lv_obj_t * calendar)
*/
lv_calendar_date_t * lv_calendar_get_highlighted_dates(const lv_obj_t * calendar)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
return ext->highlighted_dates;
}
@@ -343,6 +374,8 @@ lv_calendar_date_t * lv_calendar_get_highlighted_dates(const lv_obj_t * calendar
*/
uint16_t lv_calendar_get_highlighted_dates_num(const lv_obj_t * calendar)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
return ext->highlighted_dates_num;
}
@@ -354,6 +387,8 @@ uint16_t lv_calendar_get_highlighted_dates_num(const lv_obj_t * calendar)
*/
const char ** lv_calendar_get_day_names(const lv_obj_t * calendar)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
return ext->day_names;
}
@@ -365,6 +400,8 @@ const char ** lv_calendar_get_day_names(const lv_obj_t * calendar)
*/
const char ** lv_calendar_get_month_names(const lv_obj_t * calendar)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
return ext->month_names;
}
@@ -377,6 +414,8 @@ const char ** lv_calendar_get_month_names(const lv_obj_t * calendar)
* */
const lv_style_t * lv_calendar_get_style(const lv_obj_t * calendar, lv_calendar_style_t type)
{
+ LV_ASSERT_OBJ(calendar, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
@@ -410,34 +449,34 @@ const lv_style_t * lv_calendar_get_style(const lv_obj_t * calendar, lv_calendar_
/**
* Handle the drawing related tasks of the calendars
* @param calendar pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_calendar_design(lv_obj_t * calendar, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_calendar_design(lv_obj_t * calendar, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design(calendar, mask, mode);
+ return ancestor_design(calendar, clip_area, mode);
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
lv_opa_t opa_scale = lv_obj_get_opa_scale(calendar);
- lv_draw_rect(&calendar->coords, mask, lv_calendar_get_style(calendar, LV_CALENDAR_STYLE_BG), opa_scale);
+ lv_draw_rect(&calendar->coords, clip_area, lv_calendar_get_style(calendar, LV_CALENDAR_STYLE_BG), opa_scale);
- draw_header(calendar, mask);
- draw_day_names(calendar, mask);
- draw_days(calendar, mask);
+ draw_header(calendar, clip_area);
+ draw_day_names(calendar, clip_area);
+ draw_days(calendar, clip_area);
}
/*Post draw when the children are drawn*/
else if(mode == LV_DESIGN_DRAW_POST) {
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -454,6 +493,7 @@ static lv_res_t lv_calendar_signal(lv_obj_t * calendar, lv_signal_t sign, void *
/* Include the ancient signal function */
res = ancestor_signal(calendar, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
@@ -542,13 +582,6 @@ static lv_res_t lv_calendar_signal(lv_obj_t * calendar, lv_signal_t sign, void *
}
lv_obj_invalidate(calendar);
}
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set date*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_calendar";
}
return res;
@@ -641,6 +674,9 @@ static lv_coord_t get_day_names_height(lv_obj_t * calendar)
static void draw_header(lv_obj_t * calendar, const lv_area_t * mask)
{
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+
+ lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(calendar);
+
lv_opa_t opa_scale = lv_obj_get_opa_scale(calendar);
lv_area_t header_area;
@@ -658,19 +694,19 @@ static void draw_header(lv_obj_t * calendar, const lv_area_t * mask)
txt_buf[5] = '\0';
strcpy(&txt_buf[5], get_month_name(calendar, ext->showed_date.month));
header_area.y1 += ext->style_header->body.padding.top;
- lv_draw_label(&header_area, mask, ext->style_header, opa_scale, txt_buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL);
+ lv_draw_label(&header_area, mask, ext->style_header, opa_scale, txt_buf, LV_TXT_FLAG_CENTER, NULL, NULL, NULL, bidi_dir);
/*Add the left arrow*/
const lv_style_t * arrow_style = ext->btn_pressing < 0 ? ext->style_header_pr : ext->style_header;
header_area.x1 += ext->style_header->body.padding.left;
- lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_LEFT, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL);
+ lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_LEFT, LV_TXT_FLAG_NONE, NULL, NULL, NULL, bidi_dir);
/*Add the right arrow*/
arrow_style = ext->btn_pressing > 0 ? ext->style_header_pr : ext->style_header;
header_area.x1 = header_area.x2 - ext->style_header->body.padding.right -
- lv_txt_get_width(LV_SYMBOL_RIGHT, strlen(LV_SYMBOL_RIGHT), arrow_style->text.font,
+ lv_txt_get_width(LV_SYMBOL_RIGHT, (uint16_t)strlen(LV_SYMBOL_RIGHT), arrow_style->text.font,
arrow_style->text.line_space, LV_TXT_FLAG_NONE);
- lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_RIGHT, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL);
+ lv_draw_label(&header_area, mask, arrow_style, opa_scale, LV_SYMBOL_RIGHT, LV_TXT_FLAG_NONE, NULL, NULL, NULL, bidi_dir);
}
/**
@@ -681,6 +717,7 @@ static void draw_header(lv_obj_t * calendar, const lv_area_t * mask)
static void draw_day_names(lv_obj_t * calendar, const lv_area_t * mask)
{
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+ lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(calendar);
lv_opa_t opa_scale = lv_obj_get_opa_scale(calendar);
lv_coord_t l_pad = ext->style_day_names->body.padding.left;
@@ -695,7 +732,7 @@ static void draw_day_names(lv_obj_t * calendar, const lv_area_t * mask)
label_area.x1 = calendar->coords.x1 + (w * i) / 7 + l_pad;
label_area.x2 = label_area.x1 + box_w - 1;
lv_draw_label(&label_area, mask, ext->style_day_names, opa_scale, get_day_name(calendar, i), LV_TXT_FLAG_CENTER,
- NULL, -1, -1, NULL);
+ NULL, NULL, NULL, bidi_dir);
}
}
@@ -707,6 +744,7 @@ static void draw_day_names(lv_obj_t * calendar, const lv_area_t * mask)
static void draw_days(lv_obj_t * calendar, const lv_area_t * mask)
{
lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar);
+ lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(calendar);
const lv_style_t * style_bg = lv_calendar_get_style(calendar, LV_CALENDAR_STYLE_BG);
lv_area_t label_area;
lv_opa_t opa_scale = lv_obj_get_opa_scale(calendar);
@@ -824,7 +862,7 @@ static void draw_days(lv_obj_t * calendar, const lv_area_t * mask)
/*Write the day's number*/
lv_utils_num_to_str(day_cnt, buf);
- lv_draw_label(&label_area, mask, final_style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL);
+ lv_draw_label(&label_area, mask, final_style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, NULL, NULL, bidi_dir);
/*Go to the next day*/
day_cnt++;
diff --git a/src/lv_objx/lv_calendar.h b/src/lv_objx/lv_calendar.h
index 0ea914843..21317bbd7 100644
--- a/src/lv_objx/lv_calendar.h
+++ b/src/lv_objx/lv_calendar.h
@@ -50,8 +50,8 @@ typedef struct
lv_calendar_date_t showed_date; /*Currently visible month (day is ignored)*/
lv_calendar_date_t * highlighted_dates; /*Apply different style on these days (pointer to an
array defined by the user)*/
- uint8_t highlighted_dates_num; /*Number of elements in `highlighted_days`*/
int8_t btn_pressing; /*-1: prev month pressing, +1 next month pressing on the header*/
+ uint16_t highlighted_dates_num; /*Number of elements in `highlighted_days`*/
lv_calendar_date_t pressed_date;
const char ** day_names; /*Pointer to an array with the name of the days (NULL: use default names)*/
const char ** month_names; /*Pointer to an array with the name of the month (NULL. use default names)*/
@@ -122,7 +122,7 @@ void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t * showe
* WILL BE SAVED! CAN'T BE LOCAL ARRAY.
* @param date_num number of dates in the array
*/
-void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t * highlighted, uint16_t date_num);
+void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t highlighted[], uint16_t date_num);
/**
* Set the name of the days
@@ -136,11 +136,11 @@ void lv_calendar_set_day_names(lv_obj_t * calendar, const char ** day_names);
/**
* Set the name of the month
* @param calendar pointer to a calendar object
- * @param day_names pointer to an array with the names. E.g. `const char * days[12] = {"Jan", "Feb",
+ * @param month_names pointer to an array with the names. E.g. `const char * days[12] = {"Jan", "Feb",
* ...}` Only the pointer will be saved so this variable can't be local which will be destroyed
* later.
*/
-void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** day_names);
+void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** month_names);
/**
* Set a style of a calendar.
diff --git a/src/lv_objx/lv_canvas.c b/src/lv_objx/lv_canvas.c
index da08521a8..4313c865a 100644
--- a/src/lv_objx/lv_canvas.c
+++ b/src/lv_objx/lv_canvas.c
@@ -8,6 +8,7 @@
*********************/
#include
#include "lv_canvas.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_misc/lv_math.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_core/lv_refr.h"
@@ -17,6 +18,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_canvas"
/**********************
* TYPEDEFS
@@ -26,6 +28,25 @@
* STATIC PROTOTYPES
**********************/
static lv_res_t lv_canvas_signal(lv_obj_t * canvas, lv_signal_t sign, void * param);
+static void set_set_px_cb(lv_disp_drv_t * disp_drv, lv_img_cf_t cf);
+
+static void set_px_true_color_alpha(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa);
+
+static void set_px_cb_alpha1(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa);
+
+static void set_px_cb_alpha2(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa);
+
+static void set_px_cb_alpha4(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa);
+
+
+static void set_px_cb_alpha8(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa);
+
+static void set_px_alpha_generic(lv_img_dsc_t * d, lv_coord_t x, lv_coord_t y, lv_color_t color, lv_opa_t opa);
/**********************
* STATIC VARIABLES
@@ -53,13 +74,17 @@ lv_obj_t * lv_canvas_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of canvas*/
lv_obj_t * new_canvas = lv_img_create(par, copy);
- lv_mem_assert(new_canvas);
+ LV_ASSERT_MEM(new_canvas);
if(new_canvas == NULL) return NULL;
/*Allocate the canvas type specific extended data*/
lv_canvas_ext_t * ext = lv_obj_allocate_ext_attr(new_canvas, sizeof(lv_canvas_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_canvas);
+ return NULL;
+ }
+
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_canvas);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_canvas);
@@ -111,13 +136,16 @@ lv_obj_t * lv_canvas_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_canvas_set_buffer(lv_obj_t * canvas, void * buf, lv_coord_t w, lv_coord_t h, lv_img_cf_t cf)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+ LV_ASSERT_NULL(buf);
+
lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
ext->dsc.header.cf = cf;
ext->dsc.header.w = w;
ext->dsc.header.h = h;
ext->dsc.data = buf;
- ext->dsc.data_size = (lv_img_color_format_get_px_size(cf) * w * h) / 8;
+ ext->dsc.data_size = (lv_img_cf_get_px_size(cf) * w * h) / 8;
lv_img_set_src(canvas, &ext->dsc);
}
@@ -131,6 +159,8 @@ void lv_canvas_set_buffer(lv_obj_t * canvas, void * buf, lv_coord_t w, lv_coord_
*/
void lv_canvas_set_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_color_t c)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+
lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
lv_img_buf_set_px_color(&ext->dsc, x, y, c);
@@ -149,6 +179,8 @@ void lv_canvas_set_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_color_t
*/
void lv_canvas_set_palette(lv_obj_t * canvas, uint8_t id, lv_color_t c)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+
lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
lv_img_buf_set_palette(&ext->dsc, id, c);
@@ -163,6 +195,8 @@ void lv_canvas_set_palette(lv_obj_t * canvas, uint8_t id, lv_color_t c)
*/
void lv_canvas_set_style(lv_obj_t * canvas, lv_canvas_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+
switch(type) {
case LV_CANVAS_STYLE_MAIN: lv_img_set_style(canvas, LV_IMG_STYLE_MAIN, style); break;
}
@@ -181,10 +215,14 @@ void lv_canvas_set_style(lv_obj_t * canvas, lv_canvas_style_t type, const lv_sty
*/
lv_color_t lv_canvas_get_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+
lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
const lv_style_t * style = lv_canvas_get_style(canvas, LV_CANVAS_STYLE_MAIN);
- return lv_img_buf_get_px_color(&ext->dsc, x, y, style);
+ if(style == NULL) style = &lv_style_scr;
+
+ return lv_img_buf_get_px_color(&ext->dsc, x, y, style->image.color);
}
/**
@@ -194,6 +232,8 @@ lv_color_t lv_canvas_get_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y)
*/
lv_img_dsc_t * lv_canvas_get_img(lv_obj_t * canvas)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+
lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
return &ext->dsc;
@@ -207,6 +247,8 @@ lv_img_dsc_t * lv_canvas_get_img(lv_obj_t * canvas)
*/
const lv_style_t * lv_canvas_get_style(const lv_obj_t * canvas, lv_canvas_style_t type)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
switch(type) {
@@ -233,13 +275,16 @@ const lv_style_t * lv_canvas_get_style(const lv_obj_t * canvas, lv_canvas_style_
*/
void lv_canvas_copy_buf(lv_obj_t * canvas, const void * to_copy, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+ LV_ASSERT_NULL(to_copy);
+
lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
- if(x + w >= ext->dsc.header.w || y + h >= ext->dsc.header.h) {
+ if(x + w >= (lv_coord_t)ext->dsc.header.w || y + h >= (lv_coord_t)ext->dsc.header.h) {
LV_LOG_WARN("lv_canvas_copy_buf: x or y out of the canvas");
return;
}
- uint32_t px_size = lv_img_color_format_get_px_size(ext->dsc.header.cf) >> 3;
+ uint32_t px_size = lv_img_cf_get_px_size(ext->dsc.header.cf) >> 3;
uint32_t px = ext->dsc.header.w * y * px_size + x * px_size;
uint8_t * to_copy8 = (uint8_t *)to_copy;
lv_coord_t i;
@@ -251,138 +296,68 @@ void lv_canvas_copy_buf(lv_obj_t * canvas, const void * to_copy, lv_coord_t x, l
}
/**
- * Rotate and image and store the result on a canvas.
+ * Transform and image and store the result on a canvas.
* @param canvas pointer to a canvas object
* @param img pointer to an image descriptor.
* Can be the image descriptor of an other canvas too (`lv_canvas_get_img()`).
* @param angle the angle of rotation (0..360);
+ * @param zoom zoom factor (256 no zoom);
* @param offset_x offset X to tell where to put the result data on destination canvas
* @param offset_y offset X to tell where to put the result data on destination canvas
* @param pivot_x pivot X of rotation. Relative to the source canvas
* Set to `source width / 2` to rotate around the center
* @param pivot_y pivot Y of rotation. Relative to the source canvas
* Set to `source height / 2` to rotate around the center
+ * @param antialias apply anti-aliasing during the transformation. Looks better but slower.
*/
-void lv_canvas_rotate(lv_obj_t * canvas, lv_img_dsc_t * img, int16_t angle, lv_coord_t offset_x, lv_coord_t offset_y,
- int32_t pivot_x, int32_t pivot_y)
+void lv_canvas_transform(lv_obj_t * canvas, lv_img_dsc_t * img, int16_t angle, uint16_t zoom, lv_coord_t offset_x, lv_coord_t offset_y,
+ int32_t pivot_x, int32_t pivot_y, bool antialias)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+ LV_ASSERT_NULL(img);
+
lv_canvas_ext_t * ext_dst = lv_obj_get_ext_attr(canvas);
const lv_style_t * style = lv_canvas_get_style(canvas, LV_CANVAS_STYLE_MAIN);
- int32_t sinma = lv_trigo_sin(-angle);
- int32_t cosma = lv_trigo_sin(-angle + 90); /* cos */
- int32_t img_width = img->header.w;
- int32_t img_height = img->header.h;
int32_t dest_width = ext_dst->dsc.header.w;
int32_t dest_height = ext_dst->dsc.header.h;
int32_t x;
int32_t y;
- for(x = -offset_x; x < dest_width - offset_x; x++) {
- for(y = -offset_y; y < dest_height - offset_y; y++) {
- /*Get the target point relative coordinates to the pivot*/
- int32_t xt = x - pivot_x;
- int32_t yt = y - pivot_y;
+ bool ret;
- /*Get the source pixel from the upscaled image*/
- int32_t xs = ((cosma * xt - sinma * yt) >> (LV_TRIGO_SHIFT - 8)) + pivot_x * 256;
- int32_t ys = ((sinma * xt + cosma * yt) >> (LV_TRIGO_SHIFT - 8)) + pivot_y * 256;
+ lv_img_transform_dsc_t dsc;
+ dsc.cfg.angle = angle;
+ dsc.cfg.zoom = zoom;
+ dsc.cfg.src = img->data;
+ dsc.cfg.src_w = img->header.w;
+ dsc.cfg.src_h = img->header.h;
+ dsc.cfg.cf = img->header.cf;
+ dsc.cfg.pivot_x = pivot_x;
+ dsc.cfg.pivot_y = pivot_y;
+ dsc.cfg.color = style->image.color;
+ dsc.cfg.antialias = antialias;
+ lv_img_buf_transform_init(&dsc);
- /*Get the integer part of the source pixel*/
- int xs_int = xs >> 8;
- int ys_int = ys >> 8;
+ for(y = -offset_y; y < dest_height - offset_y; y++) {
+ for(x = -offset_x; x < dest_width - offset_x; x++) {
- if(xs_int >= img_width)
- continue;
- else if(xs_int < 0)
- continue;
+ ret = lv_img_buf_transform(&dsc, x, y);
- if(ys_int >= img_height)
- continue;
- else if(ys_int < 0)
- continue;
-
- /*Get the fractional part of the source pixel*/
- int xs_fract = xs & 0xff;
- int ys_fract = ys & 0xff;
-
- /* If the fractional < 0x70 mix the source pixel with the left/top pixel
- * If the fractional > 0x90 mix the source pixel with the right/bottom pixel
- * In the 0x70..0x90 range use the unchanged source pixel */
-
- int xn; /*x neightboor*/
- lv_opa_t xr; /*x mix ratio*/
- if(xs_fract < 0x70) {
- xn = xs_int - 1;
- xr = xs_fract * 2;
- } else if(xs_fract > 0x90) {
- xn = xs_int + 1;
- xr = (0xFF - xs_fract) * 2;
- } else {
- xn = xs_int;
- xr = 0xFF;
- }
-
- /*Handle under/overflow*/
- if(xn >= img_width)
- continue;
- else if(xn < 0)
- continue;
-
- int yn; /*y neightboor*/
- lv_opa_t yr; /*y mix ratio*/
- if(ys_fract < 0x70) {
- yn = ys_int - 1;
- yr = ys_fract * 2;
- } else if(ys_fract > 0x90) {
- yn = ys_int + 1;
- yr = (0xFF - ys_fract) * 2;
- } else {
- yn = ys_int;
- yr = 0xFF;
- }
-
- /*Handle under/overflow*/
- if(yn >= img_height)
- continue;
- else if(yn < 0)
- continue;
-
- /*Get the mixture of the original source and the neightboor pixels in both directions*/
- lv_color_t c_dest_int = lv_img_buf_get_px_color(img, xs_int, ys_int, style);
-
- if(lv_img_color_format_is_chroma_keyed(img->header.cf)) {
- lv_color_t ct = LV_COLOR_TRANSP;
- if(c_dest_int.full == ct.full) continue;
- }
-
- lv_color_t c_dest_xn = lv_img_buf_get_px_color(img, xn, ys_int, style);
- lv_color_t c_dest_yn = lv_img_buf_get_px_color(img, xs_int, yn, style);
- lv_color_t x_dest = lv_color_mix(c_dest_int, c_dest_xn, xr);
- lv_color_t y_dest = lv_color_mix(c_dest_int, c_dest_yn, yr);
- lv_color_t color_res = lv_color_mix(x_dest, y_dest, LV_OPA_50);
+ if(ret == false) continue;
if(x + offset_x >= 0 && x + offset_x < dest_width && y + offset_y >= 0 && y + offset_y < dest_height) {
/*If the image has no alpha channel just simple set the result color on the canvas*/
- if(lv_img_color_format_has_alpha(img->header.cf) == false) {
- lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, color_res);
+ if(lv_img_cf_has_alpha(img->header.cf) == false) {
+ lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, dsc.res.color);
} else {
- /*Get result pixel opacity*/
- lv_opa_t opa_int = lv_img_buf_get_px_alpha(img, xs_int, ys_int);
- lv_opa_t opa_xn = lv_img_buf_get_px_alpha(img, xn, ys_int);
- lv_opa_t opa_yn = lv_img_buf_get_px_alpha(img, xs_int, yn);
- lv_opa_t opa_x = (opa_int * xr + (opa_xn * (255 - xr))) >> 8;
- lv_opa_t opa_y = (opa_int * yr + (opa_yn * (255 - yr))) >> 8;
- lv_opa_t opa_res = (opa_x + opa_y) / 2;
- if(opa_res <= LV_OPA_MIN) continue;
-
- lv_color_t bg_color = lv_img_buf_get_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, style);
+ lv_color_t bg_color = lv_img_buf_get_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, style->image.color);
/*If the canvas has no alpha but the image has mix the image's color with
* canvas*/
- if(lv_img_color_format_has_alpha(ext_dst->dsc.header.cf) == false) {
- if(opa_res < LV_OPA_MAX) color_res = lv_color_mix(color_res, bg_color, opa_res);
- lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, color_res);
+ if(lv_img_cf_has_alpha(ext_dst->dsc.header.cf) == false) {
+ if(dsc.res.opa < LV_OPA_MAX) dsc.res.color = lv_color_mix(dsc.res.color, bg_color, dsc.res.opa);
+ lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, dsc.res.color);
}
/*Both the image and canvas has alpha channel. Some extra calculation is
required*/
@@ -390,28 +365,28 @@ void lv_canvas_rotate(lv_obj_t * canvas, lv_img_dsc_t * img, int16_t angle, lv_c
lv_opa_t bg_opa = lv_img_buf_get_px_alpha(&ext_dst->dsc, x + offset_x, y + offset_y);
/* Pick the foreground if it's fully opaque or the Background is fully
* transparent*/
- if(opa_res >= LV_OPA_MAX || bg_opa <= LV_OPA_MIN) {
- lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, color_res);
- lv_img_buf_set_px_alpha(&ext_dst->dsc, x + offset_x, y + offset_y, opa_res);
+ if(dsc.res.opa >= LV_OPA_MAX || bg_opa <= LV_OPA_MIN) {
+ lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y, dsc.res.color);
+ lv_img_buf_set_px_alpha(&ext_dst->dsc, x + offset_x, y + offset_y, dsc.res.opa);
}
/*Opaque background: use simple mix*/
else if(bg_opa >= LV_OPA_MAX) {
lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y,
- lv_color_mix(color_res, bg_color, opa_res));
+ lv_color_mix(dsc.res.color, bg_color, dsc.res.opa));
}
/*Both colors have alpha. Expensive calculation need to be applied*/
else {
/*Info:
* https://en.wikipedia.org/wiki/Alpha_compositing#Analytical_derivation_of_the_over_operator*/
- lv_opa_t opa_res_2 = 255 - ((uint16_t)((uint16_t)(255 - opa_res) * (255 - bg_opa)) >> 8);
+ lv_opa_t opa_res_2 = 255 - ((uint16_t)((uint16_t)(255 - dsc.res.opa) * (255 - bg_opa)) >> 8);
if(opa_res_2 == 0) {
opa_res_2 = 1; /*never happens, just to be sure*/
}
- lv_opa_t ratio = (uint16_t)((uint16_t)opa_res * 255) / opa_res_2;
+ lv_opa_t ratio = (uint16_t)((uint16_t)dsc.res.opa * 255) / opa_res_2;
lv_img_buf_set_px_color(&ext_dst->dsc, x + offset_x, y + offset_y,
- lv_color_mix(color_res, bg_color, ratio));
+ lv_color_mix(dsc.res.color, bg_color, ratio));
lv_img_buf_set_px_alpha(&ext_dst->dsc, x + offset_x, y + offset_y, opa_res_2);
}
}
@@ -423,13 +398,289 @@ void lv_canvas_rotate(lv_obj_t * canvas, lv_img_dsc_t * img, int16_t angle, lv_c
lv_obj_invalidate(canvas);
}
+
+/**
+ * Apply horizontal blur on the canvas
+ * @param canvas pointer to a canvas object
+ * @param area the area to blur. If `NULL` the whole canvas will be blurred.
+ * @param r radius of the blur
+ */
+void lv_canvas_blur_hor(lv_obj_t * canvas, const lv_area_t * area, uint16_t r)
+{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+
+ if(r == 0) return;
+
+ lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
+
+ lv_area_t a;
+ if(area) {
+ lv_area_copy(&a, area);
+ if(a.x1 < 0) a.x1 = 0;
+ if(a.y1 < 0) a.y1 = 0;
+ if(a.x2 > ext->dsc.header.w - 1) a.x2 = ext->dsc.header.w - 1;
+ if(a.y2 > ext->dsc.header.h - 1) a.y2 = ext->dsc.header.h - 1;
+ } else {
+ a.x1 = 0;
+ a.y1 = 0;
+ a.x2 = ext->dsc.header.w - 1;
+ a.y2 = ext->dsc.header.h - 1;
+ }
+
+ const lv_style_t * style = lv_canvas_get_style(canvas, LV_CANVAS_STYLE_MAIN);
+
+ uint16_t r_back = r / 2;
+ uint16_t r_front = r / 2;
+
+ if((r & 0x1) == 0) r_back--;
+
+ bool has_alpha = lv_img_cf_has_alpha(ext->dsc.header.cf);
+
+ lv_coord_t line_w = lv_img_buf_get_img_size(ext->dsc.header.w, 1, ext->dsc.header.cf);
+ uint8_t * line_buf = lv_mem_buf_get(line_w);
+
+ lv_img_dsc_t line_img;
+ line_img.data = line_buf;
+ line_img.header.always_zero = 0;
+ line_img.header.w = ext->dsc.header.w;
+ line_img.header.h = 1;
+ line_img.header.cf = ext->dsc.header.cf;
+
+ lv_coord_t x;
+ lv_coord_t y;
+ lv_coord_t x_safe;
+
+ for(y = a.y1; y <= a.y2; y++) {
+ uint32_t asum = 0;
+ uint32_t rsum = 0;
+ uint32_t gsum = 0;
+ uint32_t bsum = 0;
+
+ lv_color_t c;
+ lv_opa_t opa = LV_OPA_TRANSP;
+ memcpy(line_buf, &ext->dsc.data[y * line_w], line_w);
+
+
+ for(x = a.x1 -r_back; x <= a.x1 + r_front; x++) {
+ x_safe = x < 0 ? 0 : x;
+ x_safe = x_safe > ext->dsc.header.w - 1 ? ext->dsc.header.w - 1 : x_safe;
+
+ c = lv_img_buf_get_px_color(&line_img, x_safe, 0, style->image.color);
+ if(has_alpha) opa = lv_img_buf_get_px_alpha(&line_img, x_safe, 0);
+
+ rsum += c.ch.red;
+#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP
+ gsum += (c.ch.green_h << 3) + c.ch.green_l;
+#else
+ gsum += c.ch.green;
+#endif
+ bsum += c.ch.blue;
+ if(has_alpha) asum += opa;
+ }
+
+ /*Just to indicate that the px is visible*/
+ if(has_alpha == false) asum = LV_OPA_COVER;
+
+ for(x = a.x1; x <= a.x2; x++) {
+
+ if(asum) {
+ c.ch.red = rsum / r;
+#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP
+ uint8_t gtmp = gsum / r;
+ c.ch.green_h = gtmp >> 3;
+ c.ch.green_l = gtmp & 0x7;
+#else
+ c.ch.green = gsum / r;
+#endif
+ c.ch.blue = bsum / r;
+ if(has_alpha) opa = asum / r;
+
+ lv_img_buf_set_px_color(&ext->dsc, x, y, c);
+ }
+ if(has_alpha) lv_img_buf_set_px_alpha(&ext->dsc, x, y, opa);
+
+ x_safe = x - r_back;
+ x_safe = x_safe < 0 ? 0 : x_safe;
+ c = lv_img_buf_get_px_color(&line_img, x_safe, 0, style->image.color);
+ if(has_alpha) opa = lv_img_buf_get_px_alpha(&line_img, x_safe, 0);
+
+ rsum -= c.ch.red;
+#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP
+ gsum -= (c.ch.green_h << 3) + c.ch.green_l;
+#else
+ gsum -= c.ch.green;
+#endif
+ bsum -= c.ch.blue;
+ if(has_alpha) asum -= opa;
+
+ x_safe = x + 1 + r_front;
+ x_safe = x_safe > ext->dsc.header.w - 1 ? ext->dsc.header.w - 1 : x_safe;
+ c = lv_img_buf_get_px_color(&line_img, x_safe, 0, LV_COLOR_RED);
+ if(has_alpha) opa = lv_img_buf_get_px_alpha(&line_img, x_safe, 0);
+
+ rsum += c.ch.red;
+#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP
+ gsum += (c.ch.green_h << 3) + c.ch.green_l;
+#else
+ gsum += c.ch.green;
+#endif
+ bsum += c.ch.blue;
+ if(has_alpha) asum += opa;
+ }
+ }
+ lv_obj_invalidate(canvas);
+
+ lv_mem_buf_release(line_buf);
+}
+
+
+/**
+ * Apply vertical blur on the canvas
+ * @param canvas pointer to a canvas object
+ * @param area the area to blur. If `NULL` the whole canvas will be blurred.
+ * @param r radius of the blur
+ */
+void lv_canvas_blur_ver(lv_obj_t * canvas, const lv_area_t * area, uint16_t r)
+{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+
+ if(r == 0) return;
+
+ lv_canvas_ext_t * ext = lv_obj_get_ext_attr(canvas);
+
+ lv_area_t a;
+ if(area) {
+ lv_area_copy(&a, area);
+ if(a.x1 < 0) a.x1 = 0;
+ if(a.y1 < 0) a.y1 = 0;
+ if(a.x2 > ext->dsc.header.w - 1) a.x2 = ext->dsc.header.w - 1;
+ if(a.y2 > ext->dsc.header.h - 1) a.y2 = ext->dsc.header.h - 1;
+ } else {
+ a.x1 = 0;
+ a.y1 = 0;
+ a.x2 = ext->dsc.header.w - 1;
+ a.y2 = ext->dsc.header.h - 1;
+ }
+
+ const lv_style_t * style = lv_canvas_get_style(canvas, LV_CANVAS_STYLE_MAIN);
+
+ uint16_t r_back = r / 2;
+ uint16_t r_front = r / 2;
+
+ if((r & 0x1) == 0) r_back--;
+
+ bool has_alpha = lv_img_cf_has_alpha(ext->dsc.header.cf);
+ lv_coord_t col_w = lv_img_buf_get_img_size(1, ext->dsc.header.h, ext->dsc.header.cf);
+ uint8_t * col_buf = lv_mem_buf_get(col_w);
+ lv_img_dsc_t line_img;
+
+ line_img.data = col_buf;
+ line_img.header.always_zero = 0;
+ line_img.header.w = 1;
+ line_img.header.h = ext->dsc.header.h;
+ line_img.header.cf = ext->dsc.header.cf;
+
+ lv_coord_t x;
+ lv_coord_t y;
+ lv_coord_t y_safe;
+
+ for(x = a.x1; x <= a.x2; x++) {
+ uint32_t asum = 0;
+ uint32_t rsum = 0;
+ uint32_t gsum = 0;
+ uint32_t bsum = 0;
+
+ lv_color_t c;
+ lv_opa_t opa = LV_OPA_COVER;
+
+ for(y = a.y1 -r_back; y <= a.y1 + r_front; y++) {
+ y_safe = y < 0 ? 0 : y;
+ y_safe = y_safe > ext->dsc.header.h - 1 ? ext->dsc.header.h - 1 : y_safe;
+
+ c = lv_img_buf_get_px_color(&ext->dsc, x, y_safe, style->image.color);
+ if(has_alpha) opa = lv_img_buf_get_px_alpha(&ext->dsc, x, y_safe);
+
+ lv_img_buf_set_px_color(&line_img, 0, y_safe, c);
+ if(has_alpha) lv_img_buf_set_px_alpha(&line_img, 0, y_safe, opa);
+
+ rsum += c.ch.red;
+#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP
+ gsum += (c.ch.green_h << 3) + c.ch.green_l;
+#else
+ gsum += c.ch.green;
+#endif
+ bsum += c.ch.blue;
+ if(has_alpha) asum += opa;
+ }
+
+ /*Just to indicate that the px is visible*/
+ if(has_alpha == false) asum = LV_OPA_COVER;
+
+ for(y = a.y1; y <= a.y2; y++) {
+ if(asum) {
+ c.ch.red = rsum / r;
+#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP
+ uint8_t gtmp = gsum / r;
+ c.ch.green_h = gtmp >> 3;
+ c.ch.green_l = gtmp & 0x7;
+#else
+ c.ch.green = gsum / r;
+#endif
+ c.ch.blue = bsum / r;
+ if(has_alpha) opa = asum / r;
+
+ lv_img_buf_set_px_color(&ext->dsc, x, y, c);
+ }
+ if(has_alpha) lv_img_buf_set_px_alpha(&ext->dsc, x, y, opa);
+
+ y_safe = y - r_back;
+ y_safe = y_safe < 0 ? 0 : y_safe;
+ c = lv_img_buf_get_px_color(&line_img, 0, y_safe, style->image.color);
+ if(has_alpha) opa = lv_img_buf_get_px_alpha(&line_img, 0, y_safe);
+
+ rsum -= c.ch.red;
+#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP
+ gsum -= (c.ch.green_h << 3) + c.ch.green_l;
+#else
+ gsum -= c.ch.green;
+#endif
+ bsum -= c.ch.blue;
+ if(has_alpha) asum -= opa;
+
+ y_safe = y + 1 + r_front;
+ y_safe = y_safe > ext->dsc.header.h - 1 ? ext->dsc.header.h - 1 : y_safe;
+
+ c = lv_img_buf_get_px_color(&ext->dsc, x, y_safe, style->image.color);
+ if(has_alpha) opa = lv_img_buf_get_px_alpha(&ext->dsc, x, y_safe);
+
+ lv_img_buf_set_px_color(&line_img, 0, y_safe, c);
+ if(has_alpha) lv_img_buf_set_px_alpha(&line_img, 0, y_safe, opa);
+
+ rsum += c.ch.red;
+#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP
+ gsum += (c.ch.green_h << 3) + c.ch.green_l;
+#else
+ gsum += c.ch.green;
+#endif
+ bsum += c.ch.blue;
+ if(has_alpha) asum += opa;
+ }
+ }
+
+ lv_obj_invalidate(canvas);
+
+ lv_mem_buf_release(col_buf);
+}
+
/**
* Fill the canvas with color
* @param canvas pointer to a canvas
* @param color the background color
*/
-void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color)
+void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color, lv_opa_t opa)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+
lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
uint32_t x = dsc->header.w * dsc->header.h;
@@ -437,6 +688,7 @@ void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color)
for(y = 0; y < dsc->header.h; y++) {
for(x = 0; x < dsc->header.w; x++) {
lv_img_buf_set_px_color(dsc, x, y, color);
+ lv_img_buf_set_px_alpha(dsc, x, y, opa);
}
}
}
@@ -453,8 +705,16 @@ void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color)
void lv_canvas_draw_rect(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_t w, lv_coord_t h,
const lv_style_t * style)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+ LV_ASSERT_NULL(style);
+
lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
+ if(dsc->header.cf >= LV_IMG_CF_INDEXED_1BIT && dsc->header.cf <= LV_IMG_CF_INDEXED_8BIT) {
+ LV_LOG_WARN("lv_canvas_draw_rect: can't raw to LV_IMG_CF_INDEXED canvas");
+ return;
+ }
+
/* Create a dummy display to fool the lv_draw function.
* It will think it draws to real screen. */
lv_area_t mask;
@@ -482,7 +742,10 @@ void lv_canvas_draw_rect(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord
disp.driver.hor_res = dsc->header.w;
disp.driver.ver_res = dsc->header.h;
+ set_set_px_cb(&disp.driver, dsc->header.cf);
+
#if LV_ANTIALIAS
+
/*Disable anti-aliasing if drawing with transparent color to chroma keyed canvas*/
lv_color_t ctransp = LV_COLOR_TRANSP;
if(dsc->header.cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED &&
@@ -514,8 +777,16 @@ void lv_canvas_draw_rect(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord
void lv_canvas_draw_text(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_t max_w, const lv_style_t * style,
const char * txt, lv_label_align_t align)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+ LV_ASSERT_NULL(style);
+
lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
+ if(dsc->header.cf >= LV_IMG_CF_INDEXED_1BIT && dsc->header.cf <= LV_IMG_CF_INDEXED_8BIT) {
+ LV_LOG_WARN("lv_canvas_draw_text: can't raw to LV_IMG_CF_INDEXED canvas");
+ return;
+ }
+
/* Create a dummy display to fool the lv_draw function.
* It will think it draws to real screen. */
lv_area_t mask;
@@ -543,6 +814,8 @@ void lv_canvas_draw_text(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord
disp.driver.hor_res = dsc->header.w;
disp.driver.ver_res = dsc->header.h;
+ set_set_px_cb(&disp.driver, dsc->header.cf);
+
lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
lv_refr_set_disp_refreshing(&disp);
@@ -554,8 +827,7 @@ void lv_canvas_draw_text(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord
default: flag = LV_TXT_FLAG_NONE; break;
}
- lv_draw_label(&coords, &mask, style, LV_OPA_COVER, txt, flag, NULL, LV_LABEL_TEXT_SEL_OFF, LV_LABEL_TEXT_SEL_OFF,
- NULL);
+ lv_draw_label(&coords, &mask, style, LV_OPA_COVER, txt, flag, NULL, NULL, NULL, lv_obj_get_base_dir(canvas));
lv_refr_set_disp_refreshing(refr_ori);
}
@@ -568,8 +840,16 @@ void lv_canvas_draw_text(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord
*/
void lv_canvas_draw_img(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, const void * src, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+ LV_ASSERT_NULL(style);
+
lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
+ if(dsc->header.cf >= LV_IMG_CF_INDEXED_1BIT && dsc->header.cf <= LV_IMG_CF_INDEXED_8BIT) {
+ LV_LOG_WARN("lv_canvas_draw_img: can't raw to LV_IMG_CF_INDEXED canvas");
+ return;
+ }
+
/* Create a dummy display to fool the lv_draw function.
* It will think it draws to real screen. */
lv_area_t mask;
@@ -604,10 +884,12 @@ void lv_canvas_draw_img(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, const voi
disp.driver.hor_res = dsc->header.w;
disp.driver.ver_res = dsc->header.h;
+ set_set_px_cb(&disp.driver, dsc->header.cf);
+
lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
lv_refr_set_disp_refreshing(&disp);
- lv_draw_img(&coords, &mask, src, style, LV_OPA_COVER);
+ lv_draw_img(&coords, &mask, src, style, 0, NULL, LV_IMG_ZOOM_NONE, false, LV_OPA_COVER);
lv_refr_set_disp_refreshing(refr_ori);
}
@@ -621,8 +903,15 @@ void lv_canvas_draw_img(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, const voi
*/
void lv_canvas_draw_line(lv_obj_t * canvas, const lv_point_t * points, uint32_t point_cnt, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+ LV_ASSERT_NULL(style);
+
lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
+ if(dsc->header.cf >= LV_IMG_CF_INDEXED_1BIT && dsc->header.cf <= LV_IMG_CF_INDEXED_8BIT) {
+ LV_LOG_WARN("lv_canvas_draw_line: can't raw to LV_IMG_CF_INDEXED canvas");
+ return;
+ }
/* Create a dummy display to fool the lv_draw function.
* It will think it draws to real screen. */
lv_area_t mask;
@@ -644,6 +933,8 @@ void lv_canvas_draw_line(lv_obj_t * canvas, const lv_point_t * points, uint32_t
disp.driver.hor_res = dsc->header.w;
disp.driver.ver_res = dsc->header.h;
+ set_set_px_cb(&disp.driver, dsc->header.cf);
+
#if LV_ANTIALIAS
/*Disable anti-aliasing if drawing with transparent color to chroma keyed canvas*/
lv_color_t ctransp = LV_COLOR_TRANSP;
@@ -658,11 +949,37 @@ void lv_canvas_draw_line(lv_obj_t * canvas, const lv_point_t * points, uint32_t
lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
lv_refr_set_disp_refreshing(&disp);
+ lv_style_t circle_style_tmp; /*If rounded...*/
+ if(style->line.rounded) {
+ lv_style_copy(&circle_style_tmp, style);
+ circle_style_tmp.body.radius = LV_RADIUS_CIRCLE;
+ circle_style_tmp.body.main_color = style->line.color;
+ circle_style_tmp.body.grad_color = style->line.color;
+ circle_style_tmp.body.opa = style->line.opa;
+ }
+ lv_area_t circle_area;
uint32_t i;
for(i = 0; i < point_cnt - 1; i++) {
lv_draw_line(&points[i], &points[i + 1], &mask, style, LV_OPA_COVER);
+
+ /*Draw circle on the joints if enabled*/
+ if(style->line.rounded) {
+ circle_area.x1 = points[i].x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
+ circle_area.y1 = points[i].y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
+ circle_area.x2 = points[i].x + ((style->line.width - 1) >> 1);
+ circle_area.y2 = points[i].y + ((style->line.width - 1) >> 1);
+ lv_draw_rect(&circle_area, &mask, &circle_style_tmp, LV_OPA_COVER);
+ }
}
-
+ /*Draw circle on the last point too if enabled*/
+ if(style->line.rounded) {
+ circle_area.x1 = points[i].x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
+ circle_area.y1 = points[i].y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
+ circle_area.x2 = points[i].x + ((style->line.width - 1) >> 1);
+ circle_area.y2 = points[i].y + ((style->line.width - 1) >> 1);
+ lv_draw_rect(&circle_area, &mask, &circle_style_tmp, LV_OPA_COVER);
+ }
+
lv_refr_set_disp_refreshing(refr_ori);
}
@@ -675,8 +992,16 @@ void lv_canvas_draw_line(lv_obj_t * canvas, const lv_point_t * points, uint32_t
*/
void lv_canvas_draw_polygon(lv_obj_t * canvas, const lv_point_t * points, uint32_t point_cnt, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+ LV_ASSERT_NULL(style);
+
lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
+ if(dsc->header.cf >= LV_IMG_CF_INDEXED_1BIT && dsc->header.cf <= LV_IMG_CF_INDEXED_8BIT) {
+ LV_LOG_WARN("lv_canvas_draw_polygon: can't raw to LV_IMG_CF_INDEXED canvas");
+ return;
+ }
+
/* Create a dummy display to fool the lv_draw function.
* It will think it draws to real screen. */
lv_area_t mask;
@@ -698,6 +1023,8 @@ void lv_canvas_draw_polygon(lv_obj_t * canvas, const lv_point_t * points, uint32
disp.driver.hor_res = dsc->header.w;
disp.driver.ver_res = dsc->header.h;
+ set_set_px_cb(&disp.driver, dsc->header.cf);
+
#if LV_ANTIALIAS
/*Disable anti-aliasing if drawing with transparent color to chroma keyed canvas*/
lv_color_t ctransp = LV_COLOR_TRANSP;
@@ -730,8 +1057,16 @@ void lv_canvas_draw_polygon(lv_obj_t * canvas, const lv_point_t * points, uint32
void lv_canvas_draw_arc(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_t r, int32_t start_angle,
int32_t end_angle, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(canvas, LV_OBJX_NAME);
+ LV_ASSERT_NULL(style);
+
lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
+ if(dsc->header.cf >= LV_IMG_CF_INDEXED_1BIT && dsc->header.cf <= LV_IMG_CF_INDEXED_8BIT) {
+ LV_LOG_WARN("lv_canvas_draw_arc: can't raw to LV_IMG_CF_INDEXED canvas");
+ return;
+ }
+
/* Create a dummy display to fool the lv_draw function.
* It will think it draws to real screen. */
lv_area_t mask;
@@ -753,6 +1088,8 @@ void lv_canvas_draw_arc(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_
disp.driver.hor_res = dsc->header.w;
disp.driver.ver_res = dsc->header.h;
+ set_set_px_cb(&disp.driver, dsc->header.cf);
+
#if LV_ANTIALIAS
/*Disable anti-aliasing if drawing with transparent color to chroma keyed canvas*/
lv_color_t ctransp = LV_COLOR_TRANSP;
@@ -790,19 +1127,122 @@ static lv_res_t lv_canvas_signal(lv_obj_t * canvas, lv_signal_t sign, void * par
/* Include the ancient signal function */
res = ancestor_signal(canvas, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_canvas";
}
return res;
}
+static void set_set_px_cb(lv_disp_drv_t * disp_drv, lv_img_cf_t cf)
+{
+ switch(cf) {
+ case LV_IMG_CF_TRUE_COLOR_ALPHA: disp_drv->set_px_cb = set_px_true_color_alpha; break;
+ case LV_IMG_CF_ALPHA_1BIT: disp_drv->set_px_cb = set_px_cb_alpha1; break;
+ case LV_IMG_CF_ALPHA_2BIT: disp_drv->set_px_cb = set_px_cb_alpha2; break;
+ case LV_IMG_CF_ALPHA_4BIT: disp_drv->set_px_cb = set_px_cb_alpha4; break;
+ case LV_IMG_CF_ALPHA_8BIT: disp_drv->set_px_cb = set_px_cb_alpha8; break;
+ default: disp_drv->set_px_cb = NULL;
+ }
+}
+
+static void set_px_cb_alpha1(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa)
+{
+ (void) disp_drv; /*Unused*/
+
+ if(opa <= LV_OPA_MIN) return;
+ lv_img_dsc_t d;
+ d.data = buf;
+ d.header.w = buf_w;
+ d.header.cf = LV_IMG_CF_ALPHA_1BIT;
+
+ set_px_alpha_generic(&d, x, y, color, opa);
+}
+
+static void set_px_cb_alpha2(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa)
+{
+ (void) disp_drv; /*Unused*/
+
+ if(opa <= LV_OPA_MIN) return;
+ lv_img_dsc_t d;
+ d.data = buf;
+ d.header.w = buf_w;
+ d.header.cf = LV_IMG_CF_ALPHA_2BIT;
+
+ set_px_alpha_generic(&d, x, y, color, opa);
+}
+
+static void set_px_cb_alpha4(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa)
+{
+ (void) disp_drv; /*Unused*/
+
+ if(opa <= LV_OPA_MIN) return;
+ lv_img_dsc_t d;
+ d.data = buf;
+ d.header.w = buf_w;
+ d.header.cf = LV_IMG_CF_ALPHA_4BIT;
+
+ set_px_alpha_generic(&d, x, y, color, opa);
+}
+
+static void set_px_cb_alpha8(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa)
+{
+ (void) disp_drv; /*Unused*/
+
+ if(opa <= LV_OPA_MIN) return;
+ lv_img_dsc_t d;
+ d.data = buf;
+ d.header.w = buf_w;
+ d.header.cf = LV_IMG_CF_ALPHA_8BIT;
+
+ set_px_alpha_generic(&d, x, y, color, opa);
+}
+
+static void set_px_alpha_generic(lv_img_dsc_t * d, lv_coord_t x, lv_coord_t y, lv_color_t color, lv_opa_t opa)
+{
+ d->header.always_zero = 0;
+ d->header.h = LV_VER_RES_MAX;
+
+ uint8_t br = lv_color_brightness(color);
+ if(opa < LV_OPA_MAX) {
+ uint8_t bg = lv_img_buf_get_px_alpha(d, x, y);
+ br = (uint16_t)((uint16_t)br * opa + (bg * (255 - opa))) >> 8;
+ }
+
+ lv_img_buf_set_px_alpha(d, x, y, br);
+}
+
+
+static void set_px_true_color_alpha(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
+ lv_color_t color, lv_opa_t opa)
+{
+ (void) disp_drv; /*Unused*/
+
+ if(opa <= LV_OPA_MIN) return;
+ lv_img_dsc_t d;
+ d.data = buf;
+ d.header.always_zero = 0;
+ d.header.h = LV_VER_RES_MAX;
+ d.header.w = buf_w;
+ d.header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA;
+
+ lv_color_t bg_color = lv_img_buf_get_px_color(&d, x, y, LV_COLOR_BLACK);
+ lv_opa_t bg_opa = lv_img_buf_get_px_alpha(&d, x, y);
+
+ lv_opa_t res_opa;
+ lv_color_t res_color;
+
+ lv_color_mix_with_alpha(bg_color, bg_opa, color, opa, &res_color, &res_opa);
+
+
+ lv_img_buf_set_px_alpha(&d, x, y, res_opa);
+ lv_img_buf_set_px_color(&d, x, y, res_color);
+}
+
#endif
diff --git a/src/lv_objx/lv_canvas.h b/src/lv_objx/lv_canvas.h
index 1d59d44d6..9a648e5c1 100644
--- a/src/lv_objx/lv_canvas.h
+++ b/src/lv_objx/lv_canvas.h
@@ -23,6 +23,7 @@ extern "C" {
#include "../lv_core/lv_obj.h"
#include "../lv_objx/lv_img.h"
+#include "../lv_draw/lv_draw_img.h"
/*********************
* DEFINES
@@ -150,27 +151,46 @@ void lv_canvas_copy_buf(lv_obj_t * canvas, const void * to_copy, lv_coord_t x, l
lv_coord_t h);
/**
- * Rotate and image and store the result on a canvas.
+ * Transform and image and store the result on a canvas.
* @param canvas pointer to a canvas object
* @param img pointer to an image descriptor.
* Can be the image descriptor of an other canvas too (`lv_canvas_get_img()`).
* @param angle the angle of rotation (0..360);
+ * @param zoom zoom factor (256 no zoom);
* @param offset_x offset X to tell where to put the result data on destination canvas
* @param offset_y offset X to tell where to put the result data on destination canvas
* @param pivot_x pivot X of rotation. Relative to the source canvas
* Set to `source width / 2` to rotate around the center
* @param pivot_y pivot Y of rotation. Relative to the source canvas
* Set to `source height / 2` to rotate around the center
+ * @param antialias apply anti-aliasing during the transformation. Looks better but slower.
*/
-void lv_canvas_rotate(lv_obj_t * canvas, lv_img_dsc_t * img, int16_t angle, lv_coord_t offset_x, lv_coord_t offset_y,
- int32_t pivot_x, int32_t pivot_y);
+void lv_canvas_transform(lv_obj_t * canvas, lv_img_dsc_t * img, int16_t angle, uint16_t zoom, lv_coord_t offset_x, lv_coord_t offset_y,
+ int32_t pivot_x, int32_t pivot_y, bool antialias);
+
+
+
+/**
+ * Apply horizontal blur on the canvas
+ * @param canvas pointer to a canvas object
+ * @param r radius of the blur
+ */
+void lv_canvas_blur_hor(lv_obj_t * canvas, const lv_area_t * area, uint16_t r);
+
+/**
+ * Apply vertical blur on the canvas
+ * @param canvas pointer to a canvas object
+ * @param area the area to blur. If `NULL` the whole canvas will be blurred.
+ * @param r radius of the blur
+ */
+void lv_canvas_blur_ver(lv_obj_t * canvas, const lv_area_t * area, uint16_t r);
/**
* Fill the canvas with color
* @param canvas pointer to a canvas
* @param color the background color
*/
-void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color);
+void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color, lv_opa_t opa);
/**
* Draw a rectangle on the canvas
@@ -239,21 +259,21 @@ void lv_canvas_draw_arc(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_coord_
/**********************
* MACROS
**********************/
-#define LV_CANVAS_BUF_SIZE_TRUE_COLOR(w, h) ((LV_COLOR_SIZE / 8) * w * h)
-#define LV_CANVAS_BUF_SIZE_TRUE_COLOR_CHROMA_KEYED(w, h) ((LV_COLOR_SIZE / 8) * w * h)
-#define LV_CANVAS_BUF_SIZE_TRUE_COLOR_ALPHA(w, h) (LV_IMG_PX_SIZE_ALPHA_BYTE * w * h)
+#define LV_CANVAS_BUF_SIZE_TRUE_COLOR(w, h) LV_IMG_BUF_SIZE_TRUE_COLOR(w, h)
+#define LV_CANVAS_BUF_SIZE_TRUE_COLOR_CHROMA_KEYED(w, h) LV_IMG_BUF_SIZE_TRUE_COLOR_CHROMA_KEYED(w, h)
+#define LV_CANVAS_BUF_SIZE_TRUE_COLOR_ALPHA(w, h) LV_IMG_BUF_SIZE_TRUE_COLOR_ALPHA(w, h)
/*+ 1: to be sure no fractional row*/
-#define LV_CANVAS_BUF_SIZE_ALPHA_1BIT(w, h) ((((w / 8) + 1) * h))
-#define LV_CANVAS_BUF_SIZE_ALPHA_2BIT(w, h) ((((w / 4) + 1) * h))
-#define LV_CANVAS_BUF_SIZE_ALPHA_4BIT(w, h) ((((w / 2) + 1) * h))
-#define LV_CANVAS_BUF_SIZE_ALPHA_8BIT(w, h) ((w * h))
+#define LV_CANVAS_BUF_SIZE_ALPHA_1BIT(w, h) LV_IMG_BUF_SIZE_ALPHA_1BIT(w, h)
+#define LV_CANVAS_BUF_SIZE_ALPHA_2BIT(w, h) LV_IMG_BUF_SIZE_ALPHA_2BIT(w, h)
+#define LV_CANVAS_BUF_SIZE_ALPHA_4BIT(w, h) LV_IMG_BUF_SIZE_ALPHA_4BIT(w, h)
+#define LV_CANVAS_BUF_SIZE_ALPHA_8BIT(w, h) LV_IMG_BUF_SIZE_ALPHA_8BIT(w, h)
/*4 * X: for palette*/
-#define LV_CANVAS_BUF_SIZE_INDEXED_1BIT(w, h) (LV_CANVAS_BUF_SIZE_ALPHA_1BIT(w, h) + 4 * 2)
-#define LV_CANVAS_BUF_SIZE_INDEXED_2BIT(w, h) (LV_CANVAS_BUF_SIZE_ALPHA_2BIT(w, h) + 4 * 4)
-#define LV_CANVAS_BUF_SIZE_INDEXED_4BIT(w, h) (LV_CANVAS_BUF_SIZE_ALPHA_4BIT(w, h) + 4 * 16)
-#define LV_CANVAS_BUF_SIZE_INDEXED_8BIT(w, h) (LV_CANVAS_BUF_SIZE_ALPHA_8BIT(w, h) + 4 * 256)
+#define LV_CANVAS_BUF_SIZE_INDEXED_1BIT(w, h) LV_IMG_BUF_SIZE_INDEXED_1BIT(w, h)
+#define LV_CANVAS_BUF_SIZE_INDEXED_2BIT(w, h) LV_IMG_BUF_SIZE_INDEXED_2BIT(w, h)
+#define LV_CANVAS_BUF_SIZE_INDEXED_4BIT(w, h) LV_IMG_BUF_SIZE_INDEXED_4BIT(w, h)
+#define LV_CANVAS_BUF_SIZE_INDEXED_8BIT(w, h) LV_IMG_BUF_SIZE_INDEXED_8BIT(w, h)
#endif /*LV_USE_CANVAS*/
diff --git a/src/lv_objx/lv_cb.c b/src/lv_objx/lv_cb.c
index ef76f2242..383c9c8a5 100644
--- a/src/lv_objx/lv_cb.c
+++ b/src/lv_objx/lv_cb.c
@@ -9,12 +9,14 @@
#include "lv_cb.h"
#if LV_USE_CB != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_core/lv_group.h"
#include "../lv_themes/lv_theme.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_cb"
/**********************
* TYPEDEFS
@@ -23,8 +25,8 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_cb_design(lv_obj_t * cb, const lv_area_t * mask, lv_design_mode_t mode);
-static bool lv_bullet_design(lv_obj_t * bullet, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_cb_design(lv_obj_t * cb, const lv_area_t * clip_area, lv_design_mode_t mode);
+static lv_design_res_t lv_bullet_design(lv_obj_t * bullet, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param);
/**********************
@@ -55,15 +57,18 @@ lv_obj_t * lv_cb_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor basic object*/
lv_obj_t * new_cb = lv_btn_create(par, copy);
- lv_mem_assert(new_cb);
+ LV_ASSERT_MEM(new_cb);
if(new_cb == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_cb);
if(ancestor_bg_design == NULL) ancestor_bg_design = lv_obj_get_design_cb(new_cb);
lv_cb_ext_t * ext = lv_obj_allocate_ext_attr(new_cb, sizeof(lv_cb_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_cb);
+ return NULL;
+ }
ext->bullet = NULL;
ext->label = NULL;
@@ -126,6 +131,8 @@ lv_obj_t * lv_cb_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_cb_set_text(lv_obj_t * cb, const char * txt)
{
+ LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
+
lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
lv_label_set_text(ext->label, txt);
}
@@ -138,6 +145,8 @@ void lv_cb_set_text(lv_obj_t * cb, const char * txt)
*/
void lv_cb_set_static_text(lv_obj_t * cb, const char * txt)
{
+ LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
+
lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
lv_label_set_static_text(ext->label, txt);
}
@@ -150,6 +159,8 @@ void lv_cb_set_static_text(lv_obj_t * cb, const char * txt)
* */
void lv_cb_set_style(lv_obj_t * cb, lv_cb_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
+
lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
switch(type) {
@@ -179,6 +190,8 @@ void lv_cb_set_style(lv_obj_t * cb, lv_cb_style_t type, const lv_style_t * style
*/
const char * lv_cb_get_text(const lv_obj_t * cb)
{
+ LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
+
lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
return lv_label_get_text(ext->label);
}
@@ -191,10 +204,13 @@ const char * lv_cb_get_text(const lv_obj_t * cb)
* */
const lv_style_t * lv_cb_get_style(const lv_obj_t * cb, lv_cb_style_t type)
{
+ LV_ASSERT_OBJ(cb, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
switch(type) {
+ case LV_CB_STYLE_BG: style = lv_btn_get_style(cb, LV_BTN_STYLE_REL); break;
case LV_CB_STYLE_BOX_REL: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_REL); break;
case LV_CB_STYLE_BOX_PR: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_PR); break;
case LV_CB_STYLE_BOX_TGL_REL: style = lv_btn_get_style(ext->bullet, LV_BTN_STYLE_TGL_REL); break;
@@ -213,20 +229,20 @@ const lv_style_t * lv_cb_get_style(const lv_obj_t * cb, lv_cb_style_t type)
/**
* Handle the drawing related tasks of the check boxes
* @param cb pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_cb_design(lv_obj_t * cb, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_cb_design(lv_obj_t * cb, const lv_area_t * clip_area, lv_design_mode_t mode)
{
bool result = true;
if(mode == LV_DESIGN_COVER_CHK) {
/*Return false if the object is not covers the mask_p area*/
- result = ancestor_bg_design(cb, mask, mode);
+ result = ancestor_bg_design(cb, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_MAIN || mode == LV_DESIGN_DRAW_POST) {
lv_cb_ext_t * cb_ext = lv_obj_get_ext_attr(cb);
lv_btn_ext_t * bullet_ext = lv_obj_get_ext_attr(cb_ext->bullet);
@@ -234,10 +250,10 @@ static bool lv_cb_design(lv_obj_t * cb, const lv_area_t * mask, lv_design_mode_t
/*Be sure the state of the bullet is the same as the parent button*/
bullet_ext->state = cb_ext->bg_btn.state;
- result = ancestor_bg_design(cb, mask, mode);
+ result = ancestor_bg_design(cb, clip_area, mode);
} else {
- result = ancestor_bg_design(cb, mask, mode);
+ result = ancestor_bg_design(cb, clip_area, mode);
}
return result;
@@ -246,17 +262,17 @@ static bool lv_cb_design(lv_obj_t * cb, const lv_area_t * mask, lv_design_mode_t
/**
* Handle the drawing related tasks of the check boxes
* @param bullet pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return element of `lv_design_res_t`
*/
-static bool lv_bullet_design(lv_obj_t * bullet, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_bullet_design(lv_obj_t * bullet, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_bullet_design(bullet, mask, mode);
+ return ancestor_bullet_design(bullet, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_MAIN) {
#if LV_USE_GROUP
/* If the check box is the active in a group and
@@ -274,16 +290,16 @@ static bool lv_bullet_design(lv_obj_t * bullet, const lv_area_t * mask, lv_desig
}
}
#endif
- ancestor_bullet_design(bullet, mask, mode);
+ ancestor_bullet_design(bullet, clip_area, mode);
#if LV_USE_GROUP
bullet->style_p = style_ori; /*Revert the style*/
#endif
} else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_bullet_design(bullet, mask, mode);
+ ancestor_bullet_design(bullet, clip_area, mode);
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -300,6 +316,7 @@ static lv_res_t lv_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(cb, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_cb_ext_t * ext = lv_obj_get_ext_attr(cb);
@@ -316,13 +333,6 @@ static lv_res_t lv_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param)
/*Follow the backgrounds state with the bullet*/
lv_btn_set_state(ext->bullet, lv_btn_get_state(cb));
}
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_cb";
}
return res;
diff --git a/src/lv_objx/lv_cb.h b/src/lv_objx/lv_cb.h
index 5fa598b7b..a6b1e74ad 100644
--- a/src/lv_objx/lv_cb.h
+++ b/src/lv_objx/lv_cb.h
@@ -149,7 +149,7 @@ static inline bool lv_cb_is_checked(const lv_obj_t * cb)
*/
static inline bool lv_cb_is_inactive(const lv_obj_t * cb)
{
- return lv_btn_get_state(cb) == LV_BTN_STATE_INA ? false : true;
+ return lv_btn_get_state(cb) == LV_BTN_STATE_INA ? true :false;
}
/**
diff --git a/src/lv_objx/lv_chart.c b/src/lv_objx/lv_chart.c
index 83ae1ab95..20ea4980e 100644
--- a/src/lv_objx/lv_chart.c
+++ b/src/lv_objx/lv_chart.c
@@ -9,13 +9,17 @@
#include "lv_chart.h"
#if LV_USE_CHART != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_core/lv_refr.h"
#include "../lv_draw/lv_draw.h"
+#include "../lv_misc/lv_math.h"
#include "../lv_themes/lv_theme.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_chart"
+
#define LV_CHART_YMIN_DEF 0
#define LV_CHART_YMAX_DEF 100
#define LV_CHART_HDIV_DEF 3
@@ -24,15 +28,26 @@
#define LV_CHART_AXIS_TO_LABEL_DISTANCE 4
#define LV_CHART_AXIS_MAJOR_TICK_LEN_COE 1 / 15
#define LV_CHART_AXIS_MINOR_TICK_LEN_COE 2 / 3
+#define LV_CHART_AXIS_PRIMARY_Y 1
+#define LV_CHART_AXIS_SECONDARY_Y 0
+#define LV_CHART_LABEL_ITERATOR_FORWARD 1
+#define LV_CHART_LABEL_ITERATOR_REVERSE 0
/**********************
* TYPEDEFS
**********************/
+typedef struct {
+ const char * list_start;
+ const char * current_pos;
+ uint8_t items_left;
+ uint8_t is_reverse_iter;
+} lv_chart_label_iterator_t;
+
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_chart_design(lv_obj_t * chart, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_chart_design(lv_obj_t * chart, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * param);
static void lv_chart_draw_div(lv_obj_t * chart, const lv_area_t * mask);
static void lv_chart_draw_lines(lv_obj_t * chart, const lv_area_t * mask);
@@ -44,6 +59,9 @@ static void lv_chart_draw_axes(lv_obj_t * chart, const lv_area_t * mask);
static void lv_chart_inv_lines(lv_obj_t * chart, uint16_t i);
static void lv_chart_inv_points(lv_obj_t * chart, uint16_t i);
static void lv_chart_inv_cols(lv_obj_t * chart, uint16_t i);
+static void lv_chart_get_next_label(lv_chart_label_iterator_t * iterator, char * buf);
+static inline bool lv_chart_is_tick_with_label(uint8_t tick_num, lv_chart_axis_cfg_t * axis);
+static lv_chart_label_iterator_t lv_chart_create_label_iter(const char * list, uint8_t iterator_dir);
/**********************
* STATIC VARIABLES
@@ -72,13 +90,16 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor basic object*/
lv_obj_t * new_chart = lv_obj_create(par, copy);
- lv_mem_assert(new_chart);
+ LV_ASSERT_MEM(new_chart);
if(new_chart == NULL) return NULL;
/*Allocate the object type specific extended data*/
lv_chart_ext_t * ext = lv_obj_allocate_ext_attr(new_chart, sizeof(lv_chart_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_chart);
+ return NULL;
+ }
lv_ll_init(&ext->series_ll, sizeof(lv_chart_series_t));
@@ -96,10 +117,13 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy)
ext->margin = 0;
memset(&ext->x_axis, 0, sizeof(ext->x_axis));
memset(&ext->y_axis, 0, sizeof(ext->y_axis));
+ memset(&ext->secondary_y_axis, 0, sizeof(ext->secondary_y_axis));
ext->x_axis.major_tick_len = LV_CHART_TICK_LENGTH_AUTO;
ext->x_axis.minor_tick_len = LV_CHART_TICK_LENGTH_AUTO;
ext->y_axis.major_tick_len = LV_CHART_TICK_LENGTH_AUTO;
ext->y_axis.minor_tick_len = LV_CHART_TICK_LENGTH_AUTO;
+ ext->secondary_y_axis.major_tick_len = LV_CHART_TICK_LENGTH_AUTO;
+ ext->secondary_y_axis.minor_tick_len = LV_CHART_TICK_LENGTH_AUTO;
if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_chart);
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_chart);
@@ -132,6 +156,7 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy)
ext->margin = ext_copy->margin;
memcpy(&ext->x_axis, &ext_copy->x_axis, sizeof(lv_chart_axis_cfg_t));
memcpy(&ext->y_axis, &ext_copy->y_axis, sizeof(lv_chart_axis_cfg_t));
+ memcpy(&ext->secondary_y_axis, &ext_copy->secondary_y_axis, sizeof(lv_chart_axis_cfg_t));
/*Refresh the style with new signal function*/
lv_obj_refresh_style(new_chart);
@@ -154,9 +179,11 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy)
*/
lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
lv_chart_series_t * ser = lv_ll_ins_head(&ext->series_ll);
- lv_mem_assert(ser);
+ LV_ASSERT_MEM(ser);
if(ser == NULL) return NULL;
lv_coord_t def = LV_CHART_POINT_DEF;
@@ -165,9 +192,9 @@ lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color)
ser->color = color;
ser->points = lv_mem_alloc(sizeof(lv_coord_t) * ext->point_cnt);
- lv_mem_assert(ser->points);
+ LV_ASSERT_MEM(ser->points);
if(ser->points == NULL) {
- lv_ll_rem(&ext->series_ll, ser);
+ lv_ll_remove(&ext->series_ll, ser);
lv_mem_free(ser);
return NULL;
}
@@ -193,6 +220,9 @@ lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color)
*/
void lv_chart_clear_serie(lv_obj_t * chart, lv_chart_series_t * serie)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+ LV_ASSERT_NULL(serie);
+
if(chart == NULL || serie == NULL) return;
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext == NULL) return;
@@ -217,6 +247,8 @@ void lv_chart_clear_serie(lv_obj_t * chart, lv_chart_series_t * serie)
*/
void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t vdiv)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext->hdiv_cnt == hdiv && ext->vdiv_cnt == vdiv) return;
@@ -234,6 +266,8 @@ void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t vdiv)
*/
void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext->ymin == ymin && ext->ymax == ymax) return;
@@ -250,6 +284,8 @@ void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax)
*/
void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext->type == type) return;
@@ -265,6 +301,8 @@ void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type)
*/
void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext->point_cnt == point_cnt) return;
@@ -279,7 +317,7 @@ void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt)
{
if(ser->start_point != 0) {
lv_coord_t * new_points = lv_mem_alloc(sizeof(lv_coord_t) * point_cnt);
- lv_mem_assert(new_points);
+ LV_ASSERT_MEM(new_points);
if(new_points == NULL) return;
if(point_cnt >= point_cnt_old) {
@@ -302,7 +340,7 @@ void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt)
ser->points = new_points;
} else {
ser->points = lv_mem_realloc(ser->points, sizeof(lv_coord_t) * point_cnt);
- lv_mem_assert(ser->points);
+ LV_ASSERT_MEM(ser->points);
if(ser->points == NULL) return;
/*Initialize the new points*/
if(point_cnt > point_cnt_old) {
@@ -327,6 +365,8 @@ void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt)
*/
void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext->series.opa == opa) return;
@@ -341,6 +381,8 @@ void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa)
*/
void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext->series.width == width) return;
@@ -354,6 +396,8 @@ void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width)
*/
void lv_chart_set_series_darking(lv_obj_t * chart, lv_opa_t dark_eff)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext->series.dark == dark_eff) return;
@@ -369,6 +413,9 @@ void lv_chart_set_series_darking(lv_obj_t * chart, lv_opa_t dark_eff)
*/
void lv_chart_init_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+ LV_ASSERT_NULL(ser);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
uint16_t i;
for(i = 0; i < ext->point_cnt; i++) {
@@ -386,6 +433,9 @@ void lv_chart_init_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t
*/
void lv_chart_set_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y_array[])
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+ LV_ASSERT_NULL(ser);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
memcpy(ser->points, y_array, ext->point_cnt * (sizeof(lv_coord_t)));
ser->start_point = 0;
@@ -400,6 +450,9 @@ void lv_chart_set_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y
*/
void lv_chart_set_next(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+ LV_ASSERT_NULL(ser);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext->update_mode == LV_CHART_UPDATE_MODE_SHIFT) {
ser->points[ser->start_point] =
@@ -414,6 +467,7 @@ void lv_chart_set_next(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y)
if(ext->type & LV_CHART_TYPE_POINT) lv_chart_inv_points(chart, ser->start_point);
if(ext->type & LV_CHART_TYPE_VERTICAL_LINE) lv_chart_inv_lines(chart, ser->start_point);
if(ext->type & LV_CHART_TYPE_AREA) lv_chart_inv_lines(chart, ser->start_point);
+ if(ext->type & LV_CHART_TYPE_AREA_FADED) lv_chart_inv_lines(chart, ser->start_point);
ser->start_point = (ser->start_point + 1) % ext->point_cnt; /*update the x for next incoming y*/
}
@@ -426,6 +480,8 @@ void lv_chart_set_next(lv_obj_t * chart, lv_chart_series_t * ser, lv_coord_t y)
*/
void lv_chart_set_update_mode(lv_obj_t * chart, lv_chart_update_mode_t update_mode)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(ext->update_mode == update_mode) return;
@@ -443,6 +499,8 @@ void lv_chart_set_update_mode(lv_obj_t * chart, lv_chart_update_mode_t update_mo
*/
void lv_chart_set_x_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
ext->x_axis.major_tick_len = major_tick_len;
ext->x_axis.minor_tick_len = minor_tick_len;
@@ -458,11 +516,30 @@ void lv_chart_set_x_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_
*/
void lv_chart_set_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
ext->y_axis.major_tick_len = major_tick_len;
ext->y_axis.minor_tick_len = minor_tick_len;
}
+/**
+ * Set the length of the tick marks on the secondary y axis
+ * @param chart pointer to the chart
+ * @param major_tick_len the length of the major tick or `LV_CHART_TICK_LENGTH_AUTO` to set automatically
+ * (where labels are added)
+ * @param minor_tick_len the length of the minor tick, `LV_CHART_TICK_LENGTH_AUTO` to set automatically
+ * (where no labels are added)
+ */
+void lv_chart_set_secondary_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len)
+{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
+ lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+ ext->secondary_y_axis.major_tick_len = major_tick_len;
+ ext->secondary_y_axis.minor_tick_len = minor_tick_len;
+}
+
/**
* Set the x-axis tick count and labels of a chart
* @param chart pointer to a chart object
@@ -474,6 +551,9 @@ void lv_chart_set_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_
void lv_chart_set_x_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
lv_chart_axis_options_t options)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+ LV_ASSERT_NULL(list_of_values);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
ext->x_axis.num_tick_marks = num_tick_marks;
ext->x_axis.list_of_values = list_of_values;
@@ -491,12 +571,35 @@ void lv_chart_set_x_tick_texts(lv_obj_t * chart, const char * list_of_values, ui
void lv_chart_set_y_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
lv_chart_axis_options_t options)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+ LV_ASSERT_NULL(list_of_values);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
ext->y_axis.num_tick_marks = num_tick_marks;
ext->y_axis.list_of_values = list_of_values;
ext->y_axis.options = options;
}
+/**
+ * Set the secondary y-axis tick count and labels of a chart
+ * @param chart pointer to a chart object
+ * @param list_of_values list of string values, terminated with \n, except the last
+ * @param num_tick_marks if list_of_values is NULL: total number of ticks per axis
+ * else number of ticks between two value labels
+ * @param options extra options
+ */
+void lv_chart_set_secondary_y_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
+ lv_chart_axis_options_t options)
+{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+ LV_ASSERT_NULL(list_of_values);
+
+ lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+ ext->secondary_y_axis.num_tick_marks = num_tick_marks;
+ ext->secondary_y_axis.list_of_values = list_of_values;
+ ext->secondary_y_axis.options = options;
+}
+
/**
* Set the margin around the chart, used for axes value and ticks
* @param chart pointer to an chart object
@@ -504,6 +607,8 @@ void lv_chart_set_y_tick_texts(lv_obj_t * chart, const char * list_of_values, ui
*/
void lv_chart_set_margin(lv_obj_t * chart, uint16_t margin)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
ext->margin = margin;
lv_obj_refresh_ext_draw_pad(chart);
@@ -520,6 +625,8 @@ void lv_chart_set_margin(lv_obj_t * chart, uint16_t margin)
*/
lv_chart_type_t lv_chart_get_type(const lv_obj_t * chart)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
return ext->type;
}
@@ -529,8 +636,10 @@ lv_chart_type_t lv_chart_get_type(const lv_obj_t * chart)
* @param chart pointer to chart object
* @return point number on each data line
*/
-uint16_t lv_chart_get_point_cnt(const lv_obj_t * chart)
+uint16_t lv_chart_get_point_count(const lv_obj_t * chart)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
return ext->point_cnt;
}
@@ -542,6 +651,8 @@ uint16_t lv_chart_get_point_cnt(const lv_obj_t * chart)
*/
lv_opa_t lv_chart_get_series_opa(const lv_obj_t * chart)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
return ext->series.opa;
}
@@ -553,6 +664,8 @@ lv_opa_t lv_chart_get_series_opa(const lv_obj_t * chart)
*/
lv_coord_t lv_chart_get_series_width(const lv_obj_t * chart)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
return ext->series.width;
}
@@ -564,6 +677,8 @@ lv_coord_t lv_chart_get_series_width(const lv_obj_t * chart)
*/
lv_opa_t lv_chart_get_series_darking(const lv_obj_t * chart)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
return ext->series.dark;
}
@@ -578,6 +693,8 @@ lv_opa_t lv_chart_get_series_darking(const lv_obj_t * chart)
*/
void lv_chart_refresh(lv_obj_t * chart)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_obj_invalidate(chart);
}
@@ -588,6 +705,8 @@ void lv_chart_refresh(lv_obj_t * chart)
*/
uint16_t lv_chart_get_margin(lv_obj_t * chart)
{
+ LV_ASSERT_OBJ(chart, LV_OBJX_NAME);
+
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
return ext->margin;
}
@@ -599,44 +718,43 @@ uint16_t lv_chart_get_margin(lv_obj_t * chart)
/**
* Handle the drawing related tasks of the chart backgrounds
* @param chart pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_chart_design(lv_obj_t * chart, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_chart_design(lv_obj_t * chart, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
- /*Return false if the object is not covers the mask_p area*/
- return ancestor_design_f(chart, mask, mode);
+ return ancestor_design_f(chart, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_MAIN) {
/*Draw the background*/
- lv_draw_rect(&chart->coords, mask, lv_obj_get_style(chart), lv_obj_get_opa_scale(chart));
+ lv_draw_rect(&chart->coords, clip_area, lv_obj_get_style(chart), lv_obj_get_opa_scale(chart));
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
- lv_chart_draw_div(chart, mask);
+ lv_chart_draw_div(chart, clip_area);
/* Adjust the mask to remove the margin (clips chart contents to be within background) */
lv_area_t mask_tmp, adjusted_mask;
lv_obj_get_coords(chart, &mask_tmp);
- bool union_ok = lv_area_intersect(&adjusted_mask, mask, &mask_tmp);
+ bool union_ok = lv_area_intersect(&adjusted_mask, clip_area, &mask_tmp);
if(union_ok) {
- if(ext->type & LV_CHART_TYPE_LINE) lv_chart_draw_lines(chart, &adjusted_mask);
- if(ext->type & LV_CHART_TYPE_COLUMN) lv_chart_draw_cols(chart, &adjusted_mask);
- if(ext->type & LV_CHART_TYPE_POINT) lv_chart_draw_points(chart, &adjusted_mask);
- if(ext->type & LV_CHART_TYPE_VERTICAL_LINE) lv_chart_draw_vertical_lines(chart, &adjusted_mask);
- if(ext->type & LV_CHART_TYPE_AREA) lv_chart_draw_areas(chart, &adjusted_mask);
+ if(ext->type & LV_CHART_TYPE_LINE) lv_chart_draw_lines(chart, clip_area);
+ if(ext->type & LV_CHART_TYPE_COLUMN) lv_chart_draw_cols(chart, clip_area);
+ if(ext->type & LV_CHART_TYPE_POINT) lv_chart_draw_points(chart, clip_area);
+ if(ext->type & LV_CHART_TYPE_VERTICAL_LINE) lv_chart_draw_vertical_lines(chart, clip_area);
+ if((ext->type & LV_CHART_TYPE_AREA) || (ext->type & LV_CHART_TYPE_AREA_FADED)) lv_chart_draw_areas(chart, clip_area);
}
- lv_chart_draw_axes(chart, mask);
+ lv_chart_draw_axes(chart, clip_area);
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -647,12 +765,13 @@ static bool lv_chart_design(lv_obj_t * chart, const lv_area_t * mask, lv_design_
*/
static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * param)
{
- lv_res_t res;
- lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
-
/* Include the ancient signal function */
+ lv_res_t res;
res = ancestor_signal(chart, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
+
+ lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
if(sign == LV_SIGNAL_CLEANUP) {
lv_coord_t ** datal;
@@ -661,13 +780,6 @@ static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * param
lv_mem_free(*datal);
}
lv_ll_clear(&ext->series_ll);
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_chart";
} else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
/*Provide extra px draw area around the chart*/
chart->ext_draw_pad = ext->margin;
@@ -811,8 +923,8 @@ static void lv_chart_draw_points(lv_obj_t * chart, const lv_area_t * mask)
lv_area_t cir_a;
lv_coord_t w = lv_obj_get_width(chart);
lv_coord_t h = lv_obj_get_height(chart);
- lv_coord_t x_ofs = chart->coords.x1;
- lv_coord_t y_ofs = chart->coords.y1;
+ lv_coord_t x_ofs = chart->coords.x1 - (ext->series.width & 0x1);
+ lv_coord_t y_ofs = chart->coords.y1 - (ext->series.width & 0x1 ? 0 : 1);
int32_t y_tmp;
lv_coord_t p_act;
lv_chart_series_t * ser;
@@ -1005,11 +1117,19 @@ static void lv_chart_draw_areas(lv_obj_t * chart, const lv_area_t * mask)
lv_style_t style;
lv_style_copy(&style, &lv_style_plain);
+ int16_t mask_fade_id = LV_MASK_ID_INV;
+ lv_draw_mask_fade_param_t mask_fade_p;
+ if(ext->type & LV_CHART_TYPE_AREA_FADED) {
+ lv_draw_mask_fade_init(&mask_fade_p, &chart->coords, LV_OPA_90, chart->coords.y1 + (h >> 2), LV_OPA_10, chart->coords.y2 - (h >> 2));
+ mask_fade_id = lv_draw_mask_add(&mask_fade_p, NULL);
+ }
+
/*Go through all data lines*/
LV_LL_READ_BACK(ext->series_ll, ser)
{
lv_coord_t start_point = ext->update_mode == LV_CHART_UPDATE_MODE_SHIFT ? ser->start_point : 0;
style.body.main_color = ser->color;
+ style.body.grad_color = ser->color;
style.body.opa = ext->series.opa;
p2.x = 0 + x_ofs;
@@ -1030,81 +1150,209 @@ static void lv_chart_draw_areas(lv_obj_t * chart, const lv_area_t * mask)
y_tmp = y_tmp / (ext->ymax - ext->ymin);
p2.y = h - y_tmp + y_ofs;
+
if(ser->points[p_prev] != LV_CHART_POINT_DEF && ser->points[p_act] != LV_CHART_POINT_DEF) {
- lv_point_t triangle_points[3];
- triangle_points[0] = p1;
- triangle_points[1] = p2;
- triangle_points[2].x = p1.x;
- triangle_points[2].y = chart->coords.y2;
- lv_draw_triangle(triangle_points, mask, &style, opa_scale);
- triangle_points[2].x = p2.x;
- triangle_points[0].y = chart->coords.y2;
- lv_draw_triangle(triangle_points, mask, &style, opa_scale);
+ int16_t mask_line_id;
+ lv_draw_mask_line_param_t mask_line_p;
+ lv_draw_mask_line_points_init(&mask_line_p, p1.x, p1.y, p2.x, p2.y, LV_DRAW_MASK_LINE_SIDE_BOTTOM);
+ mask_line_id = lv_draw_mask_add(&mask_line_p, NULL);
+
+ lv_area_t a;
+ a.x1 = p1.x;
+ a.x2 = p2.x - 1;
+ a.y1 = LV_MATH_MIN(p1.y, p2.y);
+ a.y2 = chart->coords.y2;
+ lv_draw_rect(&a, mask, &style, opa_scale);
+
+ lv_draw_mask_remove_id(mask_line_id);
}
p_prev = p_act;
}
}
+ lv_draw_mask_remove_id(mask_fade_id);
}
-static void lv_chart_draw_y_ticks(lv_obj_t * chart, const lv_area_t * mask)
+/**
+ * Create iterator for newline-separated list
+ * @param list pointer to newline-separated labels list
+ * @param iterator_dir LV_CHART_ITERATOR_FORWARD or LV_CHART_LABEL_ITERATOR_REVERSE
+ * @return lv_chart_label_iterator_t
+ */
+static lv_chart_label_iterator_t lv_chart_create_label_iter(const char * list, uint8_t iterator_dir)
+{
+ lv_chart_label_iterator_t iterator = {0};
+ uint8_t j;
+
+ iterator.list_start = list;
+
+ /* count number of list items */
+ for(j = 0; list[j] != '\0'; j++) {
+ if(list[j] == '\n')
+ iterator.items_left++;
+ }
+
+ if(iterator_dir == LV_CHART_LABEL_ITERATOR_FORWARD) {
+ iterator.is_reverse_iter = 0;
+ iterator.current_pos = list;
+ } else {
+ iterator.is_reverse_iter = 1;
+ // -1 to skip '\0' at the end of the string
+ iterator.current_pos = list + j - 1;
+ }
+ iterator.items_left++;
+ return iterator;
+}
+
+/**
+ * Get next label from iterator created by lv_chart_create_label_iter()
+ * @param iterator iterator to get label from
+ * @param[out] buf buffer to point next label to
+ */
+static void lv_chart_get_next_label(lv_chart_label_iterator_t * iterator, char * buf)
+{
+ uint8_t label_len = 0;
+ if (iterator->is_reverse_iter) {
+ const char * label_start;
+ /* count the length of the current label*/
+ while ((*iterator->current_pos != '\n') &&
+ (iterator->current_pos != iterator->list_start)) {
+ iterator->current_pos--;
+ label_len++;
+ }
+
+ label_start = iterator->current_pos;
+
+ if (*iterator->current_pos == '\n') {
+ /* do not copy \n symbol, +1 to skip it*/
+ label_start++;
+ /* skip newline*/
+ iterator->current_pos--;
+ } else {
+ /* it is last label in list (first one from the beginning )*/
+ label_len++;
+ }
+
+ /* do not allow output buffer overflow */
+ if (label_len > LV_CHART_AXIS_TICK_LABEL_MAX_LEN) {
+ label_len = LV_CHART_AXIS_TICK_LABEL_MAX_LEN;
+ }
+
+ strncpy(buf, label_start, label_len);
+ } else {
+ /* search for tick string */
+ while(iterator->current_pos[label_len] != '\n' &&
+ iterator->current_pos[label_len] != '\0') {
+ /* do not overflow the buffer, but move to the end of the current label */
+ if(label_len < LV_CHART_AXIS_TICK_LABEL_MAX_LEN) {
+ buf[label_len] = iterator->current_pos[label_len];
+ label_len++;
+ } else {
+ label_len++;
+ }
+ }
+
+ iterator->current_pos += label_len;
+
+ /* do not allow output buffer overflow */
+ if (label_len > LV_CHART_AXIS_TICK_LABEL_MAX_LEN) {
+ label_len = LV_CHART_AXIS_TICK_LABEL_MAX_LEN;
+ }
+
+ if(*iterator->current_pos == '\n') iterator->current_pos++;
+ }
+
+ /* terminate the string */
+ buf[label_len] = '\0';
+}
+
+/**
+ * Check whether there should be a label next to tick with given
+ * number
+ * @param tick_num number of the tick to check
+ * @param axis pointer to struct containing info on the axis
+ * @return true if label should be located next to current tick
+ */
+static inline bool lv_chart_is_tick_with_label(uint8_t tick_num, lv_chart_axis_cfg_t * axis)
+{
+ return ((tick_num == 0) || ((tick_num % axis->num_tick_marks) == 0));
+}
+
+static void lv_chart_draw_y_ticks(lv_obj_t * chart, const lv_area_t * mask, uint8_t which_axis)
{
lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart);
+ lv_chart_axis_cfg_t * y_axis = (which_axis == LV_CHART_AXIS_PRIMARY_Y) ?
+ &ext->y_axis : &ext->secondary_y_axis;
- if(ext->y_axis.list_of_values != NULL || ext->y_axis.num_tick_marks != 0) {
+ if(y_axis->list_of_values != NULL || y_axis->num_tick_marks != 0) {
const lv_style_t * style = lv_obj_get_style(chart);
lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
- uint8_t i, j;
- uint8_t list_index;
+ uint8_t i;
uint8_t num_of_labels;
uint8_t num_scale_ticks;
- uint8_t major_tick_len, minor_tick_len;
+ int8_t major_tick_len, minor_tick_len;
+ uint8_t iter_dir;
+
lv_point_t p1;
lv_point_t p2;
- lv_coord_t x_ofs = chart->coords.x1;
+ lv_coord_t x_ofs;
+ lv_chart_label_iterator_t iter;
lv_coord_t y_ofs = chart->coords.y1;
lv_coord_t h = lv_obj_get_height(chart);
lv_coord_t w = lv_obj_get_width(chart);
char buf[LV_CHART_AXIS_TICK_LABEL_MAX_LEN + 1]; /* up to N symbols per label + null terminator */
+ /* chose correct side of the chart */
+ if(which_axis == LV_CHART_AXIS_PRIMARY_Y)
+ x_ofs = chart->coords.x1;
+ else
+ x_ofs = chart->coords.x2;
+
/* calculate the size of tick marks */
- if(ext->y_axis.major_tick_len == LV_CHART_TICK_LENGTH_AUTO)
+ if(y_axis->major_tick_len == LV_CHART_TICK_LENGTH_AUTO)
major_tick_len = (int32_t)w * LV_CHART_AXIS_MAJOR_TICK_LEN_COE;
else
- major_tick_len = ext->y_axis.major_tick_len;
+ major_tick_len = y_axis->major_tick_len;
- if(ext->y_axis.minor_tick_len == LV_CHART_TICK_LENGTH_AUTO)
+ if(y_axis->minor_tick_len == LV_CHART_TICK_LENGTH_AUTO)
minor_tick_len = major_tick_len * LV_CHART_AXIS_MINOR_TICK_LEN_COE;
else
- minor_tick_len = ext->y_axis.minor_tick_len;
+ minor_tick_len = y_axis->minor_tick_len;
- /* count the '\n'-s to determine the number of options */
- list_index = 0;
- num_of_labels = 0;
- if(ext->y_axis.list_of_values != NULL) {
- for(j = 0; ext->y_axis.list_of_values[j] != '\0'; j++) {
- if(ext->y_axis.list_of_values[j] == '\n') num_of_labels++;
- }
-
- num_of_labels++; /* last option in the at row*/
+ /* tick lines on secondary y axis are drawn in other direction*/
+ if(which_axis == LV_CHART_AXIS_SECONDARY_Y) {
+ major_tick_len *= -1;
+ minor_tick_len *= -1;
}
+ iter_dir = (y_axis->options & LV_CHART_AXIS_INVERSE_LABELS_ORDER) ? LV_CHART_LABEL_ITERATOR_REVERSE : LV_CHART_LABEL_ITERATOR_FORWARD;
+ iter = lv_chart_create_label_iter(y_axis->list_of_values, iter_dir);
+
+ /*determine the number of options */
+ num_of_labels = iter.items_left;
+
/* we can't have string labels without ticks step, set to 1 if not specified */
- if(ext->y_axis.num_tick_marks == 0) ext->y_axis.num_tick_marks = 1;
+ if(y_axis->num_tick_marks == 0) y_axis->num_tick_marks = 1;
/* calculate total number of ticks */
if(num_of_labels < 2)
- num_scale_ticks = ext->y_axis.num_tick_marks;
+ num_scale_ticks = y_axis->num_tick_marks;
else
- num_scale_ticks = (ext->y_axis.num_tick_marks * (num_of_labels - 1));
+ num_scale_ticks = (y_axis->num_tick_marks * (num_of_labels - 1));
for(i = 0; i < (num_scale_ticks + 1); i++) { /* one extra loop - it may not exist in the list, empty label */
/* first point of the tick */
- p1.x = x_ofs - 1;
+ p1.x = x_ofs;
+
+ /* move extra pixel out of chart boundary */
+ if (which_axis == LV_CHART_AXIS_PRIMARY_Y)
+ p1.x--;
+ else
+ p1.x++;
/* second point of the tick */
- if((num_of_labels != 0) && (i == 0 || i % ext->y_axis.num_tick_marks == 0))
+ if((num_of_labels != 0) && (i == 0 || i % y_axis->num_tick_marks == 0))
p2.x = p1.x - major_tick_len; /* major tick */
else
p2.x = p1.x - minor_tick_len; /* minor tick */
@@ -1113,31 +1361,25 @@ static void lv_chart_draw_y_ticks(lv_obj_t * chart, const lv_area_t * mask)
p2.y = p1.y =
y_ofs + (int32_t)((int32_t)(h - style->line.width) * i) / num_scale_ticks;
- if(i != num_scale_ticks)
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
- else if((ext->y_axis.options & LV_CHART_AXIS_DRAW_LAST_TICK) != 0)
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
+ if(y_axis->options & LV_CHART_AXIS_INVERSE_LABELS_ORDER) {
+ /*if label order is inversed last tick have number 0*/
+ if(i != 0)
+ lv_draw_line(&p1, &p2, mask, style, opa_scale);
+ else if((y_axis->options & LV_CHART_AXIS_DRAW_LAST_TICK) != 0)
+ lv_draw_line(&p1, &p2, mask, style, opa_scale);
+ } else {
+ if(i != num_scale_ticks)
+ lv_draw_line(&p1, &p2, mask, style, opa_scale);
+ else if((y_axis->options & LV_CHART_AXIS_DRAW_LAST_TICK) != 0)
+ lv_draw_line(&p1, &p2, mask, style, opa_scale);
+ }
/* draw values if available */
if(num_of_labels != 0) {
/* add text only to major tick */
- if(i == 0 || i % ext->y_axis.num_tick_marks == 0) {
- /* search for tick string */
- j = 0;
- while(ext->y_axis.list_of_values[list_index] != '\n' &&
- ext->y_axis.list_of_values[list_index] != '\0') {
- /* do not overflow the buffer, but move to the end of the current label */
- if(j < LV_CHART_AXIS_TICK_LABEL_MAX_LEN)
- buf[j++] = ext->y_axis.list_of_values[list_index++];
- else
- list_index++;
- }
+ if(lv_chart_is_tick_with_label(i, y_axis)) {
- /* this was a string, but not end of the list, so jump to the next string */
- if(ext->y_axis.list_of_values[list_index] == '\n') list_index++;
-
- /* terminate the string */
- buf[j] = '\0';
+ lv_chart_get_next_label(&iter, buf);
/* reserve appropriate area */
lv_point_t size;
@@ -1145,9 +1387,17 @@ static void lv_chart_draw_y_ticks(lv_obj_t * chart, const lv_area_t * mask)
LV_COORD_MAX, LV_TXT_FLAG_CENTER);
/* set the area at some distance of the major tick len left of the tick */
- lv_area_t a = {(p2.x - size.x - LV_CHART_AXIS_TO_LABEL_DISTANCE), (p2.y - size.y / 2),
- (p2.x - LV_CHART_AXIS_TO_LABEL_DISTANCE), (p2.y + size.y / 2)};
- lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL);
+ lv_area_t a = {.y1 = p2.y - size.y / 2, .y2 = p2.y + size.y / 2};
+
+ if(which_axis == LV_CHART_AXIS_PRIMARY_Y) {
+ a.x1 = p2.x - size.x - LV_CHART_AXIS_TO_LABEL_DISTANCE;
+ a.x2 = p2.x - LV_CHART_AXIS_TO_LABEL_DISTANCE;
+ } else {
+ a.x1 = p2.x + LV_CHART_AXIS_TO_LABEL_DISTANCE;
+ a.x2 = p2.x + size.x + LV_CHART_AXIS_TO_LABEL_DISTANCE;
+ }
+
+ lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, NULL, NULL, lv_obj_get_base_dir(chart));
}
}
@@ -1164,11 +1414,11 @@ static void lv_chart_draw_x_ticks(lv_obj_t * chart, const lv_area_t * mask)
const lv_style_t * style = lv_obj_get_style(chart);
lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
- uint8_t i, j;
- uint8_t list_index;
+ uint8_t i;
uint8_t num_of_labels;
uint8_t num_scale_ticks;
uint8_t major_tick_len, minor_tick_len;
+ lv_chart_label_iterator_t iter;
lv_point_t p1;
lv_point_t p2;
lv_coord_t x_ofs = chart->coords.x1;
@@ -1188,16 +1438,9 @@ static void lv_chart_draw_x_ticks(lv_obj_t * chart, const lv_area_t * mask)
else
minor_tick_len = ext->x_axis.minor_tick_len;
- /* count the '\n'-s to determine the number of options */
- list_index = 0;
- num_of_labels = 0;
- if(ext->x_axis.list_of_values != NULL) {
- for(j = 0; ext->x_axis.list_of_values[j] != '\0'; j++) {
- if(ext->x_axis.list_of_values[j] == '\n') num_of_labels++;
- }
-
- num_of_labels++; /* last option in the at row*/
- }
+ /*determine the number of options */
+ iter = lv_chart_create_label_iter(ext->x_axis.list_of_values, LV_CHART_LABEL_ITERATOR_FORWARD);
+ num_of_labels = iter.items_left;
/* we can't have string labels without ticks step, set to 1 if not specified */
if(ext->x_axis.num_tick_marks == 0) ext->x_axis.num_tick_marks = 1;
@@ -1229,23 +1472,8 @@ static void lv_chart_draw_x_ticks(lv_obj_t * chart, const lv_area_t * mask)
/* draw values if available */
if(num_of_labels != 0) {
/* add text only to major tick */
- if(i == 0 || i % ext->x_axis.num_tick_marks == 0) {
- /* search for tick string */
- j = 0;
- while(ext->x_axis.list_of_values[list_index] != '\n' &&
- ext->x_axis.list_of_values[list_index] != '\0') {
- /* do not overflow the buffer, but move to the end of the current label */
- if(j < LV_CHART_AXIS_TICK_LABEL_MAX_LEN)
- buf[j++] = ext->x_axis.list_of_values[list_index++];
- else
- list_index++;
- }
-
- /* this was a string, but not end of the list, so jump to the next string */
- if(ext->x_axis.list_of_values[list_index] == '\n') list_index++;
-
- /* terminate the string */
- buf[j] = '\0';
+ if(lv_chart_is_tick_with_label(i, &(ext->x_axis))) {
+ lv_chart_get_next_label(&iter, buf);
/* reserve appropriate area */
lv_point_t size;
@@ -1255,7 +1483,7 @@ static void lv_chart_draw_x_ticks(lv_obj_t * chart, const lv_area_t * mask)
/* set the area at some distance of the major tick len under of the tick */
lv_area_t a = {(p2.x - size.x / 2), (p2.y + LV_CHART_AXIS_TO_LABEL_DISTANCE), (p2.x + size.x / 2),
(p2.y + size.y + LV_CHART_AXIS_TO_LABEL_DISTANCE)};
- lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, -1, -1, NULL);
+ lv_draw_label(&a, mask, style, opa_scale, buf, LV_TXT_FLAG_CENTER, NULL, NULL, NULL, lv_obj_get_base_dir(chart));
}
}
}
@@ -1264,7 +1492,8 @@ static void lv_chart_draw_x_ticks(lv_obj_t * chart, const lv_area_t * mask)
static void lv_chart_draw_axes(lv_obj_t * chart, const lv_area_t * mask)
{
- lv_chart_draw_y_ticks(chart, mask);
+ lv_chart_draw_y_ticks(chart, mask, LV_CHART_AXIS_PRIMARY_Y);
+ lv_chart_draw_y_ticks(chart, mask, LV_CHART_AXIS_SECONDARY_Y);
lv_chart_draw_x_ticks(chart, mask);
}
diff --git a/src/lv_objx/lv_chart.h b/src/lv_objx/lv_chart.h
index 5580a1061..e775970f9 100644
--- a/src/lv_objx/lv_chart.h
+++ b/src/lv_objx/lv_chart.h
@@ -34,6 +34,9 @@ extern "C" {
/**Automatically calculate the tick length*/
#define LV_CHART_TICK_LENGTH_AUTO 255
+LV_EXPORT_CONST_INT(LV_CHART_POINT_DEF);
+LV_EXPORT_CONST_INT(LV_CHART_TICK_LENGTH_AUTO);
+
/**********************
* TYPEDEFS
**********************/
@@ -46,6 +49,7 @@ enum {
LV_CHART_TYPE_POINT = 0x04, /**< Draw circles on the points*/
LV_CHART_TYPE_VERTICAL_LINE = 0x08, /**< Draw vertical lines on points (useful when chart width == point count)*/
LV_CHART_TYPE_AREA = 0x10, /**< Draw area chart*/
+ LV_CHART_TYPE_AREA_FADED = 0x20, /**< Draw area chart by fading out the bottom of the area*/
};
typedef uint8_t lv_chart_type_t;
@@ -65,8 +69,9 @@ typedef struct
/** Data of axis */
enum {
- LV_CHART_AXIS_SKIP_LAST_TICK = 0x00, /**< don't draw the last tick */
- LV_CHART_AXIS_DRAW_LAST_TICK = 0x01 /**< draw the last tick */
+ LV_CHART_AXIS_SKIP_LAST_TICK = 0x00, /**< don't draw the last tick */
+ LV_CHART_AXIS_DRAW_LAST_TICK = 0x01, /**< draw the last tick */
+ LV_CHART_AXIS_INVERSE_LABELS_ORDER = 0x02 /**< draw tick labels in an inversed order*/
};
typedef uint8_t lv_chart_axis_options_t;
@@ -93,6 +98,7 @@ typedef struct
lv_chart_type_t type; /*Line, column or point chart (from 'lv_chart_type_t')*/
lv_chart_axis_cfg_t y_axis;
lv_chart_axis_cfg_t x_axis;
+ lv_chart_axis_cfg_t secondary_y_axis;
uint16_t margin;
uint8_t update_mode : 1;
struct
@@ -259,6 +265,16 @@ void lv_chart_set_x_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_
*/
void lv_chart_set_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len);
+/**
+ * Set the length of the tick marks on the secondary y axis
+ * @param chart pointer to the chart
+ * @param major_tick_len the length of the major tick or `LV_CHART_TICK_LENGTH_AUTO` to set automatically
+ * (where labels are added)
+ * @param minor_tick_len the length of the minor tick, `LV_CHART_TICK_LENGTH_AUTO` to set automatically
+ * (where no labels are added)
+ */
+void lv_chart_set_secondary_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_t minor_tick_len);
+
/**
* Set the x-axis tick count and labels of a chart
* @param chart pointer to a chart object
@@ -270,6 +286,17 @@ void lv_chart_set_y_tick_length(lv_obj_t * chart, uint8_t major_tick_len, uint8_
void lv_chart_set_x_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
lv_chart_axis_options_t options);
+/**
+ * Set the secondary y-axis tick count and labels of a chart
+ * @param chart pointer to a chart object
+ * @param list_of_values list of string values, terminated with \n, except the last
+ * @param num_tick_marks if list_of_values is NULL: total number of ticks per axis
+ * else number of ticks between two value labels
+ * @param options extra options
+ */
+void lv_chart_set_secondary_y_tick_texts(lv_obj_t * chart, const char * list_of_values, uint8_t num_tick_marks,
+ lv_chart_axis_options_t options);
+
/**
* Set the y-axis tick count and labels of a chart
* @param chart pointer to a chart object
@@ -304,7 +331,7 @@ lv_chart_type_t lv_chart_get_type(const lv_obj_t * chart);
* @param chart pointer to chart object
* @return point number on each data line
*/
-uint16_t lv_chart_get_point_cnt(const lv_obj_t * chart);
+uint16_t lv_chart_get_point_count(const lv_obj_t * chart);
/**
* Get the opacity of the data series
diff --git a/src/lv_objx/lv_cont.c b/src/lv_objx/lv_cont.c
index 2ff4059f0..bf4db61d4 100644
--- a/src/lv_objx/lv_cont.c
+++ b/src/lv_objx/lv_cont.c
@@ -14,16 +14,19 @@
#include
#include
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw.h"
-#include "../lv_draw/lv_draw_basic.h"
+#include "../lv_draw/lv_draw_mask.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_area.h"
#include "../lv_misc/lv_color.h"
#include "../lv_misc/lv_math.h"
+#include "../lv_misc/lv_bidi.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_cont"
/**********************
* TYPEDEFS
@@ -44,6 +47,7 @@ static void lv_cont_refr_autofit(lv_obj_t * cont);
/**********************
* STATIC VARIABLES
**********************/
+static lv_design_cb_t ancestor_design;
static lv_signal_cb_t ancestor_signal;
/**********************
@@ -67,16 +71,20 @@ lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create a basic object*/
lv_obj_t * new_cont = lv_obj_create(par, copy);
- lv_mem_assert(new_cont);
+ LV_ASSERT_MEM(new_cont);
if(new_cont == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_cont);
+ if(ancestor_design == NULL) ancestor_design= lv_obj_get_design_cb(new_cont);
lv_obj_allocate_ext_attr(new_cont, sizeof(lv_cont_ext_t));
lv_cont_ext_t * ext = lv_obj_get_ext_attr(new_cont);
- if(ext == NULL) return NULL;
+ if(ext == NULL) {
+ lv_obj_del(new_cont);
+ return NULL;
+ }
- lv_mem_assert(ext);
+ LV_ASSERT_MEM(ext);
ext->fit_left = LV_FIT_NONE;
ext->fit_right = LV_FIT_NONE;
ext->fit_top = LV_FIT_NONE;
@@ -126,6 +134,8 @@ lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_cont_set_layout(lv_obj_t * cont, lv_layout_t layout)
{
+ LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
+
lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
if(ext->layout == layout) return;
@@ -146,6 +156,8 @@ void lv_cont_set_layout(lv_obj_t * cont, lv_layout_t layout)
*/
void lv_cont_set_fit4(lv_obj_t * cont, lv_fit_t left, lv_fit_t right, lv_fit_t top, lv_fit_t bottom)
{
+ LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
+
lv_obj_invalidate(cont);
lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
if(ext->fit_left == left && ext->fit_right == right && ext->fit_top == top && ext->fit_bottom == bottom) {
@@ -172,6 +184,8 @@ void lv_cont_set_fit4(lv_obj_t * cont, lv_fit_t left, lv_fit_t right, lv_fit_t t
*/
lv_layout_t lv_cont_get_layout(const lv_obj_t * cont)
{
+ LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
+
lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
return ext->layout;
}
@@ -183,6 +197,8 @@ lv_layout_t lv_cont_get_layout(const lv_obj_t * cont)
*/
lv_fit_t lv_cont_get_fit_left(const lv_obj_t * cont)
{
+ LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
+
lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
return ext->fit_left;
}
@@ -194,6 +210,8 @@ lv_fit_t lv_cont_get_fit_left(const lv_obj_t * cont)
*/
lv_fit_t lv_cont_get_fit_right(const lv_obj_t * cont)
{
+ LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
+
lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
return ext->fit_right;
}
@@ -205,6 +223,8 @@ lv_fit_t lv_cont_get_fit_right(const lv_obj_t * cont)
*/
lv_fit_t lv_cont_get_fit_top(const lv_obj_t * cont)
{
+ LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
+
lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
return ext->fit_top;
}
@@ -216,6 +236,8 @@ lv_fit_t lv_cont_get_fit_top(const lv_obj_t * cont)
*/
lv_fit_t lv_cont_get_fit_bottom(const lv_obj_t * cont)
{
+ LV_ASSERT_OBJ(cont, LV_OBJX_NAME);
+
lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont);
return ext->fit_bottom;
}
@@ -238,6 +260,7 @@ static lv_res_t lv_cont_signal(lv_obj_t * cont, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(cont, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_STYLE_CHG) { /*Recalculate the padding if the style changed*/
lv_cont_refr_layout(cont);
@@ -254,13 +277,6 @@ static lv_res_t lv_cont_signal(lv_obj_t * cont, lv_signal_t sign, void * param)
/*FLOOD and FILL fit needs to be refreshed if the parent size has changed*/
lv_cont_refr_autofit(cont);
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_cont";
}
return res;
@@ -354,23 +370,23 @@ static void lv_cont_layout_row(lv_obj_t * cont)
lv_align_t align;
const lv_style_t * style = lv_obj_get_style(cont);
lv_coord_t vpad_corr;
-
+ lv_bidi_dir_t base_dir = lv_obj_get_base_dir(cont);
switch(type) {
case LV_LAYOUT_ROW_T:
vpad_corr = style->body.padding.top;
- align = LV_ALIGN_IN_TOP_LEFT;
+ align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_TOP_RIGHT : LV_ALIGN_IN_TOP_LEFT;
break;
case LV_LAYOUT_ROW_M:
vpad_corr = 0;
- align = LV_ALIGN_IN_LEFT_MID;
+ align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_RIGHT_MID: LV_ALIGN_IN_LEFT_MID;
break;
case LV_LAYOUT_ROW_B:
vpad_corr = -style->body.padding.bottom;
- align = LV_ALIGN_IN_BOTTOM_LEFT;
+ align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_BOTTOM_RIGHT: LV_ALIGN_IN_BOTTOM_LEFT;
break;
default:
vpad_corr = 0;
- align = LV_ALIGN_IN_TOP_LEFT;
+ align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_TOP_RIGHT : LV_ALIGN_IN_TOP_LEFT;
break;
}
@@ -379,12 +395,19 @@ static void lv_cont_layout_row(lv_obj_t * cont)
lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG);
/* Align the children */
- lv_coord_t last_cord = style->body.padding.left;
+ lv_coord_t last_cord;
+ if(base_dir == LV_BIDI_DIR_RTL) last_cord = style->body.padding.right;
+ else last_cord = style->body.padding.left;
+
LV_LL_READ_BACK(cont->child_ll, child)
{
if(lv_obj_get_hidden(child) != false || lv_obj_is_protected(child, LV_PROTECT_POS) != false) continue;
- lv_obj_align(child, cont, align, last_cord, vpad_corr);
+// last_cord -= lv_obj_get_width(child);
+
+ if(base_dir == LV_BIDI_DIR_RTL) lv_obj_align(child, cont, align, -last_cord, vpad_corr);
+ else lv_obj_align(child, cont, align, last_cord, vpad_corr);
+
last_cord += lv_obj_get_width(child) + style->body.padding.inner;
}
diff --git a/src/lv_objx/lv_cont.h b/src/lv_objx/lv_cont.h
index d4ed19fe9..a2346c6ff 100644
--- a/src/lv_objx/lv_cont.h
+++ b/src/lv_objx/lv_cont.h
@@ -64,11 +64,11 @@ typedef struct
{
/*Inherited from 'base_obj' so no inherited ext. */ /*Ext. of ancestor*/
/*New data for this type */
- uint8_t layout : 4; /*A layout from 'lv_layout_t' enum*/
- uint8_t fit_left : 2; /*A fit type from `lv_fit_t` enum */
- uint8_t fit_right : 2; /*A fit type from `lv_fit_t` enum */
- uint8_t fit_top : 2; /*A fit type from `lv_fit_t` enum */
- uint8_t fit_bottom : 2; /*A fit type from `lv_fit_t` enum */
+ lv_layout_t layout : 4; /*A layout from 'lv_layout_t' enum*/
+ lv_fit_t fit_left : 2; /*A fit type from `lv_fit_t` enum */
+ lv_fit_t fit_right : 2; /*A fit type from `lv_fit_t` enum */
+ lv_fit_t fit_top : 2; /*A fit type from `lv_fit_t` enum */
+ lv_fit_t fit_bottom : 2; /*A fit type from `lv_fit_t` enum */
} lv_cont_ext_t;
/*Styles*/
diff --git a/src/lv_objx/lv_cpicker.c b/src/lv_objx/lv_cpicker.c
new file mode 100644
index 000000000..aca670083
--- /dev/null
+++ b/src/lv_objx/lv_cpicker.c
@@ -0,0 +1,1015 @@
+/**
+ * @file lv_cpicker.c
+ *
+ * From @AloyseTech and @paulpv.
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_cpicker.h"
+#if LV_USE_CPICKER != 0
+
+#include "../lv_core/lv_debug.h"
+#include "../lv_draw/lv_draw_arc.h"
+#include "../lv_themes/lv_theme.h"
+#include "../lv_core/lv_indev.h"
+#include "../lv_core/lv_refr.h"
+#include "../lv_misc/lv_math.h"
+
+/*********************
+ * DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_cpicker"
+
+#ifndef LV_CPICKER_DEF_TYPE
+#define LV_CPICKER_DEF_TYPE LV_CPICKER_TYPE_DISC
+#endif
+
+#ifndef LV_CPICKER_DEF_HUE
+#define LV_CPICKER_DEF_HUE 0
+#endif
+
+#ifndef LV_CPICKER_DEF_SATURATION
+#define LV_CPICKER_DEF_SATURATION 100
+#endif
+
+#ifndef LV_CPICKER_DEF_VALUE
+#define LV_CPICKER_DEF_VALUE 100
+#endif
+
+#ifndef LV_CPICKER_DEF_HSV
+#define LV_CPICKER_DEF_HSV ((lv_color_hsv_t){LV_CPICKER_DEF_HUE, LV_CPICKER_DEF_SATURATION, LV_CPICKER_DEF_VALUE})
+#endif
+
+#ifndef LV_CPICKER_DEF_QF /*quantization factor*/
+#define LV_CPICKER_DEF_QF 3
+#endif
+
+#define TRI_OFFSET 2
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+static lv_design_res_t lv_cpicker_design(lv_obj_t * cpicker, const lv_area_t * clip_area, lv_design_mode_t mode);
+static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * param);
+
+static void draw_rect_grad(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale);
+static void draw_disc_grad(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale);
+static void draw_indic(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale);
+static void invalidate_indic(lv_obj_t * cpicker);
+static lv_area_t get_indic_area(lv_obj_t * cpicker);
+
+static void next_color_mode(lv_obj_t * cpicker);
+static lv_res_t double_click_reset(lv_obj_t * cpicker);
+static void refr_indic_pos(lv_obj_t * cpicker);
+static lv_color_t angle_to_mode_color(lv_obj_t * cpicker, uint16_t angle);
+static uint16_t get_angle(lv_obj_t * cpicker);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a color_picker object
+ * @param par pointer to an object, it will be the parent of the new color_picker
+ * @param copy pointer to a color_picker object, if not NULL then the new object will be copied from it
+ * @return pointer to the created color_picker
+ */
+lv_obj_t * lv_cpicker_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+ LV_LOG_TRACE("color_picker create started");
+
+ lv_obj_t * new_cpicker = lv_obj_create(par, copy);
+ LV_ASSERT_MEM(new_cpicker);
+ if(new_cpicker == NULL) return NULL;
+
+ if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_cpicker);
+ if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_cpicker);
+
+ /*Allocate the extended data*/
+ lv_cpicker_ext_t * ext = lv_obj_allocate_ext_attr(new_cpicker, sizeof(lv_cpicker_ext_t));
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_cpicker);
+ return NULL;
+ }
+
+ /*Initialize the allocated 'ext' */
+ ext->type = LV_CPICKER_DEF_TYPE;
+ ext->hsv = LV_CPICKER_DEF_HSV;
+ ext->indic.style = &lv_style_plain;
+ ext->indic.colored = 0;
+ ext->color_mode = LV_CPICKER_COLOR_MODE_HUE;
+ ext->color_mode_fixed = 0;
+ ext->preview = 0;
+ ext->last_click_time = 0;
+ ext->last_change_time = 0;
+
+ /*The signal and design functions are not copied so set them here*/
+ lv_obj_set_signal_cb(new_cpicker, lv_cpicker_signal);
+ lv_obj_set_design_cb(new_cpicker, lv_cpicker_design);
+
+ /*If no copy do the basic initialization*/
+ if(copy == NULL) {
+ lv_obj_set_size(new_cpicker, LV_DPI * 2, LV_DPI * 2);
+ lv_obj_set_protect(new_cpicker, LV_PROTECT_PRESS_LOST);
+ lv_theme_t * th = lv_theme_get_current();
+ if(th) {
+ lv_cpicker_set_style(new_cpicker, LV_CPICKER_STYLE_MAIN, th->style.bg);
+ } else {
+ lv_cpicker_set_style(new_cpicker, LV_CPICKER_STYLE_MAIN, &lv_style_plain);
+ }
+ }
+ /*Copy 'copy'*/
+ else {
+ lv_cpicker_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
+ ext->type = copy_ext->type;
+ ext->color_mode = copy_ext->color_mode;
+ ext->color_mode_fixed = copy_ext->color_mode_fixed;
+ ext->preview = copy_ext->preview;
+ ext->hsv = copy_ext->hsv;
+ ext->indic.colored = copy_ext->indic.colored;
+ ext->indic.style = copy_ext->indic.style;
+
+ /*Refresh the style with new signal function*/
+ lv_obj_refresh_style(new_cpicker);
+ }
+ refr_indic_pos(new_cpicker);
+
+ LV_LOG_INFO("color_picker created");
+
+ return new_cpicker;
+}
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new type for a cpicker
+ * @param cpicker pointer to a cpicker object
+ * @param type new type of the cpicker (from 'lv_cpicker_type_t' enum)
+ */
+void lv_cpicker_set_type(lv_obj_t * cpicker, lv_cpicker_type_t type)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ if(ext->type == type) return;
+
+ ext->type = type;
+ lv_obj_refresh_ext_draw_pad(cpicker);
+ refr_indic_pos(cpicker);
+
+ lv_obj_invalidate(cpicker);
+}
+
+/**
+ * Set a style of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_cpicker_set_style(lv_obj_t * cpicker, lv_cpicker_style_t type, lv_style_t * style)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ switch(type) {
+ case LV_CPICKER_STYLE_MAIN:
+ lv_obj_set_style(cpicker, style);
+ break;
+ case LV_CPICKER_STYLE_INDICATOR:
+ ext->indic.style = style;
+ lv_obj_invalidate(cpicker);
+ break;
+ }
+}
+
+/**
+ * Set the current hue of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param hue current selected hue [0..360]
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_hue(lv_obj_t * cpicker, uint16_t hue)
+{
+ lv_color_hsv_t hsv = lv_cpicker_get_hsv(cpicker);
+ hsv.h = hue;
+ return lv_cpicker_set_hsv(cpicker, hsv);
+}
+
+/**
+ * Set the current saturation of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param saturation current selected saturation [0..100]
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_saturation(lv_obj_t * cpicker, uint8_t saturation)
+{
+ lv_color_hsv_t hsv = lv_cpicker_get_hsv(cpicker);
+ hsv.s = saturation;
+ return lv_cpicker_set_hsv(cpicker, hsv);
+}
+
+/**
+ * Set the current value of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param val current selected value [0..100]
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_value(lv_obj_t * cpicker, uint8_t val)
+{
+ lv_color_hsv_t hsv = lv_cpicker_get_hsv(cpicker);
+ hsv.v = val;
+ return lv_cpicker_set_hsv(cpicker, hsv);
+}
+
+/**
+ * Set the current hsv of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param color current selected hsv
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_hsv(lv_obj_t * cpicker, lv_color_hsv_t hsv)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ if (hsv.h > 360) hsv.h %= 360;
+ if (hsv.s > 100) hsv.s = 100;
+ if (hsv.v > 100) hsv.v = 100;
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ if (ext->hsv.h == hsv.h && ext->hsv.s == hsv.s && ext->hsv.v == hsv.v) return false;
+
+ ext->hsv = hsv;
+
+ refr_indic_pos(cpicker);
+
+ if (ext->preview && ext->type == LV_CPICKER_TYPE_DISC) {
+ lv_obj_invalidate(cpicker);
+ }
+
+ return true;
+}
+
+/**
+ * Set the current color of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param color current selected color
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_color32_t c32;
+ c32.full = lv_color_to32(color);
+
+ return lv_cpicker_set_hsv(cpicker,
+ lv_color_rgb_to_hsv(c32.ch.red, c32.ch.green, c32.ch.blue));
+}
+
+/**
+ * Set the current color mode.
+ * @param cpicker pointer to colorpicker object
+ * @param mode color mode (hue/sat/val)
+ */
+void lv_cpicker_set_color_mode(lv_obj_t * cpicker, lv_cpicker_color_mode_t mode)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ ext->color_mode = mode;
+ refr_indic_pos(cpicker);
+ lv_obj_invalidate(cpicker);
+}
+
+/**
+ * Set if the color mode is changed on long press on center
+ * @param cpicker pointer to colorpicker object
+ * @param fixed color mode cannot be changed on long press
+ */
+void lv_cpicker_set_color_mode_fixed(lv_obj_t * cpicker, bool fixed)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ ext->color_mode_fixed = fixed;
+}
+
+/**
+ * Make the indicator to be colored to the current color
+ * @param cpicker pointer to colorpicker object
+ * @param en true: color the indicator; false: not color the indicator
+ */
+void lv_cpicker_set_indic_colored(lv_obj_t * cpicker, bool en)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ ext->indic.colored = en ? 1 : 0;
+ invalidate_indic(cpicker);
+}
+
+/**
+ * Add a color preview in the middle of the DISC type color picker
+ * @param cpicker pointer to colorpicker object
+ * @param en true: enable preview; false: disable preview
+ */
+void lv_cpicker_set_preview(lv_obj_t * cpicker, bool en)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ ext->preview = en ? 1 : 0;
+ lv_obj_invalidate(cpicker);
+}
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the current color mode.
+ * @param cpicker pointer to colorpicker object
+ * @return color mode (hue/sat/val)
+ */
+lv_cpicker_color_mode_t lv_cpicker_get_color_mode(lv_obj_t * cpicker)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ return ext->color_mode;
+}
+
+/**
+ * Get if the color mode is changed on long press on center
+ * @param cpicker pointer to colorpicker object
+ * @return mode cannot be changed on long press
+ */
+bool lv_cpicker_get_color_mode_fixed(lv_obj_t * cpicker)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ return ext->color_mode_fixed;
+}
+
+/**
+ * Get style of a color_picker.
+ * @param cpicker pointer to color_picker object
+ * @param type which style should be get
+ * @return style pointer to the style
+ */
+const lv_style_t * lv_cpicker_get_style(const lv_obj_t * cpicker, lv_cpicker_style_t type)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ const lv_style_t * style;
+
+ switch(type) {
+ case LV_CPICKER_STYLE_MAIN:
+ style = lv_obj_get_style(cpicker);
+ break;
+ case LV_CPICKER_STYLE_INDICATOR:
+ style = ext->indic.style;
+ break;
+ default:
+ style = NULL;
+ }
+
+ return style;
+}
+
+/**
+ * Get the current selected hue of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return hue current selected hue
+ */
+uint16_t lv_cpicker_get_hue(lv_obj_t * cpicker)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ return ext->hsv.h;
+}
+
+/**
+ * Get the current selected saturation of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return current selected saturation
+ */
+uint8_t lv_cpicker_get_saturation(lv_obj_t * cpicker)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ return ext->hsv.s;
+}
+
+/**
+ * Get the current selected hue of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return current selected value
+ */
+uint8_t lv_cpicker_get_value(lv_obj_t * cpicker)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ return ext->hsv.v;
+}
+
+/**
+ * Get the current selected hsv of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return current selected hsv
+ */
+lv_color_hsv_t lv_cpicker_get_hsv(lv_obj_t * cpicker)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ return ext->hsv;
+}
+
+/**
+ * Get the current selected color of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return color current selected color
+ */
+lv_color_t lv_cpicker_get_color(lv_obj_t * cpicker)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ return lv_color_hsv_to_rgb(ext->hsv.h, ext->hsv.s, ext->hsv.v);
+}
+
+/**
+ * Whether the indicator is colored to the current color or not
+ * @param cpicker pointer to colorpicker object
+ * @return true: color the indicator; false: not color the indicator
+ */
+bool lv_cpicker_get_indic_colored(lv_obj_t * cpicker)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ return ext->indic.colored ? true : false;
+}
+
+/**
+ * Whether the preview is enabled or not
+ * @param cpicker pointer to colorpicker object
+ * @return en true: preview is enabled; false: preview is disabled
+ */
+bool lv_cpicker_get_preview(lv_obj_t * cpicker)
+{
+ LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ return ext->preview ? true : false;
+}
+
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+
+/**
+ * Handle the drawing related tasks of the color_picker
+ * @param cpicker pointer to an object
+ * @param mask the object will be drawn only in this area
+ * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
+ * (return 'true' if yes)
+ * LV_DESIGN_DRAW: draw the object (always return 'true')
+ * LV_DESIGN_DRAW_POST: drawing after every children are drawn
+ * @return return an element of `lv_design_res_t`
+ */
+static lv_design_res_t lv_cpicker_design(lv_obj_t * cpicker, const lv_area_t * clip_area, lv_design_mode_t mode)
+{
+ /*Return false if the object is not covers the mask_p area*/
+ if(mode == LV_DESIGN_COVER_CHK) {
+ return LV_DESIGN_RES_NOT_COVER;
+ }
+ /*Draw the object*/
+ else if(mode == LV_DESIGN_DRAW_MAIN) {
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ lv_opa_t opa_scale = lv_obj_get_opa_scale(cpicker);
+
+ if(ext->type == LV_CPICKER_TYPE_DISC) {
+ draw_disc_grad(cpicker, clip_area, opa_scale);
+ } else if(ext->type == LV_CPICKER_TYPE_RECT) {
+ draw_rect_grad(cpicker, clip_area, opa_scale);
+ }
+
+ draw_indic(cpicker, clip_area, opa_scale);
+ }
+ /*Post draw when the children are drawn*/
+ else if(mode == LV_DESIGN_DRAW_POST) {
+ }
+
+ return LV_DESIGN_RES_OK;
+}
+
+static void draw_disc_grad(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale)
+{
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ lv_coord_t w = lv_obj_get_width(cpicker);
+ lv_coord_t h = lv_obj_get_height(cpicker);
+ lv_coord_t cx = cpicker->coords.x1 + w / 2;
+ lv_coord_t cy = cpicker->coords.y1 + h / 2;
+ lv_coord_t r = w / 2;
+
+ const lv_style_t * style_main = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN);
+ lv_style_t style;
+ lv_style_copy(&style, style_main);
+ style.line.width = (r * 628 / (360 / LV_CPICKER_DEF_QF)) / 100;
+ style.line.width += 2;
+ uint16_t i;
+ lv_coord_t cir_w = style_main->line.width;
+
+ for(i = 0; i <= 360; i+= LV_CPICKER_DEF_QF) {
+
+ style.line.color = angle_to_mode_color(cpicker, i);
+
+ lv_point_t p[2];
+ p[0].x = cx + (r * lv_trigo_sin(i) >> LV_TRIGO_SHIFT);
+ p[0].y = cy + (r * lv_trigo_sin(i+ 90) >> LV_TRIGO_SHIFT);
+ p[1].x = cx + ((r-cir_w) * lv_trigo_sin(i) >> LV_TRIGO_SHIFT);
+ p[1].y = cy + ((r-cir_w) * lv_trigo_sin(i+ 90) >> LV_TRIGO_SHIFT);
+
+ lv_draw_line(&p[0], &p[1], mask, &style, opa_scale);
+ }
+
+
+ if(ext->preview) {
+ /*Mask out the center area*/
+ lv_style_copy(&style, style_main);
+ style.body.radius = LV_RADIUS_CIRCLE;
+ lv_area_t area_mid;
+ lv_area_copy(&area_mid, &cpicker->coords);
+ area_mid.x1 += style_main->line.width;
+ area_mid.y1 += style_main->line.width;
+ area_mid.x2 -= style_main->line.width;
+ area_mid.y2 -= style_main->line.width;
+
+ lv_draw_rect(&area_mid, mask, &style, opa_scale);
+ lv_color_t color = lv_cpicker_get_color(cpicker);
+ style.body.main_color = color;
+ style.body.grad_color = color;
+ area_mid.x1 += style_main->line.width;
+ area_mid.y1 += style_main->line.width;
+ area_mid.x2 -= style_main->line.width;
+ area_mid.y2 -= style_main->line.width;
+
+ lv_draw_rect(&area_mid, mask, &style, opa_scale);
+ }
+}
+
+static void draw_rect_grad(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale)
+{
+ lv_style_t style;
+ lv_style_copy(&style, lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN));
+
+ lv_area_t grad_area;
+ lv_obj_get_coords(cpicker, &grad_area);
+
+ if(style.body.radius) {
+ lv_coord_t h = lv_obj_get_height(cpicker);
+ lv_coord_t r = style.body.radius;
+ if(r > h / 2) r = h / 2;
+ /*Make the gradient area smaller with a half circle on both ends*/
+ grad_area.x1 += r;
+ grad_area.x2 -= r;
+
+ /*Draw the left rounded end*/
+ lv_area_t rounded_edge_area;
+ lv_obj_get_coords(cpicker, &rounded_edge_area);
+ rounded_edge_area.x2 = rounded_edge_area.x1 + 2 * r;
+
+ style.body.main_color = angle_to_mode_color(cpicker, 0);
+ style.body.grad_color = style.body.main_color;
+
+ lv_draw_rect(&rounded_edge_area, mask, &style, opa_scale);
+
+ /*Draw the right rounded end*/
+ lv_obj_get_coords(cpicker, &rounded_edge_area);
+ rounded_edge_area.x1 = rounded_edge_area.x2 - 2 * r;
+
+ style.body.main_color = angle_to_mode_color(cpicker, 359);
+ style.body.grad_color = style.body.main_color;
+
+ lv_draw_rect(&rounded_edge_area, mask, &style, opa_scale);
+ }
+
+ lv_coord_t grad_w = lv_area_get_width(&grad_area);
+ uint16_t i_step = LV_MATH_MAX(LV_CPICKER_DEF_QF, 360 / grad_w);
+ style.body.radius = 0;
+ style.body.border.width = 0;
+ style.body.shadow.width = 0;
+ style.body.opa = LV_OPA_COVER;
+
+ uint16_t i;
+ for(i = 0; i < 360; i += i_step) {
+ style.body.main_color = angle_to_mode_color(cpicker, i);
+ style.body.grad_color = style.body.main_color;
+
+ /*the following attribute might need changing between index to add border, shadow, radius etc*/
+ lv_area_t rect_area;
+
+ /*scale angle (hue/sat/val) to linear coordinate*/
+ lv_coord_t xi = (i * grad_w) / 360;
+
+ rect_area.x1 = LV_MATH_MIN(grad_area.x1 + xi, grad_area.x1 + grad_w - i_step);
+ rect_area.y1 = grad_area.y1;
+ rect_area.x2 = rect_area.x1 + i_step;
+ rect_area.y2 = grad_area.y2;
+
+ lv_draw_rect(&rect_area, mask, &style, opa_scale);
+ }
+}
+
+static void draw_indic(lv_obj_t * cpicker, const lv_area_t * mask, lv_opa_t opa_scale)
+{
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ lv_style_t style_cir;
+ lv_style_copy(&style_cir, ext->indic.style);
+ style_cir.body.radius = LV_RADIUS_CIRCLE;
+
+ if(ext->indic.colored) {
+ style_cir.body.main_color = lv_cpicker_get_color(cpicker);
+ style_cir.body.grad_color = style_cir.body.main_color;
+ }
+
+ lv_area_t indic_area = get_indic_area(cpicker);
+
+ lv_draw_rect(&indic_area, mask, &style_cir, opa_scale);
+}
+
+static void invalidate_indic(lv_obj_t * cpicker)
+{
+ lv_area_t indic_area = get_indic_area(cpicker);
+
+ lv_inv_area(lv_obj_get_disp(cpicker), &indic_area);
+}
+
+static lv_area_t get_indic_area(lv_obj_t * cpicker)
+{
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ const lv_style_t * style_main = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN);
+ const lv_style_t * style_indic = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_INDICATOR);
+
+ uint16_t r = 0;
+ if(ext->type == LV_CPICKER_TYPE_DISC) r = style_main->line.width / 2;
+ else if(ext->type == LV_CPICKER_TYPE_RECT) {
+ lv_coord_t h = lv_obj_get_height(cpicker);
+ r = h / 2;
+ }
+
+ lv_area_t indic_area;
+ indic_area.x1 = cpicker->coords.x1 + ext->indic.pos.x - r - style_indic->body.padding.left;
+ indic_area.y1 = cpicker->coords.y1 + ext->indic.pos.y - r - style_indic->body.padding.right;
+ indic_area.x2 = cpicker->coords.x1 + ext->indic.pos.x + r + style_indic->body.padding.top;
+ indic_area.y2 = cpicker->coords.y1 + ext->indic.pos.y + r + style_indic->body.padding.bottom;
+
+ return indic_area;
+}
+
+/**
+ * Signal function of the color_picker
+ * @param cpicker pointer to a color_picker object
+ * @param sign a signal type from lv_signal_t enum
+ * @param param pointer to a signal specific variable
+ * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
+ */
+static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * param)
+{
+ /* Include the ancient signal function */
+ lv_res_t res = ancestor_signal(cpicker, sign, param);
+ if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+
+ if(sign == LV_SIGNAL_CLEANUP) {
+ /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
+ } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+ const lv_style_t * style_indic = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_INDICATOR);
+ lv_coord_t indic_pad = LV_MATH_MAX(style_indic->body.padding.left, style_indic->body.padding.right);
+ indic_pad = LV_MATH_MAX(indic_pad, style_indic->body.padding.top);
+ indic_pad = LV_MATH_MAX(indic_pad, style_indic->body.padding.bottom);
+
+ if(ext->type == LV_CPICKER_TYPE_RECT) indic_pad += LV_MATH_MAX(indic_pad, lv_obj_get_height(cpicker) / 2);
+
+ cpicker->ext_draw_pad = LV_MATH_MAX(cpicker->ext_draw_pad, indic_pad);
+ } else if(sign == LV_SIGNAL_CORD_CHG) {
+ /*Refresh extended draw area to make knob visible*/
+ if(lv_obj_get_width(cpicker) != lv_area_get_width(param) ||
+ lv_obj_get_height(cpicker) != lv_area_get_height(param)) {
+ lv_obj_refresh_ext_draw_pad(cpicker);
+ refr_indic_pos(cpicker);
+ }
+ } else if(sign == LV_SIGNAL_STYLE_CHG) {
+ /*Refresh extended draw area to make knob visible*/
+ lv_obj_refresh_ext_draw_pad(cpicker);
+ refr_indic_pos(cpicker);
+ }
+ else if(sign == LV_SIGNAL_CONTROL) {
+ uint32_t c = *((uint32_t *)param); /*uint32_t because can be UTF-8*/
+ if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
+ lv_color_hsv_t hsv_cur;
+ hsv_cur = ext->hsv;
+
+ switch(ext->color_mode) {
+ case LV_CPICKER_COLOR_MODE_HUE:
+ hsv_cur.h = (ext->hsv.h + 1) % 360;
+ break;
+ case LV_CPICKER_COLOR_MODE_SATURATION:
+ hsv_cur.s = (ext->hsv.s + 1) % 100;
+ break;
+ case LV_CPICKER_COLOR_MODE_VALUE:
+ hsv_cur.v = (ext->hsv.v + 1) % 100;
+ break;
+ }
+
+ if (lv_cpicker_set_hsv(cpicker, hsv_cur)) {
+ res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL);
+ if(res != LV_RES_OK) return res;
+ }
+ }
+ else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
+ lv_color_hsv_t hsv_cur;
+ hsv_cur = ext->hsv;
+
+ switch(ext->color_mode) {
+ case LV_CPICKER_COLOR_MODE_HUE:
+ hsv_cur.h = ext->hsv.h > 0?(ext->hsv.h - 1) : 360;
+ break;
+ case LV_CPICKER_COLOR_MODE_SATURATION:
+ hsv_cur.s = ext->hsv.s > 0?(ext->hsv.s - 1) : 100;
+ break;
+ case LV_CPICKER_COLOR_MODE_VALUE:
+ hsv_cur.v = ext->hsv.v > 0?(ext->hsv.v - 1) : 100;
+ break;
+ }
+
+ if (lv_cpicker_set_hsv(cpicker, hsv_cur)) {
+ res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL);
+ if(res != LV_RES_OK) return res;
+ }
+ }
+ }
+ else if(sign == LV_SIGNAL_PRESSED) {
+ ext->last_change_time = lv_tick_get();
+ lv_indev_get_point(lv_indev_get_act(), &ext->last_press_point);
+ res = double_click_reset(cpicker);
+ if(res != LV_RES_OK) return res;
+ } else if(sign == LV_SIGNAL_PRESSING) {
+ lv_indev_t * indev = lv_indev_get_act();
+ if(indev == NULL) return res;
+
+ lv_point_t p;
+ lv_indev_get_point(indev, &p);
+
+ if((LV_MATH_ABS(p.x - ext->last_press_point.x) > indev->driver.drag_limit / 2) ||
+ (LV_MATH_ABS(p.y - ext->last_press_point.y) > indev->driver.drag_limit / 2)) {
+ ext->last_change_time = lv_tick_get();
+ ext->last_press_point.x = p.x;
+ ext->last_press_point.y = p.y;
+ }
+
+ p.x -= cpicker->coords.x1;
+ p.y -= cpicker->coords.y1;
+
+ /*Ignore pressing in the inner area*/
+ uint16_t w = lv_obj_get_width(cpicker);
+
+ int16_t angle = 0;
+
+ if(ext->type == LV_CPICKER_TYPE_RECT) {
+ /*If pressed long enough without change go to next color mode*/
+ uint32_t diff = lv_tick_elaps(ext->last_change_time);
+ if(diff > (uint32_t)indev->driver.long_press_time * 2 && !ext->color_mode_fixed) {
+ next_color_mode(cpicker);
+ lv_indev_wait_release(lv_indev_get_act());
+ return res;
+ }
+
+ angle = (p.x * 360) / w;
+ if(angle < 0) angle = 0;
+ if(angle >= 360) angle = 359;
+
+ } else if(ext->type == LV_CPICKER_TYPE_DISC) {
+ const lv_style_t * style_main = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN);
+
+ lv_coord_t r_in = w / 2;
+ p.x -= r_in;
+ p.y -= r_in;
+ bool on_ring = true;
+ r_in -= style_main->line.width;
+ if(r_in > LV_DPI / 2) {
+ r_in -= style_main->line.width; /* to let some sensitive space inside*/
+
+ if(r_in < LV_DPI / 2) r_in = LV_DPI / 2;
+ }
+
+ if(p.x * p.x + p.y * p.y < r_in * r_in) {
+ on_ring = false;
+ }
+
+ /*If the inner area is being pressed, go to the next color mode on long press*/
+ uint32_t diff = lv_tick_elaps(ext->last_change_time);
+ if(((!ext->preview && on_ring) || (ext->preview))
+ && diff > indev->driver.long_press_time && !ext->color_mode_fixed) {
+ next_color_mode(cpicker);
+ lv_indev_wait_release(lv_indev_get_act());
+ return res;
+ }
+
+ /*Set the angle only if pressed on the ring*/
+ if(!on_ring) return res;
+
+ angle = lv_atan2(p.x, p.y) % 360;
+ }
+
+ lv_color_hsv_t hsv_cur;
+ hsv_cur = ext->hsv;
+
+ switch(ext->color_mode) {
+ case LV_CPICKER_COLOR_MODE_HUE:
+ hsv_cur.h = angle;
+ break;
+ case LV_CPICKER_COLOR_MODE_SATURATION:
+ hsv_cur.s = (angle * 100) / 360;
+ break;
+ case LV_CPICKER_COLOR_MODE_VALUE:
+ hsv_cur.v = (angle * 100) / 360;
+ break;
+ }
+
+ if (lv_cpicker_set_hsv(cpicker, hsv_cur)) {
+ res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL);
+ if(res != LV_RES_OK) return res;
+ }
+ }
+
+ return res;
+}
+
+static void next_color_mode(lv_obj_t * cpicker)
+{
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ ext->color_mode = (ext->color_mode + 1) % 3;
+ refr_indic_pos(cpicker);
+ lv_obj_invalidate(cpicker);
+}
+
+static void refr_indic_pos(lv_obj_t * cpicker)
+{
+ invalidate_indic(cpicker);
+
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ lv_coord_t w = lv_obj_get_width(cpicker);
+ lv_coord_t h = lv_obj_get_height(cpicker);
+
+ if(ext->type == LV_CPICKER_TYPE_RECT) {
+ lv_coord_t ind_pos = 0;
+ switch(ext->color_mode) {
+ case LV_CPICKER_COLOR_MODE_HUE:
+ ind_pos += (ext->hsv.h * w) / 360;
+ break;
+ case LV_CPICKER_COLOR_MODE_SATURATION:
+ ind_pos += (ext->hsv.s * w) / 100;
+ break;
+ case LV_CPICKER_COLOR_MODE_VALUE:
+ ind_pos += (ext->hsv.v * w) / 100;
+ break;
+ }
+
+ ext->indic.pos.x = ind_pos;
+ ext->indic.pos.y = h / 2;
+ } else if(ext->type == LV_CPICKER_TYPE_DISC) {
+ const lv_style_t * style_main = lv_cpicker_get_style(cpicker, LV_CPICKER_STYLE_MAIN);
+ lv_coord_t r = w / 2 - style_main->line.width / 2;
+ uint16_t angle = get_angle(cpicker);
+ ext->indic.pos.x = (((int32_t)r * lv_trigo_sin(angle)) >> LV_TRIGO_SHIFT);
+ ext->indic.pos.y = (((int32_t)r * lv_trigo_sin(angle + 90)) >> LV_TRIGO_SHIFT);
+ ext->indic.pos.x = ext->indic.pos.x + w / 2;
+ ext->indic.pos.y = ext->indic.pos.y + h / 2;
+ }
+
+ invalidate_indic(cpicker);
+}
+
+static lv_res_t double_click_reset(lv_obj_t * cpicker)
+{
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ lv_indev_t * indev = lv_indev_get_act();
+ /*Double clicked? Use long press time as double click time out*/
+ if(lv_tick_elaps(ext->last_click_time) < indev->driver.long_press_time) {
+ lv_color_hsv_t hsv_cur;
+ hsv_cur = ext->hsv;
+
+ switch(ext->color_mode) {
+ case LV_CPICKER_COLOR_MODE_HUE:
+ hsv_cur.h = LV_CPICKER_DEF_HUE;
+ break;
+ case LV_CPICKER_COLOR_MODE_SATURATION:
+ hsv_cur.s = LV_CPICKER_DEF_SATURATION;
+ break;
+ case LV_CPICKER_COLOR_MODE_VALUE:
+ hsv_cur.v = LV_CPICKER_DEF_VALUE;
+ break;
+ }
+
+ lv_indev_wait_release(indev);
+
+ if (lv_cpicker_set_hsv(cpicker, hsv_cur)) {
+ lv_res_t res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL);
+ if(res != LV_RES_OK) return res;
+ }
+ }
+ ext->last_click_time = lv_tick_get();
+
+ return LV_RES_OK;
+}
+
+static lv_color_t angle_to_mode_color(lv_obj_t * cpicker, uint16_t angle)
+{
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ lv_color_t color;
+ switch(ext->color_mode)
+ {
+ default:
+ case LV_CPICKER_COLOR_MODE_HUE:
+ color = lv_color_hsv_to_rgb(angle % 360, ext->hsv.s, ext->hsv.v);
+ break;
+ case LV_CPICKER_COLOR_MODE_SATURATION:
+ color = lv_color_hsv_to_rgb(ext->hsv.h, ((angle % 360) * 100) / 360, ext->hsv.v);
+ break;
+ case LV_CPICKER_COLOR_MODE_VALUE:
+ color = lv_color_hsv_to_rgb(ext->hsv.h, ext->hsv.s, ((angle % 360) * 100) / 360);
+ break;
+ }
+ return color;
+}
+
+static uint16_t get_angle(lv_obj_t * cpicker)
+{
+ lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker);
+ uint16_t angle;
+ switch(ext->color_mode)
+ {
+ default:
+ case LV_CPICKER_COLOR_MODE_HUE:
+ angle = ext->hsv.h;
+ break;
+ case LV_CPICKER_COLOR_MODE_SATURATION:
+ angle = (ext->hsv.s * 360) / 100;
+ break;
+ case LV_CPICKER_COLOR_MODE_VALUE:
+ angle = (ext->hsv.v * 360) / 100 ;
+ break;
+ }
+ return angle;
+}
+
+#endif /* LV_USE_CPICKER != 0 */
diff --git a/src/lv_objx/lv_cpicker.h b/src/lv_objx/lv_cpicker.h
new file mode 100644
index 000000000..a9feee5ae
--- /dev/null
+++ b/src/lv_objx/lv_cpicker.h
@@ -0,0 +1,263 @@
+/**
+ * @file lv_cpicker.h
+ *
+ */
+
+#ifndef LV_CPICKER_H
+#define LV_CPICKER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#if LV_USE_CPICKER != 0
+
+#include "../lv_core/lv_obj.h"
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+enum {
+ LV_CPICKER_TYPE_RECT,
+ LV_CPICKER_TYPE_DISC,
+};
+typedef uint8_t lv_cpicker_type_t;
+
+enum {
+ LV_CPICKER_COLOR_MODE_HUE,
+ LV_CPICKER_COLOR_MODE_SATURATION,
+ LV_CPICKER_COLOR_MODE_VALUE
+};
+typedef uint8_t lv_cpicker_color_mode_t;
+
+
+
+/*Data of colorpicker*/
+typedef struct {
+ lv_color_hsv_t hsv;
+ struct {
+ lv_style_t * style;
+ lv_point_t pos;
+ uint8_t colored :1;
+
+ } indic;
+ uint32_t last_click_time;
+ uint32_t last_change_time;
+ lv_point_t last_press_point;
+ lv_cpicker_color_mode_t color_mode :2;
+ uint8_t color_mode_fixed :1;
+ lv_cpicker_type_t type :1;
+ uint8_t preview :1;
+} lv_cpicker_ext_t;
+
+/*Styles*/
+enum {
+ LV_CPICKER_STYLE_MAIN,
+ LV_CPICKER_STYLE_INDICATOR,
+};
+typedef uint8_t lv_cpicker_style_t;
+
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a colorpicker objects
+ * @param par pointer to an object, it will be the parent of the new colorpicker
+ * @param copy pointer to a colorpicker object, if not NULL then the new object will be copied from it
+ * @return pointer to the created colorpicker
+ */
+lv_obj_t * lv_cpicker_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set a new type for a colorpicker
+ * @param cpicker pointer to a colorpicker object
+ * @param type new type of the colorpicker (from 'lv_cpicker_type_t' enum)
+ */
+void lv_cpicker_set_type(lv_obj_t * cpicker, lv_cpicker_type_t type);
+
+/**
+ * Set a style of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_cpicker_set_style(lv_obj_t * cpicker, lv_cpicker_style_t type, lv_style_t *style);
+
+/**
+ * Set the current hue of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param hue current selected hue [0..360]
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_hue(lv_obj_t * cpicker, uint16_t hue);
+
+/**
+ * Set the current saturation of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param saturation current selected saturation [0..100]
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_saturation(lv_obj_t * cpicker, uint8_t saturation);
+
+/**
+ * Set the current value of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param val current selected value [0..100]
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_value(lv_obj_t * cpicker, uint8_t val);
+
+/**
+ * Set the current hsv of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param hsv current selected hsv
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_hsv(lv_obj_t * cpicker, lv_color_hsv_t hsv);
+
+/**
+ * Set the current color of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param color current selected color
+ * @return true if changed, otherwise false
+ */
+bool lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color);
+
+/**
+ * Set the current color mode.
+ * @param cpicker pointer to colorpicker object
+ * @param mode color mode (hue/sat/val)
+ */
+void lv_cpicker_set_color_mode(lv_obj_t * cpicker, lv_cpicker_color_mode_t mode);
+
+/**
+ * Set if the color mode is changed on long press on center
+ * @param cpicker pointer to colorpicker object
+ * @param fixed color mode cannot be changed on long press
+ */
+void lv_cpicker_set_color_mode_fixed(lv_obj_t * cpicker, bool fixed);
+
+/**
+ * Make the indicator to be colored to the current color
+ * @param cpicker pointer to colorpicker object
+ * @param en true: color the indicator; false: not color the indicator
+ */
+void lv_cpicker_set_indic_colored(lv_obj_t * cpicker, bool en);
+
+/**
+ * Add a color preview in the middle of the DISC type color picker
+ * @param cpicker pointer to colorpicker object
+ * @param en true: enable preview; false: disable preview
+ */
+void lv_cpicker_set_preview(lv_obj_t * cpicker, bool en);
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+/**
+ * Get the current color mode.
+ * @param cpicker pointer to colorpicker object
+ * @return color mode (hue/sat/val)
+ */
+lv_cpicker_color_mode_t lv_cpicker_get_color_mode(lv_obj_t * cpicker);
+
+/**
+ * Get if the color mode is changed on long press on center
+ * @param cpicker pointer to colorpicker object
+ * @return mode cannot be changed on long press
+ */
+bool lv_cpicker_get_color_mode_fixed(lv_obj_t * cpicker);
+
+/**
+ * Get style of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @param type which style should be get
+ * @return pointer to the style
+ */
+const lv_style_t * lv_cpicker_get_style(const lv_obj_t * cpicker, lv_cpicker_style_t type);
+
+/**
+ * Get the current hue of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return current selected hue
+ */
+uint16_t lv_cpicker_get_hue(lv_obj_t * cpicker);
+
+/**
+ * Get the current saturation of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return current selected saturation
+ */
+uint8_t lv_cpicker_get_saturation(lv_obj_t * cpicker);
+
+/**
+ * Get the current hue of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return current selected value
+ */
+uint8_t lv_cpicker_get_value(lv_obj_t * cpicker);
+
+/**
+ * Get the current selected hsv of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return current selected hsv
+ */
+lv_color_hsv_t lv_cpicker_get_hsv(lv_obj_t * cpicker);
+
+/**
+ * Get the current selected color of a colorpicker.
+ * @param cpicker pointer to colorpicker object
+ * @return current selected color
+ */
+lv_color_t lv_cpicker_get_color(lv_obj_t * cpicker);
+
+/**
+ * Whether the indicator is colored to the current color or not
+ * @param cpicker pointer to colorpicker object
+ * @return true: color the indicator; false: not color the indicator
+ */
+bool lv_cpicker_get_indic_colored(lv_obj_t * cpicker);
+
+/**
+ * Whether the preview is enabled or not
+ * @param cpicker pointer to colorpicker object
+ * @return en true: preview is enabled; false: preview is disabled
+ */
+bool lv_cpicker_get_preview(lv_obj_t * cpicker);
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ * MACROS
+ **********************/
+
+#endif /*LV_USE_CPICKER*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_CPICKER_H*/
diff --git a/src/lv_objx/lv_ddlist.c b/src/lv_objx/lv_ddlist.c
index 3deeed174..3209ad6bc 100644
--- a/src/lv_objx/lv_ddlist.c
+++ b/src/lv_objx/lv_ddlist.c
@@ -9,6 +9,7 @@
#include "lv_ddlist.h"
#if LV_USE_DDLIST != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_core/lv_group.h"
#include "../lv_core/lv_indev.h"
@@ -21,6 +22,8 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_ddlist"
+
#if LV_USE_ANIMATION == 0
#undef LV_DDLIST_DEF_ANIM_TIME
#define LV_DDLIST_DEF_ANIM_TIME 0 /*No animation*/
@@ -33,7 +36,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * param);
static lv_res_t lv_ddlist_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
static lv_res_t release_handler(lv_obj_t * ddlist);
@@ -74,7 +77,7 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor drop down list*/
lv_obj_t * new_ddlist = lv_page_create(par, copy);
- lv_mem_assert(new_ddlist);
+ LV_ASSERT_MEM(new_ddlist);
if(new_ddlist == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_ddlist);
@@ -83,18 +86,21 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
/*Allocate the drop down list type specific extended data*/
lv_ddlist_ext_t * ext = lv_obj_allocate_ext_attr(new_ddlist, sizeof(lv_ddlist_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_ddlist);
+ return NULL;
+ }
/*Initialize the allocated 'ext' */
ext->label = NULL;
+ ext->symbol = NULL;
ext->opened = 0;
ext->fix_height = 0;
ext->sel_opt_id = 0;
ext->sel_opt_id_ori = 0;
ext->option_cnt = 0;
ext->sel_style = &lv_style_plain_color;
- ext->draw_arrow = 0; /*Do not draw arrow by default*/
ext->stay_open = 0;
/*The signal and design functions are not copied so set them here*/
@@ -110,6 +116,11 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
lv_obj_set_drag(scrl, false);
lv_page_set_scrl_fit2(new_ddlist, LV_FIT_FILL, LV_FIT_TIGHT);
+ /*Save (a later restore) the original X coordinate because it changes as the FITs applies*/
+ lv_coord_t x;
+ if(lv_obj_get_base_dir(new_ddlist) == LV_BIDI_DIR_RTL) x = lv_obj_get_x(new_ddlist) + lv_obj_get_width(new_ddlist);
+ else x = lv_obj_get_x(new_ddlist);
+
ext->label = lv_label_create(new_ddlist, NULL);
lv_cont_set_fit2(new_ddlist, LV_FIT_TIGHT, LV_FIT_NONE);
lv_page_set_sb_mode(new_ddlist, LV_SB_MODE_HIDE);
@@ -117,6 +128,10 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
lv_ddlist_set_options(new_ddlist, "Option 1\nOption 2\nOption 3");
+ /*Restore the original X coordinate*/
+ if(lv_obj_get_base_dir(new_ddlist) == LV_BIDI_DIR_RTL) lv_obj_set_x(new_ddlist, x - lv_obj_get_width(new_ddlist));
+ else lv_obj_set_x(new_ddlist, x);
+
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
@@ -128,6 +143,8 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SEL, &lv_style_plain_color);
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_SB, &lv_style_pretty_color);
}
+
+
}
/*Copy an existing drop down list*/
else {
@@ -139,7 +156,7 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
ext->fix_height = copy_ext->fix_height;
ext->option_cnt = copy_ext->option_cnt;
ext->sel_style = copy_ext->sel_style;
- ext->draw_arrow = copy_ext->draw_arrow;
+ ext->symbol = copy_ext->symbol;
ext->stay_open = copy_ext->stay_open;
lv_ddlist_set_style(new_ddlist, LV_DDLIST_STYLE_BG, lv_ddlist_get_style(copy, LV_DDLIST_STYLE_BG));
@@ -164,6 +181,9 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+ LV_ASSERT_STR(options);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
/*Count the '\n'-s to determine the number of options*/
@@ -180,7 +200,8 @@ void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options)
lv_ddlist_refr_width(ddlist);
- switch(lv_label_get_align(ext->label)) {
+ lv_label_align_t align = lv_label_get_align(ext->label);
+ switch(align) {
case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
@@ -196,6 +217,8 @@ void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options)
*/
void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
if(ext->sel_opt_id == sel_opt) return;
@@ -217,6 +240,8 @@ void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt)
*/
void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
if(ext->fix_height == h) return;
@@ -232,6 +257,8 @@ void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h)
*/
void lv_ddlist_set_fix_width(lv_obj_t * ddlist, lv_coord_t w)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
if(w == 0) {
lv_cont_set_fit2(ddlist, LV_FIT_TIGHT, lv_cont_get_fit_bottom(ddlist));
@@ -250,16 +277,17 @@ void lv_ddlist_set_fix_width(lv_obj_t * ddlist, lv_coord_t w)
}
/**
- * Set arrow draw in a drop down list
+ * Set an arrow or other symbol to display when the drop-down list is closed.
* @param ddlist pointer to drop down list object
- * @param en enable/disable a arrow draw. E.g. "true" for draw.
+ * @param symbol a text like `LV_SYMBOL_DOWN` or NULL to not draw icon
*/
-void lv_ddlist_set_draw_arrow(lv_obj_t * ddlist, bool en)
+void lv_ddlist_set_symbol(lv_obj_t * ddlist, const char * symbol)
{
- lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
- /*Set the flag*/
- ext->draw_arrow = en ? 1 : 0;
+ lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+ ext->symbol = symbol;
+ lv_obj_invalidate(ddlist);
}
/**
@@ -269,6 +297,8 @@ void lv_ddlist_set_draw_arrow(lv_obj_t * ddlist, bool en)
*/
void lv_ddlist_set_stay_open(lv_obj_t * ddlist, bool en)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
/*Set the flag*/
@@ -283,6 +313,8 @@ void lv_ddlist_set_stay_open(lv_obj_t * ddlist, bool en)
*/
void lv_ddlist_set_style(lv_obj_t * ddlist, lv_ddlist_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
switch(type) {
@@ -301,6 +333,8 @@ void lv_ddlist_set_style(lv_obj_t * ddlist, lv_ddlist_style_t type, const lv_sty
void lv_ddlist_set_align(lv_obj_t * ddlist, lv_label_align_t align)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
lv_label_set_align(ext->label, align);
@@ -321,6 +355,8 @@ void lv_ddlist_set_align(lv_obj_t * ddlist, lv_label_align_t align)
*/
const char * lv_ddlist_get_options(const lv_obj_t * ddlist)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
return lv_label_get_text(ext->label);
}
@@ -332,6 +368,8 @@ const char * lv_ddlist_get_options(const lv_obj_t * ddlist)
*/
uint16_t lv_ddlist_get_selected(const lv_obj_t * ddlist)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
return ext->sel_opt_id;
@@ -345,12 +383,14 @@ uint16_t lv_ddlist_get_selected(const lv_obj_t * ddlist)
*/
void lv_ddlist_get_selected_str(const lv_obj_t * ddlist, char * buf, uint16_t buf_size)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
uint16_t i;
uint16_t line = 0;
const char * opt_txt = lv_label_get_text(ext->label);
- uint16_t txt_len = strlen(opt_txt);
+ size_t txt_len = strlen(opt_txt);
for(i = 0; i < txt_len && line != ext->sel_opt_id; i++) {
if(opt_txt[i] == '\n') line++;
@@ -375,19 +415,24 @@ void lv_ddlist_get_selected_str(const lv_obj_t * ddlist, char * buf, uint16_t bu
*/
lv_coord_t lv_ddlist_get_fix_height(const lv_obj_t * ddlist)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
return ext->fix_height;
}
/**
- * Get arrow draw in a drop down list
+ * Get the symbol to draw when the drop-down list is closed
* @param ddlist pointer to drop down list object
+ * @return the symbol or NULL if not enabled
*/
-bool lv_ddlist_get_draw_arrow(lv_obj_t * ddlist)
+const char * lv_ddlist_get_symbol(lv_obj_t * ddlist)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
- return ext->draw_arrow ? true : false;
+ return ext->symbol;
}
/**
@@ -396,6 +441,8 @@ bool lv_ddlist_get_draw_arrow(lv_obj_t * ddlist)
*/
bool lv_ddlist_get_stay_open(lv_obj_t * ddlist)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
return ext->stay_open ? true : false;
@@ -409,17 +456,26 @@ bool lv_ddlist_get_stay_open(lv_obj_t * ddlist)
*/
const lv_style_t * lv_ddlist_get_style(const lv_obj_t * ddlist, lv_ddlist_style_t type)
{
+ LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
+
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+ const lv_style_t * style;
switch(type) {
- case LV_DDLIST_STYLE_BG: return lv_page_get_style(ddlist, LV_PAGE_STYLE_BG);
- case LV_DDLIST_STYLE_SB: return lv_page_get_style(ddlist, LV_PAGE_STYLE_SB);
- case LV_DDLIST_STYLE_SEL: return ext->sel_style;
- default: return NULL;
+ case LV_DDLIST_STYLE_BG:
+ style = lv_page_get_style(ddlist, LV_PAGE_STYLE_BG);
+ break;
+ case LV_DDLIST_STYLE_SB:
+ style = lv_page_get_style(ddlist, LV_PAGE_STYLE_SB);
+ break;
+ case LV_DDLIST_STYLE_SEL:
+ style = ext->sel_style;
+ break;
+ default:
+ style = NULL;
}
- /*To avoid warning*/
- return NULL;
+ return style;
}
lv_label_align_t lv_ddlist_get_align(const lv_obj_t * ddlist)
@@ -494,22 +550,22 @@ static lv_txt_flag_t lv_ddlist_get_txt_flag(const lv_obj_t * ddlist)
/**
* Handle the drawing related tasks of the drop down lists
* @param ddlist pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design(ddlist, mask, mode);
+ return ancestor_design(ddlist, clip_area, mode);
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
- ancestor_design(ddlist, mask, mode);
+ ancestor_design(ddlist, clip_area, mode);
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
lv_opa_t opa_scale = lv_obj_get_opa_scale(ddlist);
@@ -529,7 +585,7 @@ static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_desig
rect_area.x1 = ddlist->coords.x1;
rect_area.x2 = ddlist->coords.x2;
- lv_draw_rect(&rect_area, mask, ext->sel_style, opa_scale);
+ lv_draw_rect(&rect_area, clip_area, ext->sel_style, opa_scale);
}
}
/*Post draw when the children are drawn*/
@@ -554,7 +610,7 @@ static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_desig
area_sel.x2 = ddlist->coords.x2;
lv_area_t mask_sel;
bool area_ok;
- area_ok = lv_area_intersect(&mask_sel, mask, &area_sel);
+ area_ok = lv_area_intersect(&mask_sel, clip_area, &area_sel);
if(area_ok) {
const lv_style_t * sel_style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_SEL);
lv_style_t new_style;
@@ -563,14 +619,14 @@ static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_desig
new_style.text.opa = sel_style->text.opa;
lv_txt_flag_t flag = lv_ddlist_get_txt_flag(ddlist);
lv_draw_label(&ext->label->coords, &mask_sel, &new_style, opa_scale, lv_label_get_text(ext->label),
- flag, NULL, -1, -1, NULL);
+ flag, NULL, NULL, NULL, lv_obj_get_base_dir(ddlist));
}
}
- /*Add a down symbol in ddlist when closed*/
+ /*Closed...*/
else {
- /*Draw a arrow in ddlist if enabled*/
- if(ext->draw_arrow) {
+ /*Draw the symbol if enabled*/
+ if(ext->symbol) {
const lv_style_t * style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_BG);
const lv_font_t * font = style->text.font;
const lv_style_t * sel_style = lv_ddlist_get_style(ddlist, LV_DDLIST_STYLE_BG);
@@ -579,29 +635,34 @@ static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, lv_desig
lv_style_copy(&new_style, style);
new_style.text.color = sel_style->text.color;
new_style.text.opa = sel_style->text.opa;
- lv_area_t area_arrow;
- area_arrow.x2 = ddlist->coords.x2 - style->body.padding.right;
- area_arrow.x1 = area_arrow.x2 -
- lv_txt_get_width(LV_SYMBOL_DOWN, strlen(LV_SYMBOL_DOWN), sel_style->text.font, 0, 0);
+ lv_area_t area_icon;
+ lv_coord_t icon_width = lv_txt_get_width(ext->symbol, (uint16_t)strlen(ext->symbol), sel_style->text.font, 0, 0);
- area_arrow.y1 = ddlist->coords.y1 + style->text.line_space;
- area_arrow.y2 = area_arrow.y1 + font_h;
+ if(lv_label_get_align(ext->label) != LV_LABEL_ALIGN_RIGHT) {
+ area_icon.x2 = ddlist->coords.x2 - style->body.padding.right;
+ area_icon.x1 = area_icon.x2 - icon_width;
+ } else {
+ area_icon.x1 = ddlist->coords.x1 + style->body.padding.left;
+ area_icon.x2 = area_icon.x1 + icon_width;
+ }
- lv_area_t mask_arrow;
+ area_icon.y1 = ddlist->coords.y1 + style->text.line_space;
+ area_icon.y2 = area_icon.y1 + font_h;
+
+ lv_area_t mask_icon;
bool area_ok;
- area_ok = lv_area_intersect(&mask_arrow, mask, &area_arrow);
+ area_ok = lv_area_intersect(&mask_icon, clip_area, &area_icon);
if(area_ok) {
- lv_draw_label(&area_arrow, &mask_arrow, &new_style, opa_scale, LV_SYMBOL_DOWN, LV_TXT_FLAG_NONE,
- NULL, -1, -1, NULL); /*Use a down arrow in ddlist, you can replace it with your
- custom symbol*/
+ lv_draw_label(&area_icon, &mask_icon, &new_style, opa_scale, ext->symbol, LV_TXT_FLAG_NONE,
+ NULL, NULL, NULL, lv_obj_get_base_dir(ddlist));
}
}
}
/*Draw the scrollbar in the ancestor page design function*/
- ancestor_design(ddlist, mask, mode);
+ ancestor_design(ddlist, clip_area, mode);
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -617,10 +678,20 @@ static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * par
/* Include the ancient signal function */
res = ancestor_signal(ddlist, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
if(sign == LV_SIGNAL_STYLE_CHG) {
+ lv_ddlist_refr_size(ddlist, 0);
+ } else if(sign == LV_SIGNAL_BASE_DIR_CHG) {
+ lv_label_align_t align = lv_label_get_align(ext->label);
+ switch(align) {
+ case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
+ case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
+ case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
+ }
+
lv_ddlist_refr_size(ddlist, 0);
} else if(sign == LV_SIGNAL_CLEANUP) {
ext->label = NULL;
@@ -695,13 +766,6 @@ static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * par
} else if(sign == LV_SIGNAL_GET_EDITABLE) {
bool * editable = (bool *)param;
*editable = true;
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_ddlist";
}
return res;
@@ -947,11 +1011,27 @@ static void lv_ddlist_pos_current_option(lv_obj_t * ddlist)
*/
static void lv_ddlist_refr_width(lv_obj_t * ddlist)
{
+ /*Save the current x coordinate because it should be kept after the refrsh*/
+ lv_coord_t x;
+ if(lv_obj_get_base_dir(ddlist) == LV_BIDI_DIR_RTL) x = lv_obj_get_x(ddlist) + lv_obj_get_width(ddlist);
+ else x = lv_obj_get_x(ddlist);
+
+ lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist);
+
/*Set the TIGHT fit horizontally the set the width to the content*/
lv_page_set_scrl_fit2(ddlist, LV_FIT_TIGHT, lv_page_get_scrl_fit_bottom(ddlist));
/*Revert FILL fit to fill the parent with the options area. It allows to RIGHT/CENTER align the text*/
lv_page_set_scrl_fit2(ddlist, LV_FIT_FILL, lv_page_get_scrl_fit_bottom(ddlist));
+
+ if(lv_obj_get_base_dir(ddlist) == LV_BIDI_DIR_RTL) lv_obj_set_x(ddlist, x - lv_obj_get_width(ddlist));
+ else lv_obj_set_x(ddlist, x);
+
+ switch(lv_label_get_align(ext->label)) {
+ case LV_LABEL_ALIGN_LEFT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0); break;
+ case LV_LABEL_ALIGN_CENTER: lv_obj_align(ext->label, NULL, LV_ALIGN_CENTER, 0, 0); break;
+ case LV_LABEL_ALIGN_RIGHT: lv_obj_align(ext->label, NULL, LV_ALIGN_IN_RIGHT_MID, 0, 0); break;
+ }
}
#endif
diff --git a/src/lv_objx/lv_ddlist.h b/src/lv_objx/lv_ddlist.h
index ee6c1f70d..774b52cef 100644
--- a/src/lv_objx/lv_ddlist.h
+++ b/src/lv_objx/lv_ddlist.h
@@ -48,12 +48,12 @@ typedef struct
/*New data for this type */
lv_obj_t * label; /*Label for the options*/
const lv_style_t * sel_style; /*Style of the selected option*/
+ const char * symbol; /*Arrow or other icon when the drop-down list is closed*/
uint16_t option_cnt; /*Number of options*/
uint16_t sel_opt_id; /*Index of the current option*/
uint16_t sel_opt_id_ori; /*Store the original index on focus*/
uint8_t opened : 1; /*1: The list is opened (handled by the library)*/
uint8_t force_sel : 1; /*1: Keep the selection highlight even if the list is closed*/
- uint8_t draw_arrow : 1; /*1: Draw arrow*/
uint8_t stay_open : 1; /*1: Don't close the list when a new item is selected*/
lv_coord_t fix_height; /*Height of the ddlist when opened. (0: auto-size)*/
} lv_ddlist_ext_t;
@@ -110,13 +110,13 @@ void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h);
*/
void lv_ddlist_set_fix_width(lv_obj_t * ddlist, lv_coord_t w);
-/**
- * Set arrow draw in a drop down list
- * @param ddlist pointer to drop down list object
- * @param en enable/disable a arrow draw. E.g. "true" for draw.
- */
-void lv_ddlist_set_draw_arrow(lv_obj_t * ddlist, bool en);
+/**
+ * Set an arrow or other symbol to display when the drop-down list is closed.
+ * @param ddlist pointer to drop down list object
+ * @param symbol a text like `LV_SYMBOL_DOWN` or NULL to not draw icon
+ */
+void lv_ddlist_set_symbol(lv_obj_t * ddlist, const char * symbol);
/**
* Leave the list opened when a new value is selected
* @param ddlist pointer to drop down list object
@@ -192,10 +192,11 @@ void lv_ddlist_get_selected_str(const lv_obj_t * ddlist, char * buf, uint16_t bu
lv_coord_t lv_ddlist_get_fix_height(const lv_obj_t * ddlist);
/**
- * Get arrow draw in a drop down list
+ * Get the symbol to draw when the drop-down list is closed
* @param ddlist pointer to drop down list object
+ * @return the symbol or NULL if not enabled
*/
-bool lv_ddlist_get_draw_arrow(lv_obj_t * ddlist);
+const char * lv_ddlist_get_symbol(lv_obj_t * ddlist);
/**
* Get whether the drop down list stay open after selecting a value or not
diff --git a/src/lv_objx/lv_gauge.c b/src/lv_objx/lv_gauge.c
index 5703b910f..2308f76f1 100644
--- a/src/lv_objx/lv_gauge.c
+++ b/src/lv_objx/lv_gauge.c
@@ -9,23 +9,25 @@
#include "lv_gauge.h"
#if LV_USE_GAUGE != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_txt.h"
#include "../lv_misc/lv_math.h"
#include "../lv_misc/lv_utils.h"
+#include "lv_img.h"
#include
#include
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_gauge"
+
#define LV_GAUGE_DEF_NEEDLE_COLOR LV_COLOR_RED
#define LV_GAUGE_DEF_LABEL_COUNT 6
#define LV_GAUGE_DEF_LINE_COUNT 21 /*Should be: ((label_cnt - 1) * internal_lines) + 1*/
#define LV_GAUGE_DEF_ANGLE 220
-#define LV_GAUGE_INTERPOLATE_SHIFT 5 /*Interpolate the needle drawing between to degrees*/
-#define LV_GAUGE_INTERPOLATE_MASK 0x1F
/**********************
* TYPEDEFS
@@ -34,10 +36,10 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_gauge_design(lv_obj_t * gauge, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_gauge_design(lv_obj_t * gauge, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void * param);
static void lv_gauge_draw_scale(lv_obj_t * gauge, const lv_area_t * mask);
-static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * mask);
+static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * clip_area);
/**********************
* STATIC VARIABLES
@@ -65,19 +67,26 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor gauge*/
lv_obj_t * new_gauge = lv_lmeter_create(par, copy);
- lv_mem_assert(new_gauge);
+ LV_ASSERT_MEM(new_gauge);
if(new_gauge == NULL) return NULL;
/*Allocate the gauge type specific extended data*/
lv_gauge_ext_t * ext = lv_obj_allocate_ext_attr(new_gauge, sizeof(lv_gauge_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_gauge);
+ return NULL;
+ }
/*Initialize the allocated 'ext' */
ext->needle_count = 0;
ext->values = NULL;
ext->needle_colors = NULL;
ext->label_count = LV_GAUGE_DEF_LABEL_COUNT;
+
+ ext->needle_img = 0;
+ ext->needle_img_pivot.x = 0;
+ ext->needle_img_pivot.y = 0;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_gauge);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_gauge);
@@ -131,6 +140,8 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const lv_color_t colors[])
{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
if(ext->needle_count != needle_cnt) {
@@ -140,7 +151,7 @@ void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const lv_co
}
ext->values = lv_mem_realloc(ext->values, needle_cnt * sizeof(int16_t));
- lv_mem_assert(ext->values);
+ LV_ASSERT_MEM(ext->values);
if(ext->values == NULL) return;
int16_t min = lv_gauge_get_min_value(gauge);
@@ -164,6 +175,8 @@ void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const lv_co
*/
void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int16_t value)
{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
if(needle_id >= ext->needle_count) return;
@@ -187,12 +200,14 @@ void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int16_t value)
* @param gauge pointer to a gauge object
* @param angle angle of the scale (0..360)
* @param line_cnt count of scale lines.
- * The get a given "subdivision" lines between label, `line_cnt` = (sub_div + 1) * (label_cnt - 1) +
- * 1
+ * To get a given "subdivision" lines between labels:
+ * `line_cnt = (sub_div + 1) * (label_cnt - 1) + 1 `
* @param label_cnt count of scale labels.
*/
void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_cnt, uint8_t label_cnt)
{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
lv_lmeter_set_scale(gauge, angle, line_cnt);
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
@@ -200,6 +215,28 @@ void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_cnt, uint
lv_obj_invalidate(gauge);
}
+/**
+ * Set an image to display as needle(s).
+ * The needle image should be horizontal and pointing to the right (`--->`).
+ * @param gauge pointer to a gauge object
+ * @param img_src pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
+ * @param pivot_x the X coordinate of rotation center of the image
+ * @param pivot_y the Y coordinate of rotation center of the image
+ */
+void lv_gauge_set_needle_img(lv_obj_t * gauge, const void * img, lv_coord_t pivot_x, lv_coord_t pivot_y)
+{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
+ lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
+
+ ext->needle_img = img;
+ ext->needle_img_pivot.x = pivot_x;
+ ext->needle_img_pivot.y = pivot_y;
+
+ lv_obj_invalidate(gauge);
+}
+
/*=====================
* Getter functions
*====================*/
@@ -212,6 +249,8 @@ void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_cnt, uint
*/
int16_t lv_gauge_get_value(const lv_obj_t * gauge, uint8_t needle)
{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
int16_t min = lv_gauge_get_min_value(gauge);
@@ -227,6 +266,8 @@ int16_t lv_gauge_get_value(const lv_obj_t * gauge, uint8_t needle)
*/
uint8_t lv_gauge_get_needle_count(const lv_obj_t * gauge)
{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
return ext->needle_count;
}
@@ -238,10 +279,56 @@ uint8_t lv_gauge_get_needle_count(const lv_obj_t * gauge)
*/
uint8_t lv_gauge_get_label_count(const lv_obj_t * gauge)
{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
return ext->label_count;
}
+/**
+ * Get an image to display as needle(s).
+ * @param gauge pointer to a gauge object
+ * @return pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object). `NULL` if not used.
+ */
+const void * lv_gauge_get_needle_img(lv_obj_t * gauge, const void * img, lv_coord_t pivot_x, lv_coord_t pivot_y)
+{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
+ lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
+
+ return ext->needle_img;
+}
+
+/**
+ * Get the X coordinate of the rotation center of the needle image
+ * @param gauge pointer to a gauge object
+ * @return the X coordinate of rotation center of the image
+ */
+lv_coord_t lv_gauge_get_needle_img_pivot_x(lv_obj_t * gauge)
+{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
+ lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
+
+ return ext->needle_img_pivot.x;
+}
+
+/**
+ * Get the Y coordinate of the rotation center of the needle image
+ * @param gauge pointer to a gauge object
+ * @return the X coordinate of rotation center of the image
+ */
+lv_coord_t lv_gauge_get_needle_img_pivot_y(lv_obj_t * gauge)
+{
+ LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
+
+ lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
+
+ return ext->needle_img_pivot.y;
+}
+
+
/**********************
* STATIC FUNCTIONS
**********************/
@@ -249,19 +336,18 @@ uint8_t lv_gauge_get_label_count(const lv_obj_t * gauge)
/**
* Handle the drawing related tasks of the gauges
* @param gauge pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_gauge_design(lv_obj_t * gauge, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_gauge_design(lv_obj_t * gauge, const lv_area_t * clip_area, lv_design_mode_t mode)
{
-
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
@@ -273,11 +359,11 @@ static bool lv_gauge_design(lv_obj_t * gauge, const lv_area_t * mask, lv_design_
const lv_style_t * style = lv_obj_get_style(gauge);
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
- lv_gauge_draw_scale(gauge, mask);
+ lv_gauge_draw_scale(gauge, clip_area);
/*Draw the ancestor line meter with max value to show the rainbow like line colors*/
uint16_t line_cnt_tmp = ext->lmeter.line_cnt;
- ancestor_design(gauge, mask, mode); /*To draw lines*/
+ ancestor_design(gauge, clip_area, mode); /*To draw lines*/
/*Temporally modify the line meter to draw longer lines where labels are*/
lv_style_t style_tmp;
@@ -287,20 +373,20 @@ static bool lv_gauge_design(lv_obj_t * gauge, const lv_area_t * mask, lv_design_
style_tmp.body.padding.right = style_tmp.body.padding.right * 2; /*Longer lines*/
gauge->style_p = &style_tmp;
- ancestor_design(gauge, mask, mode); /*To draw lines*/
+ ancestor_design(gauge, clip_area, mode); /*To draw lines*/
ext->lmeter.line_cnt = line_cnt_tmp; /*Restore the parameters*/
gauge->style_p = style_ori_p; /*Restore the ORIGINAL style pointer*/
- lv_gauge_draw_needle(gauge, mask);
+ lv_gauge_draw_needle(gauge, clip_area);
}
/*Post draw when the children are drawn*/
else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_design(gauge, mask, mode);
+ ancestor_design(gauge, clip_area, mode);
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -317,18 +403,12 @@ static lv_res_t lv_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void * param
/* Include the ancient signal function */
res = ancestor_signal(gauge, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
if(sign == LV_SIGNAL_CLEANUP) {
lv_mem_free(ext->values);
ext->values = NULL;
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_gauge";
}
return res;
@@ -381,7 +461,7 @@ static void lv_gauge_draw_scale(lv_obj_t * gauge, const lv_area_t * mask)
label_cord.x2 = label_cord.x1 + label_size.x;
label_cord.y2 = label_cord.y1 + label_size.y;
- lv_draw_label(&label_cord, mask, style, opa_scale, scale_txt, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL);
+ lv_draw_label(&label_cord, mask, style, opa_scale, scale_txt, LV_TXT_FLAG_NONE, NULL, NULL, NULL, lv_obj_get_base_dir(gauge));
}
}
/**
@@ -389,7 +469,7 @@ static void lv_gauge_draw_scale(lv_obj_t * gauge, const lv_area_t * mask)
* @param gauge pointer to gauge object
* @param mask mask of drawing
*/
-static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * mask)
+static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * clip_area)
{
lv_style_t style_needle;
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
@@ -405,45 +485,48 @@ static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * mask)
int16_t max = lv_gauge_get_max_value(gauge);
lv_point_t p_mid;
lv_point_t p_end;
- lv_point_t p_end_low;
- lv_point_t p_end_high;
uint8_t i;
lv_style_copy(&style_needle, style);
+ if(ext->needle_colors != NULL) {
+ style_needle.image.intense = LV_OPA_COVER;
+ }
p_mid.x = x_ofs;
p_mid.y = y_ofs;
for(i = 0; i < ext->needle_count; i++) {
/*Calculate the end point of a needle*/
+
int16_t needle_angle =
- (ext->values[i] - min) * angle * (1 << LV_GAUGE_INTERPOLATE_SHIFT) / (max - min);
+ (ext->values[i] - min) * angle / (max - min) + angle_ofs;
- int16_t needle_angle_low = (needle_angle >> LV_GAUGE_INTERPOLATE_SHIFT) + angle_ofs;
- int16_t needle_angle_high = needle_angle_low + 1;
+ /*Draw line*/
+ if(ext->needle_img == NULL) {
+ p_end.y = (lv_trigo_sin(needle_angle) * r) / LV_TRIGO_SIN_MAX + y_ofs;
+ p_end.x = (lv_trigo_sin(needle_angle + 90) * r) / LV_TRIGO_SIN_MAX + x_ofs;
- p_end_low.y = (lv_trigo_sin(needle_angle_low) * r) / LV_TRIGO_SIN_MAX + y_ofs;
- p_end_low.x = (lv_trigo_sin(needle_angle_low + 90) * r) / LV_TRIGO_SIN_MAX + x_ofs;
+ /*Draw the needle with the corresponding color*/
+ if(ext->needle_colors != NULL)
+ style_needle.line.color = ext->needle_colors[i];
- p_end_high.y = (lv_trigo_sin(needle_angle_high) * r) / LV_TRIGO_SIN_MAX + y_ofs;
- p_end_high.x = (lv_trigo_sin(needle_angle_high + 90) * r) / LV_TRIGO_SIN_MAX + x_ofs;
+ lv_draw_line(&p_mid, &p_end, clip_area, &style_needle, opa_scale);
+ }
+ /*Draw image*/
+ else {
+ lv_img_header_t info;
+ lv_img_decoder_get_info(ext->needle_img, &info);
- uint16_t rem = needle_angle & ((1 << LV_GAUGE_INTERPOLATE_SHIFT) - 1);
- int16_t x_mod = ((LV_MATH_ABS(p_end_high.x - p_end_low.x)) * rem) >> LV_GAUGE_INTERPOLATE_SHIFT;
- int16_t y_mod = ((LV_MATH_ABS(p_end_high.y - p_end_low.y)) * rem) >> LV_GAUGE_INTERPOLATE_SHIFT;
+ lv_area_t a;
+ a.x1 = gauge->coords.x1 + lv_area_get_width(&gauge->coords) / 2 - ext->needle_img_pivot.x;
+ a.y1 = gauge->coords.y1 + lv_area_get_height(&gauge->coords) / 2 - ext->needle_img_pivot.y;
+ a.x2 = a.x1 + info.w - 1;
+ a.y2 = a.y1 + info.h - 1;
- if(p_end_high.x < p_end_low.x) x_mod = -x_mod;
- if(p_end_high.y < p_end_low.y) y_mod = -y_mod;
+ if(ext->needle_colors != NULL)
+ style_needle.image.color = ext->needle_colors[i];
- p_end.x = p_end_low.x + x_mod;
- p_end.y = p_end_low.y + y_mod;
-
- /*Draw the needle with the corresponding color*/
- if(ext->needle_colors == NULL)
- style_needle.line.color = LV_GAUGE_DEF_NEEDLE_COLOR;
- else
- style_needle.line.color = ext->needle_colors[i];
-
- lv_draw_line(&p_mid, &p_end, mask, &style_needle, opa_scale);
+ lv_draw_img(&a, clip_area, ext->needle_img, &style_needle, needle_angle, &ext->needle_img_pivot, LV_IMG_ZOOM_NONE, true, opa_scale);
+ }
}
/*Draw the needle middle area*/
@@ -459,7 +542,7 @@ static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * mask)
nm_cord.x2 = x_ofs + style->body.radius;
nm_cord.y2 = y_ofs + style->body.radius;
- lv_draw_rect(&nm_cord, mask, &style_neddle_mid, lv_obj_get_opa_scale(gauge));
+ lv_draw_rect(&nm_cord, clip_area, &style_neddle_mid, lv_obj_get_opa_scale(gauge));
}
#endif
diff --git a/src/lv_objx/lv_gauge.h b/src/lv_objx/lv_gauge.h
index fb7cf366a..6b03a8404 100644
--- a/src/lv_objx/lv_gauge.h
+++ b/src/lv_objx/lv_gauge.h
@@ -46,6 +46,8 @@ typedef struct
/*New data for this type */
int16_t * values; /*Array of the set values (for needles) */
const lv_color_t * needle_colors; /*Color of the needles (lv_color_t my_colors[needle_num])*/
+ const void * needle_img;
+ lv_point_t needle_img_pivot;
uint8_t needle_count; /*Number of needles*/
uint8_t label_count; /*Number of labels on the scale*/
} lv_gauge_ext_t;
@@ -114,12 +116,23 @@ static inline void lv_gauge_set_critical_value(lv_obj_t * gauge, int16_t value)
* @param gauge pointer to a gauge object
* @param angle angle of the scale (0..360)
* @param line_cnt count of scale lines.
- * The get a given "subdivision" lines between label, `line_cnt` = (sub_div + 1) * (label_cnt - 1) +
- * 1
+ * To get a given "subdivision" lines between labels:
+ * `line_cnt = (sub_div + 1) * (label_cnt - 1) + 1 `
* @param label_cnt count of scale labels.
*/
void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_cnt, uint8_t label_cnt);
+/**
+ * Set an image to display as needle(s).
+ * The needle image should be horizontal and pointing to the right (`--->`).
+ * @param gauge pointer to a gauge object
+ * @param img_src pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
+ * @param pivot_x the X coordinate of rotation center of the image
+ * @param pivot_y the Y coordinate of rotation center of the image
+ */
+void lv_gauge_set_needle_img(lv_obj_t * gauge, const void * img, lv_coord_t pivot_x, lv_coord_t pivot_y);
+
/**
* Set the styles of a gauge
* @param gauge pointer to a gauge object
@@ -208,6 +221,28 @@ static inline uint16_t lv_gauge_get_scale_angle(const lv_obj_t * gauge)
return lv_lmeter_get_scale_angle(gauge);
}
+/**
+ * Get an image to display as needle(s).
+ * @param gauge pointer to a gauge object
+ * @return pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object). `NULL` if not used.
+ */
+const void * lv_gauge_get_needle_img(lv_obj_t * gauge, const void * img, lv_coord_t pivot_x, lv_coord_t pivot_y);
+
+/**
+ * Get the X coordinate of the rotation center of the needle image
+ * @param gauge pointer to a gauge object
+ * @return the X coordinate of rotation center of the image
+ */
+lv_coord_t lv_gauge_get_needle_img_pivot_x(lv_obj_t * gauge);
+
+/**
+ * Get the Y coordinate of the rotation center of the needle image
+ * @param gauge pointer to a gauge object
+ * @return the X coordinate of rotation center of the image
+ */
+lv_coord_t lv_gauge_get_needle_img_pivot_y(lv_obj_t * gauge);
+
/**
* Get the style of a gauge
* @param gauge pointer to a gauge object
diff --git a/src/lv_objx/lv_img.c b/src/lv_objx/lv_img.c
index 3b034d392..c78e1d93f 100644
--- a/src/lv_objx/lv_img.c
+++ b/src/lv_objx/lv_img.c
@@ -14,15 +14,18 @@
#error "lv_img: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
#endif
+#include "../lv_core/lv_debug.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_draw/lv_img_decoder.h"
#include "../lv_misc/lv_fs.h"
#include "../lv_misc/lv_txt.h"
+#include "../lv_misc/lv_math.h"
#include "../lv_misc/lv_log.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_img"
/**********************
* TYPEDEFS
@@ -31,7 +34,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_img_design(lv_obj_t * img, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * param);
/**********************
@@ -61,24 +64,32 @@ lv_obj_t * lv_img_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create a basic object*/
new_img = lv_obj_create(par, copy);
- lv_mem_assert(new_img);
+ LV_ASSERT_MEM(new_img);
if(new_img == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_img);
/*Extend the basic object to image object*/
lv_img_ext_t * ext = lv_obj_allocate_ext_attr(new_img, sizeof(lv_img_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_img);
+ return NULL;
+ }
ext->src = NULL;
ext->src_type = LV_IMG_SRC_UNKNOWN;
ext->cf = LV_IMG_CF_UNKNOWN;
ext->w = lv_obj_get_width(new_img);
ext->h = lv_obj_get_height(new_img);
+ ext->angle = 0;
+ ext->zoom = LV_IMG_ZOOM_NONE;
+ ext->antialias = LV_ANTIALIAS ? 1 : 0;
ext->auto_size = 1;
ext->offset.x = 0;
ext->offset.y = 0;
+ ext->pivot.x = 0;
+ ext->pivot.y = 0;
/*Init the new object*/
lv_obj_set_signal_cb(new_img, lv_img_signal);
@@ -121,6 +132,8 @@ lv_obj_t * lv_img_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_img_set_src(lv_obj_t * img, const void * src_img)
{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
lv_img_src_t src_type = lv_img_src_get_type(src_img);
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
@@ -159,15 +172,20 @@ void lv_img_set_src(lv_obj_t * img, const void * src_img)
} else if(src_type == LV_IMG_SRC_FILE || src_type == LV_IMG_SRC_SYMBOL) {
/* If the new and the old src are the same then it was only a refresh.*/
if(ext->src != src_img) {
- /*If memory was allocated because of the previous `src_type` then free it*/
+ const void * old_src = NULL;
+ /* If memory was allocated because of the previous `src_type` then save its pointer and free after allocation.
+ * It's important to allocate first to be sure the new data will be on a new address.
+ * Else `img_cache` wouldn't see the change in source.*/
if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_SYMBOL) {
- lv_mem_free(ext->src);
+ old_src = ext->src;
}
char * new_str = lv_mem_alloc(strlen(src_img) + 1);
- lv_mem_assert(new_str);
+ LV_ASSERT_MEM(new_str);
if(new_str == NULL) return;
strcpy(new_str, src_img);
ext->src = new_str;
+
+ if(old_src) lv_mem_free(old_src);
}
}
@@ -185,11 +203,16 @@ void lv_img_set_src(lv_obj_t * img, const void * src_img)
ext->w = header.w;
ext->h = header.h;
ext->cf = header.cf;
+ ext->pivot.x = header.w / 2;
+ ext->pivot.y = header.h / 2;
if(lv_img_get_auto_size(img) != false) {
lv_obj_set_size(img, ext->w, ext->h);
}
+ /*Provide enough room for the rotated corners*/
+ if(ext->angle) lv_obj_refresh_ext_draw_pad(img);
+
lv_obj_invalidate(img);
}
@@ -201,6 +224,8 @@ void lv_img_set_src(lv_obj_t * img, const void * src_img)
*/
void lv_img_set_auto_size(lv_obj_t * img, bool en)
{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
ext->auto_size = (en == false ? 0 : 1);
@@ -214,12 +239,14 @@ void lv_img_set_auto_size(lv_obj_t * img, bool en)
*/
void lv_img_set_offset_x(lv_obj_t * img, lv_coord_t x)
{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
- if(x < ext->w - 1) {
- ext->offset.x = x;
- lv_obj_invalidate(img);
- }
+ x = x % ext->w;
+
+ ext->offset.x = x;
+ lv_obj_invalidate(img);
}
/**
@@ -230,12 +257,89 @@ void lv_img_set_offset_x(lv_obj_t * img, lv_coord_t x)
*/
void lv_img_set_offset_y(lv_obj_t * img, lv_coord_t y)
{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
- if(y < ext->h - 1) {
- ext->offset.y = y;
- lv_obj_invalidate(img);
- }
+ y = y % ext->h;
+
+ ext->offset.y = y;
+ lv_obj_invalidate(img);
+}
+
+/**
+ * Set the rotation center of the image.
+ * The image will be rotated around this point
+ * @param img pointer to an image object
+ * @param pivot_x rotation center x of the image
+ * @param pivot_y rotation center y of the image
+ */
+void lv_img_set_pivot(lv_obj_t * img, lv_coord_t pivot_x, lv_coord_t pivot_y)
+{
+ lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
+ if (ext->pivot.x == pivot_x && ext->pivot.y == pivot_y) return;
+
+ lv_obj_invalidate(img);
+ ext->pivot.x = pivot_x;
+ ext->pivot.y = pivot_y;
+ lv_obj_refresh_ext_draw_pad(img);
+ lv_obj_invalidate(img);
+}
+
+/**
+ * Set the rotation angle of the image.
+ * The image will be rotated around its middle point
+ * @param img pointer to an image object
+ * @param angle rotation angle in degree (> 0: clock wise)
+ */
+void lv_img_set_angle(lv_obj_t * img, int16_t angle)
+{
+ if(angle < 0 || angle >= 360) angle = angle % 360;
+
+ lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
+ if(angle == ext->angle) return;
+
+ lv_obj_invalidate(img);
+ ext->angle = angle;
+ lv_obj_refresh_ext_draw_pad(img);
+ lv_obj_invalidate(img);
+}
+
+/**
+ * Set the zoom factor of the image.
+ * @param img pointer to an image object
+ * @param zoom the zoom factor.
+ * - 256 or LV_ZOOM_IMG_NONE for no zoom
+ * - <256: scale down
+ * - >256 scale up
+ * - 128 half size
+ * - 512 double size
+ */
+void lv_img_set_zoom(lv_obj_t * img, uint16_t zoom)
+{
+ lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
+ if(zoom == ext->zoom) return;
+
+ if(zoom == 0) zoom = 1;
+
+ lv_obj_invalidate(img);
+ ext->zoom = zoom;
+ lv_obj_refresh_ext_draw_pad(img);
+ lv_obj_invalidate(img);
+}
+
+/**
+ * Enable/disable anti-aliasing for the transformations (rotate, zoom) or not
+ * @param img pointer to an image object
+ * @param antialias true: anti-aliased; false: not anti-aliased
+ */
+void lv_img_set_antialias(lv_obj_t * img, bool antialias)
+{
+ lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
+ if(antialias == ext->antialias) return;
+
+ ext->antialias = antialias;
+ lv_obj_invalidate(img);
}
/*=====================
@@ -249,6 +353,8 @@ void lv_img_set_offset_y(lv_obj_t * img, lv_coord_t y)
*/
const void * lv_img_get_src(lv_obj_t * img)
{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
return ext->src;
@@ -261,6 +367,8 @@ const void * lv_img_get_src(lv_obj_t * img)
*/
const char * lv_img_get_file_name(const lv_obj_t * img)
{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
if(ext->src_type == LV_IMG_SRC_FILE)
@@ -276,6 +384,8 @@ const char * lv_img_get_file_name(const lv_obj_t * img)
*/
bool lv_img_get_auto_size(const lv_obj_t * img)
{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
return ext->auto_size == 0 ? false : true;
@@ -288,6 +398,8 @@ bool lv_img_get_auto_size(const lv_obj_t * img)
*/
lv_coord_t lv_img_get_offset_x(lv_obj_t * img)
{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
return ext->offset.x;
@@ -300,11 +412,69 @@ lv_coord_t lv_img_get_offset_x(lv_obj_t * img)
*/
lv_coord_t lv_img_get_offset_y(lv_obj_t * img)
{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
return ext->offset.y;
}
+/**
+ * Get the rotation center of the image.
+ * @param img pointer to an image object
+ * @param center rotation center of the image
+ */
+void lv_img_get_pivot(lv_obj_t * img, lv_point_t *pivot)
+{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
+ lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
+
+ *pivot = ext->pivot;
+}
+
+/**
+ * Get the rotation angle of the image.
+ * @param img pointer to an image object
+ * @return rotation angle in degree (0..359)
+ */
+uint16_t lv_img_get_angle(lv_obj_t * img)
+{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
+ lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
+
+ return ext->angle;
+}
+
+/**
+ * Get the zoom factor of the image.
+ * @param img pointer to an image object
+ * @return zoom factor (256: no zoom)
+ */
+uint16_t lv_img_get_zoom(lv_obj_t * img)
+{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
+ lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
+
+ return ext->zoom;
+}
+
+/**
+ * Get whether the transformations (rotate, zoom) are anti-aliased or not
+ * @param img pointer to an image object
+ * @return true: anti-aliased; false: not anti-aliased
+ */
+bool lv_img_get_antialias(lv_obj_t * img)
+{
+ LV_ASSERT_OBJ(img, LV_OBJX_NAME);
+
+ lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
+
+ return ext->antialias ? true : false;
+}
+
/**********************
* STATIC FUNCTIONS
**********************/
@@ -312,23 +482,25 @@ lv_coord_t lv_img_get_offset_y(lv_obj_t * img)
/**
* Handle the drawing related tasks of the images
* @param img pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_img_design(lv_obj_t * img, const lv_area_t * clip_area, lv_design_mode_t mode)
{
const lv_style_t * style = lv_obj_get_style(img);
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
if(mode == LV_DESIGN_COVER_CHK) {
- bool cover = false;
- if(ext->src_type == LV_IMG_SRC_UNKNOWN || ext->src_type == LV_IMG_SRC_SYMBOL) return false;
+ lv_design_res_t cover = LV_DESIGN_RES_NOT_COVER;
+ if(ext->src_type == LV_IMG_SRC_UNKNOWN || ext->src_type == LV_IMG_SRC_SYMBOL || ext->angle != 0) return LV_DESIGN_RES_NOT_COVER;
- if(ext->cf == LV_IMG_CF_TRUE_COLOR || ext->cf == LV_IMG_CF_RAW) cover = lv_area_is_in(mask, &img->coords);
+ if(ext->cf == LV_IMG_CF_TRUE_COLOR || ext->cf == LV_IMG_CF_RAW) {
+ cover = lv_area_is_in(clip_area, &img->coords) ? LV_DESIGN_RES_COVER : LV_DESIGN_RES_NOT_COVER;
+ }
return cover;
} else if(mode == LV_DESIGN_DRAW_MAIN) {
@@ -339,19 +511,22 @@ static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, lv_design_mode
lv_obj_get_coords(img, &coords);
if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_VARIABLE) {
- coords.x1 -= ext->offset.x;
- coords.y1 -= ext->offset.y;
+ coords.x1 += ext->offset.x;
+ coords.y1 += ext->offset.y;
+
+ if(coords.x1 > img->coords.x1) coords.x1 -= ext->w;
+ if(coords.y1 > img->coords.y1) coords.y1 -= ext->h;
LV_LOG_TRACE("lv_img_design: start to draw image");
lv_area_t cords_tmp;
cords_tmp.y1 = coords.y1;
cords_tmp.y2 = coords.y1 + ext->h - 1;
- for(; cords_tmp.y1 < coords.y2; cords_tmp.y1 += ext->h, cords_tmp.y2 += ext->h) {
+ for(; cords_tmp.y1 <= coords.y2; cords_tmp.y1 += ext->h, cords_tmp.y2 += ext->h) {
cords_tmp.x1 = coords.x1;
cords_tmp.x2 = coords.x1 + ext->w - 1;
- for(; cords_tmp.x1 < coords.x2; cords_tmp.x1 += ext->w, cords_tmp.x2 += ext->w) {
- lv_draw_img(&cords_tmp, mask, ext->src, style, opa_scale);
+ for(; cords_tmp.x1 <= coords.x2; cords_tmp.x1 += ext->w, cords_tmp.x2 += ext->w) {
+ lv_draw_img(&cords_tmp, clip_area, ext->src, style, ext->angle, &ext->pivot, ext->zoom, ext->antialias, opa_scale);
}
}
} else if(ext->src_type == LV_IMG_SRC_SYMBOL) {
@@ -359,11 +534,11 @@ static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, lv_design_mode
lv_style_t style_mod;
lv_style_copy(&style_mod, style);
style_mod.text.color = style->image.color;
- lv_draw_label(&coords, mask, &style_mod, opa_scale, ext->src, LV_TXT_FLAG_NONE, NULL, -1, -1, NULL);
+ lv_draw_label(&coords, clip_area, &style_mod, opa_scale, ext->src, LV_TXT_FLAG_NONE, NULL, NULL, NULL, lv_obj_get_base_dir(img));
} else {
/*Trigger the error handler of image drawer*/
LV_LOG_WARN("lv_img_design: image source type is unknown");
- lv_draw_img(&img->coords, mask, NULL, style, opa_scale);
+ lv_draw_img(&img->coords, clip_area, NULL, style, 0, NULL, LV_IMG_ZOOM_NONE, false, opa_scale);
}
}
@@ -385,6 +560,8 @@ static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * param)
res = ancestor_signal(img, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
+
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
if(sign == LV_SIGNAL_CLEANUP) {
if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_SYMBOL) {
@@ -397,13 +574,19 @@ static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * param)
if(ext->src_type == LV_IMG_SRC_SYMBOL) {
lv_img_set_src(img, ext->src);
}
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
+ } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+ /*If the image has angle provide enough room for the rotated corners */
+ if(ext->angle || ext->zoom != LV_IMG_ZOOM_NONE) {
+ lv_sqrt_res_t ds;
+ lv_coord_t max_w = ext->w + LV_MATH_ABS(ext->pivot.x + ext->w / 2);
+ lv_coord_t max_h = ext->h + LV_MATH_ABS(ext->pivot.y + ext->h / 2);
+ lv_sqrt(max_w * max_w + max_h * max_h, &ds);/*Maximum diagonal length*/
+ lv_sqrt(ds.i * ds.i + ds.i * ds.i, &ds); /*Maximum side length of external rectangle*/
+ ds.i = (ds.i * ext->zoom ) >> 8; /*+10 to be sure anything won't be clipped*/
+
+ lv_coord_t d = ds.i / 2;
+ img->ext_draw_pad = LV_MATH_MAX(img->ext_draw_pad, d);
}
- buf->type[i] = "lv_img";
}
return res;
diff --git a/src/lv_objx/lv_img.h b/src/lv_objx/lv_img.h
index d1e14d209..a784e8711 100644
--- a/src/lv_objx/lv_img.h
+++ b/src/lv_objx/lv_img.h
@@ -42,9 +42,13 @@ typedef struct
lv_point_t offset;
lv_coord_t w; /*Width of the image (Handled by the library)*/
lv_coord_t h; /*Height of the image (Handled by the library)*/
+ uint16_t angle; /*rotation angle of the image*/
+ lv_point_t pivot; /*rotation center of the image*/
+ uint16_t zoom; /*256 means no zoom, 512 double size, 128 hasl size*/
uint8_t src_type : 2; /*See: lv_img_src_t*/
uint8_t auto_size : 1; /*1: automatically set the object size to the image size*/
uint8_t cf : 5; /*Color format from `lv_img_color_format_t`*/
+ uint8_t antialias :1; /*Apply anti-aliasing in transformations (rotate, zoom)*/
} lv_img_ext_t;
/*Styles*/
@@ -100,6 +104,42 @@ void lv_img_set_offset_x(lv_obj_t * img, lv_coord_t x);
*/
void lv_img_set_offset_y(lv_obj_t * img, lv_coord_t y);
+/**
+ * Set the rotation center of the image.
+ * The image will be rotated around this point
+ * @param img pointer to an image object
+ * @param pivot_x rotation center x of the image
+ * @param pivot_y rotation center y of the image
+ */
+void lv_img_set_pivot(lv_obj_t * img, lv_coord_t pivot_x, lv_coord_t pivot_y);
+
+/**
+ * Set the rotation angle of the image.
+ * The image will be rotated around its middle point
+ * @param img pointer to an image object
+ * @param angle rotate angle in degree (> 0: clock wise)
+ */
+void lv_img_set_angle(lv_obj_t * img, int16_t angle);
+
+/**
+ * Set the zoom factor of the image.
+ * @param img pointer to an image object
+ * @param zoom the zoom factor.
+ * - 256 or LV_ZOOM_IMG_NONE for no zoom
+ * - <256: scale down
+ * - >256 scale up
+ * - 128 half size
+ * - 512 double size
+ */
+void lv_img_set_zoom(lv_obj_t * img, uint16_t zoom);
+
+/**
+ * Enable/disable anti-aliasing for the transformations (rotate, zoom) or not
+ * @param img pointer to an image object
+ * @param antialias true: anti-aliased; false: not anti-aliased
+ */
+void lv_img_set_antialias(lv_obj_t * img, bool antialias);
+
/**
* Set the style of an image
* @param img pointer to an image object
@@ -151,6 +191,34 @@ lv_coord_t lv_img_get_offset_x(lv_obj_t * img);
*/
lv_coord_t lv_img_get_offset_y(lv_obj_t * img);
+/**
+ * Get the rotation angle of the image.
+ * @param img pointer to an image object
+ * @return rotation angle in degree (0..359)
+ */
+uint16_t lv_img_get_angle(lv_obj_t * img);
+
+/**
+ * Get the rotation center of the image.
+ * @param img pointer to an image object
+ * @param center rotation center of the image
+ */
+void lv_img_get_pivot(lv_obj_t * img, lv_point_t *center);
+
+/**
+ * Get the zoom factor of the image.
+ * @param img pointer to an image object
+ * @return zoom factor (256: no zoom)
+ */
+uint16_t lv_img_get_zoom(lv_obj_t * img);
+
+/**
+ * Get whether the transformations (rotate, zoom) are anti-aliased or not
+ * @param img pointer to an image object
+ * @return true: anti-aliased; false: not anti-aliased
+ */
+bool lv_img_get_antialias(lv_obj_t * img);
+
/**
* Get the style of an image object
* @param img pointer to an image object
diff --git a/src/lv_objx/lv_imgbtn.c b/src/lv_objx/lv_imgbtn.c
index b2e5cf6d8..103c6d801 100644
--- a/src/lv_objx/lv_imgbtn.c
+++ b/src/lv_objx/lv_imgbtn.c
@@ -6,12 +6,17 @@
/*********************
* INCLUDES
*********************/
+
+#include "../lv_core/lv_debug.h"
#include "lv_imgbtn.h"
+#include "lv_label.h"
+
#if LV_USE_IMGBTN != 0
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_imgbtn"
/**********************
* TYPEDEFS
@@ -20,7 +25,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * param);
static void refr_img(lv_obj_t * imgbtn);
@@ -51,19 +56,23 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of image button*/
lv_obj_t * new_imgbtn = lv_btn_create(par, copy);
- lv_mem_assert(new_imgbtn);
+ LV_ASSERT_MEM(new_imgbtn);
if(new_imgbtn == NULL) return NULL;
/*Allocate the image button type specific extended data*/
lv_imgbtn_ext_t * ext = lv_obj_allocate_ext_attr(new_imgbtn, sizeof(lv_imgbtn_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_imgbtn);
+ return NULL;
+ }
+
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_imgbtn);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_imgbtn);
/*Initialize the allocated 'ext' */
#if LV_IMGBTN_TILED == 0
- memset(ext->img_src, 0, sizeof(ext->img_src));
+ memset((void*)ext->img_src, 0, sizeof(ext->img_src));
#else
memset(ext->img_src_left, 0, sizeof(ext->img_src_left));
memset(ext->img_src_mid, 0, sizeof(ext->img_src_mid));
@@ -84,11 +93,11 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
else {
lv_imgbtn_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
#if LV_IMGBTN_TILED == 0
- memcpy(ext->img_src, copy_ext->img_src, sizeof(ext->img_src));
+ memcpy(ext->img_src, (void*)copy_ext->img_src, sizeof(ext->img_src));
#else
- memcpy(ext->img_src_left, copy_ext->img_src_left, sizeof(ext->img_src_left));
- memcpy(ext->img_src_mid, copy_ext->img_src_mid, sizeof(ext->img_src_mid));
- memcpy(ext->img_src_right, copy_ext->img_src_right, sizeof(ext->img_src_right));
+ memcpy(ext->img_src_left, (void*)copy_ext->img_src_left, sizeof(ext->img_src_left));
+ memcpy(ext->img_src_mid, (void*)copy_ext->img_src_mid, sizeof(ext->img_src_mid));
+ memcpy(ext->img_src_right, (void*)copy_ext->img_src_right, sizeof(ext->img_src_right));
#endif
/*Refresh the style with new signal function*/
lv_obj_refresh_style(new_imgbtn);
@@ -112,6 +121,8 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src)
{
+ LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
+
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
ext->img_src[state] = src;
@@ -134,6 +145,17 @@ void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src
void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src_left, const void * src_mid,
const void * src_right)
{
+ LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
+
+
+ if(lv_img_src_get_type(src_left) == LV_IMG_SRC_SYMBOL ||
+ lv_img_src_get_type(src_mid) == LV_IMG_SRC_SYMBOL ||
+ lv_img_src_get_type(src_right) == LV_IMG_SRC_SYMBOL )
+ {
+ LV_LOG_WARN("lv_imgbtn_set_src: symbols are not supported in tiled mode");
+ return;
+ }
+
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
ext->img_src_left[state] = src_left;
@@ -153,6 +175,8 @@ void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src
*/
void lv_imgbtn_set_style(lv_obj_t * imgbtn, lv_imgbtn_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
+
lv_btn_set_style(imgbtn, type, style);
}
@@ -169,6 +193,8 @@ void lv_imgbtn_set_style(lv_obj_t * imgbtn, lv_imgbtn_style_t type, const lv_sty
*/
const void * lv_imgbtn_get_src(lv_obj_t * imgbtn, lv_btn_state_t state)
{
+ LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
+
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
return ext->img_src[state];
@@ -183,6 +209,8 @@ const void * lv_imgbtn_get_src(lv_obj_t * imgbtn, lv_btn_state_t state)
*/
const void * lv_imgbtn_get_src_left(lv_obj_t * imgbtn, lv_btn_state_t state)
{
+ LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
+
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
return ext->img_src_left[state];
@@ -196,6 +224,8 @@ const void * lv_imgbtn_get_src_left(lv_obj_t * imgbtn, lv_btn_state_t state)
*/
const void * lv_imgbtn_get_src_middle(lv_obj_t * imgbtn, lv_btn_state_t state)
{
+ LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
+
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
return ext->img_src_mid[state];
@@ -209,6 +239,8 @@ const void * lv_imgbtn_get_src_middle(lv_obj_t * imgbtn, lv_btn_state_t state)
*/
const void * lv_imgbtn_get_src_right(lv_obj_t * imgbtn, lv_btn_state_t state)
{
+ LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
+
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
return ext->img_src_right[state];
@@ -224,6 +256,8 @@ const void * lv_imgbtn_get_src_right(lv_obj_t * imgbtn, lv_btn_state_t state)
*/
const lv_style_t * lv_imgbtn_get_style(const lv_obj_t * imgbtn, lv_imgbtn_style_t type)
{
+ LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
+
return lv_btn_get_style(imgbtn, type);
}
@@ -242,21 +276,21 @@ const lv_style_t * lv_imgbtn_get_style(const lv_obj_t * imgbtn, lv_imgbtn_style_
/**
* Handle the drawing related tasks of the image buttons
* @param imgbtn pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
- bool cover = false;
+ lv_design_res_t cover = LV_DESIGN_RES_NOT_COVER;
if(ext->act_cf == LV_IMG_CF_TRUE_COLOR || ext->act_cf == LV_IMG_CF_RAW) {
- cover = lv_area_is_in(mask, &imgbtn->coords);
+ cover = lv_area_is_in(clip_area, &imgbtn->coords) ? LV_DESIGN_RES_COVER : LV_DESIGN_RES_NOT_COVER;
}
return cover;
@@ -268,18 +302,25 @@ static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, lv_desig
lv_btn_state_t state = lv_imgbtn_get_state(imgbtn);
const lv_style_t * style = lv_imgbtn_get_style(imgbtn, state);
lv_opa_t opa_scale = lv_obj_get_opa_scale(imgbtn);
-
#if LV_IMGBTN_TILED == 0
const void * src = ext->img_src[state];
- lv_draw_img(&imgbtn->coords, mask, src, style, opa_scale);
+ if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
+ lv_draw_label(&imgbtn->coords, clip_area, style, opa_scale, src, LV_TXT_FLAG_NONE, NULL, NULL, NULL, lv_obj_get_base_dir(imgbtn));
+ } else {
+ lv_draw_img(&imgbtn->coords, clip_area, src, style, 0, NULL, LV_IMG_ZOOM_NONE, false, opa_scale);
+ }
#else
- const void * src;
+ const void * src = ext->img_src_left[state];
+ if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
+ LV_LOG_WARN("lv_imgbtn_design: SYMBOLS are not supported in tiled mode")
+ return LV_DESIGN_RES_OK;
+ }
+
lv_img_header_t header;
lv_area_t coords;
lv_coord_t left_w = 0;
lv_coord_t right_w = 0;
- src = ext->img_src_left[state];
if(src) {
lv_img_decoder_get_info(src, &header);
left_w = header.w;
@@ -287,7 +328,7 @@ static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, lv_desig
coords.y1 = imgbtn->coords.y1;
coords.x2 = coords.x1 + header.w - 1;
coords.y2 = coords.y1 + header.h - 1;
- lv_draw_img(&coords, mask, src, style, opa_scale);
+ lv_draw_img(&coords, clip_area, src, style, 0, LV_IMG_ZOOM_NONE, false, opa_scale);
}
src = ext->img_src_right[state];
@@ -298,25 +339,36 @@ static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, lv_desig
coords.y1 = imgbtn->coords.y1;
coords.x2 = imgbtn->coords.x2;
coords.y2 = imgbtn->coords.y1 + header.h - 1;
- lv_draw_img(&coords, mask, src, style, opa_scale);
+ lv_draw_img(&coords, clip_area, src, style, 0, LV_IMG_ZOOM_NONE, false, opa_scale);
}
src = ext->img_src_mid[state];
if(src) {
- lv_coord_t obj_w = lv_obj_get_width(imgbtn);
- lv_coord_t i;
- lv_img_decoder_get_info(src, &header);
+ lv_area_t clip_center_area;
+ clip_center_area.x1 = imgbtn->coords.x1 + left_w;
+ clip_center_area.x2 = imgbtn->coords.x2 - right_w;
+ clip_center_area.y1 = imgbtn->coords.y1;
+ clip_center_area.y2 = imgbtn->coords.y2;
- coords.x1 = imgbtn->coords.x1 + left_w;
- coords.y1 = imgbtn->coords.y1;
- coords.x2 = coords.x1 + header.w - 1;
- coords.y2 = imgbtn->coords.y1 + header.h - 1;
+ bool comm_res;
+ comm_res = lv_area_intersect(&clip_center_area, &clip_center_area, clip_area);
+ if(comm_res) {
- for(i = 0; i < obj_w - right_w - left_w; i += header.w) {
- lv_draw_img(&coords, mask, src, style, opa_scale);
- coords.x1 = coords.x2 + 1;
- coords.x2 += header.w;
- }
+ lv_coord_t obj_w = lv_obj_get_width(imgbtn);
+ lv_coord_t i;
+ lv_img_decoder_get_info(src, &header);
+
+ coords.x1 = imgbtn->coords.x1 + left_w;
+ coords.y1 = imgbtn->coords.y1;
+ coords.x2 = coords.x1 + header.w - 1;
+ coords.y2 = imgbtn->coords.y1 + header.h - 1;
+
+ for(i = 0; i < obj_w - right_w - left_w; i += header.w) {
+ lv_draw_img(&coords, &clip_center_area, src, style, 0, LV_IMG_ZOOM_NONE, false, opa_scale);
+ coords.x1 = coords.x2 + 1;
+ coords.x2 += header.w;
+ }
+ }
}
#endif
@@ -326,7 +378,7 @@ static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, lv_desig
else if(mode == LV_DESIGN_DRAW_POST) {
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -343,6 +395,7 @@ static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * par
/* Include the ancient signal function */
res = ancestor_signal(imgbtn, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_STYLE_CHG) {
/* If the style changed then the button was clicked, released etc. so probably the state was
@@ -350,13 +403,6 @@ static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * par
refr_img(imgbtn);
} else if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_imgbtn";
}
return res;
@@ -374,8 +420,17 @@ static void refr_img(lv_obj_t * imgbtn)
const void * src = ext->img_src_mid[state];
#endif
- lv_res_t info_res;
- info_res = lv_img_decoder_get_info(src, &header);
+ lv_res_t info_res = LV_RES_OK;
+ if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
+ const lv_style_t * style = ext->btn.styles[state];
+ header.h = lv_font_get_line_height(style->text.font);
+ header.w = lv_txt_get_width(src, (uint16_t)strlen(src), style->text.font, style->text.letter_space, LV_TXT_FLAG_NONE);
+ header.always_zero = 0;
+ header.cf = LV_IMG_CF_ALPHA_1BIT;
+ } else {
+ info_res = lv_img_decoder_get_info(src, &header);
+ }
+
if(info_res == LV_RES_OK) {
ext->act_cf = header.cf;
#if LV_IMGBTN_TILED == 0
diff --git a/src/lv_objx/lv_kb.c b/src/lv_objx/lv_kb.c
index 5577bb925..19a99a7db 100644
--- a/src/lv_objx/lv_kb.c
+++ b/src/lv_objx/lv_kb.c
@@ -10,12 +10,15 @@
#include "lv_kb.h"
#if LV_USE_KB != 0
-#include "lv_ta.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_themes/lv_theme.h"
+#include "lv_ta.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_kb"
+
#define LV_KB_CTRL_BTN_FLAGS (LV_BTNM_CTRL_NO_REPEAT | LV_BTNM_CTRL_CLICK_TRIG)
/**********************
@@ -33,8 +36,8 @@ static void lv_kb_updatemap(lv_obj_t * kb);
**********************/
static lv_signal_cb_t ancestor_signal;
/* clang-format off */
-static const char * const default_kb_map_lc[] = {"1#", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "Bksp", "\n",
- "ABC", "a", "s", "d", "f", "g", "h", "j", "k", "l", "Enter", "\n",
+static const char * default_kb_map_lc[] = {"1#", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", LV_SYMBOL_BACKSPACE, "\n",
+ "ABC", "a", "s", "d", "f", "g", "h", "j", "k", "l", LV_SYMBOL_NEW_LINE, "\n",
"_", "-", "z", "x", "c", "v", "b", "n", "m", ".", ",", ":", "\n",
LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
@@ -44,8 +47,8 @@ static const lv_btnm_ctrl_t default_kb_ctrl_lc_map[] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
-static const char * const default_kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "Bksp", "\n",
- "abc", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Enter", "\n",
+static const char * default_kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", LV_SYMBOL_BACKSPACE, "\n",
+ "abc", "A", "S", "D", "F", "G", "H", "J", "K", "L", LV_SYMBOL_NEW_LINE, "\n",
"_", "-", "Z", "X", "C", "V", "B", "N", "M", ".", ",", ":", "\n",
LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
@@ -55,7 +58,7 @@ static const lv_btnm_ctrl_t default_kb_ctrl_uc_map[] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
-static const char * const default_kb_map_spec[] = {"0", "1", "2", "3", "4" ,"5", "6", "7", "8", "9", "Bksp", "\n",
+static const char * default_kb_map_spec[] = {"0", "1", "2", "3", "4" ,"5", "6", "7", "8", "9", "Bksp", "\n",
"abc", "+", "-", "/", "*", "=", "%", "!", "?", "#", "<", ">", "\n",
"\\", "@", "$", "(", ")", "{", "}", "[", "]", ";", "\"", "'", "\n",
LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
@@ -68,7 +71,7 @@ static const lv_btnm_ctrl_t default_kb_ctrl_spec_map[] = {
static const char * const default_kb_map_num[] = {"1", "2", "3", LV_SYMBOL_CLOSE, "\n",
"4", "5", "6", LV_SYMBOL_OK, "\n",
- "7", "8", "9", "Bksp", "\n",
+ "7", "8", "9", LV_SYMBOL_BACKSPACE, "\n",
"+/-", "0", ".", LV_SYMBOL_LEFT, LV_SYMBOL_RIGHT, ""};
static const lv_btnm_ctrl_t default_kb_ctrl_num_map[] = {
@@ -111,15 +114,18 @@ lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of keyboard*/
lv_obj_t * new_kb = lv_btnm_create(par, copy);
- lv_mem_assert(new_kb);
+ LV_ASSERT_MEM(new_kb);
if(new_kb == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_kb);
/*Allocate the keyboard type specific extended data*/
lv_kb_ext_t * ext = lv_obj_allocate_ext_attr(new_kb, sizeof(lv_kb_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_kb);
+ return NULL;
+ }
/*Initialize the allocated 'ext' */
@@ -139,8 +145,7 @@ lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy)
lv_obj_get_height_fit(lv_obj_get_parent(new_kb)) / 2);
lv_obj_align(new_kb, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
lv_obj_set_event_cb(new_kb, lv_kb_def_event_cb);
- lv_btnm_set_map(new_kb, kb_map[LV_KB_MODE_TEXT_LOWER]);
- lv_btnm_set_ctrl_map(new_kb, kb_ctrl[LV_KB_MODE_TEXT_LOWER]);
+ lv_obj_set_base_dir(new_kb, LV_BIDI_DIR_LTR);
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
@@ -183,6 +188,9 @@ lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+ if(ta) LV_ASSERT_OBJ(ta, "lv_ta");
+
lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
lv_cursor_type_t cur_type;
@@ -208,6 +216,8 @@ void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta)
*/
void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode)
{
+ LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+
lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
if(ext->mode == mode) return;
@@ -223,6 +233,8 @@ void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode)
*/
void lv_kb_set_cursor_manage(lv_obj_t * kb, bool en)
{
+ LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+
lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
if(ext->cursor_mng == en) return;
@@ -248,6 +260,8 @@ void lv_kb_set_cursor_manage(lv_obj_t * kb, bool en)
*/
void lv_kb_set_style(lv_obj_t * kb, lv_kb_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+
switch(type) {
case LV_KB_STYLE_BG: lv_btnm_set_style(kb, LV_BTNM_STYLE_BG, style); break;
case LV_KB_STYLE_BTN_REL: lv_btnm_set_style(kb, LV_BTNM_STYLE_BTN_REL, style); break;
@@ -297,6 +311,8 @@ void lv_kb_set_ctrl_map(lv_obj_t * kb, lv_kb_mode_t mode, const lv_btnm_ctrl_t c
*/
lv_obj_t * lv_kb_get_ta(const lv_obj_t * kb)
{
+ LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+
lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
return ext->ta;
}
@@ -308,6 +324,8 @@ lv_obj_t * lv_kb_get_ta(const lv_obj_t * kb)
*/
lv_kb_mode_t lv_kb_get_mode(const lv_obj_t * kb)
{
+ LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+
lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
return ext->mode;
}
@@ -319,6 +337,8 @@ lv_kb_mode_t lv_kb_get_mode(const lv_obj_t * kb)
*/
bool lv_kb_get_cursor_manage(const lv_obj_t * kb)
{
+ LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+
lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
return ext->cursor_mng == 0 ? false : true;
}
@@ -331,6 +351,8 @@ bool lv_kb_get_cursor_manage(const lv_obj_t * kb)
*/
const lv_style_t * lv_kb_get_style(const lv_obj_t * kb, lv_kb_style_t type)
{
+ LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
switch(type) {
@@ -359,6 +381,8 @@ const lv_style_t * lv_kb_get_style(const lv_obj_t * kb, lv_kb_style_t type)
*/
void lv_kb_def_event_cb(lv_obj_t * kb, lv_event_t event)
{
+ LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
+
if(event != LV_EVENT_VALUE_CHANGED) return;
lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb);
@@ -409,13 +433,13 @@ void lv_kb_def_event_cb(lv_obj_t * kb, lv_event_t event)
/*Add the characters to the text area if set*/
if(ext->ta == NULL) return;
- if(strcmp(txt, "Enter") == 0)
+ if(strcmp(txt, "Enter") == 0 || strcmp(txt, LV_SYMBOL_NEW_LINE) == 0)
lv_ta_add_char(ext->ta, '\n');
else if(strcmp(txt, LV_SYMBOL_LEFT) == 0)
lv_ta_cursor_left(ext->ta);
else if(strcmp(txt, LV_SYMBOL_RIGHT) == 0)
lv_ta_cursor_right(ext->ta);
- else if(strcmp(txt, "Bksp") == 0)
+ else if(strcmp(txt, LV_SYMBOL_BACKSPACE) == 0)
lv_ta_del_char(ext->ta);
else if(strcmp(txt, "+/-") == 0) {
uint16_t cur = lv_ta_get_cursor_pos(ext->ta);
@@ -458,6 +482,7 @@ static lv_res_t lv_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(kb, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
@@ -475,13 +500,6 @@ static lv_res_t lv_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param)
lv_cursor_type_t cur_type = lv_ta_get_cursor_type(ext->ta);
lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN);
}
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_kb";
}
return res;
diff --git a/src/lv_objx/lv_kb.h b/src/lv_objx/lv_kb.h
index 8e25eab7a..9af54065d 100644
--- a/src/lv_objx/lv_kb.h
+++ b/src/lv_objx/lv_kb.h
@@ -47,6 +47,7 @@ enum {
LV_KB_MODE_TEXT_UPPER,
LV_KB_MODE_SPECIAL,
LV_KB_MODE_NUM,
+ LV_KB_MODE_TEXT_UPPER,
};
typedef uint8_t lv_kb_mode_t;
diff --git a/src/lv_objx/lv_label.c b/src/lv_objx/lv_label.c
index 0b6046c76..a581fead7 100644
--- a/src/lv_objx/lv_label.c
+++ b/src/lv_objx/lv_label.c
@@ -10,13 +10,19 @@
#if LV_USE_LABEL != 0
#include "../lv_core/lv_obj.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_core/lv_group.h"
+#include "../lv_draw/lv_draw.h"
#include "../lv_misc/lv_color.h"
#include "../lv_misc/lv_math.h"
+#include "../lv_misc/lv_bidi.h"
+#include "../lv_misc/lv_printf.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_label"
+
/*Test configurations*/
#ifndef LV_LABEL_DEF_SCROLL_SPEED
#define LV_LABEL_DEF_SCROLL_SPEED (25)
@@ -34,7 +40,7 @@
* STATIC PROTOTYPES
**********************/
static lv_res_t lv_label_signal(lv_obj_t * label, lv_signal_t sign, void * param);
-static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_label_design(lv_obj_t * label, const lv_area_t * clip_area, lv_design_mode_t mode);
static void lv_label_refr_text(lv_obj_t * label);
static void lv_label_revert_dots(lv_obj_t * label);
@@ -72,7 +78,7 @@ lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create a basic object*/
lv_obj_t * new_label = lv_obj_create(par, copy);
- lv_mem_assert(new_label);
+ LV_ASSERT_MEM(new_label);
if(new_label == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_label);
@@ -81,14 +87,17 @@ lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy)
lv_obj_allocate_ext_attr(new_label, sizeof(lv_label_ext_t));
lv_label_ext_t * ext = lv_obj_get_ext_attr(new_label);
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_label);
+ return NULL;
+ }
ext->text = NULL;
ext->static_txt = 0;
ext->recolor = 0;
ext->body_draw = 0;
- ext->align = LV_LABEL_ALIGN_LEFT;
+ ext->align = LV_LABEL_ALIGN_AUTO;
ext->dot_end = LV_LABEL_DOT_END_INV;
ext->long_mode = LV_LABEL_LONG_EXPAND;
#if LV_USE_ANIMATION
@@ -104,8 +113,8 @@ lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy)
#endif
#if LV_LABEL_TEXT_SEL
- ext->txt_sel_start = LV_LABEL_TEXT_SEL_OFF;
- ext->txt_sel_end = LV_LABEL_TEXT_SEL_OFF;
+ ext->txt_sel.start = LV_DRAW_LABEL_NO_TXT_SEL;
+ ext->txt_sel.end = LV_DRAW_LABEL_NO_TXT_SEL;
#endif
ext->dot.tmp_ptr = NULL;
ext->dot_tmp_alloc = 0;
@@ -135,13 +144,13 @@ lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy)
/*In DOT mode save the text byte-to-byte because a '\0' can be in the middle*/
if(copy_ext->long_mode == LV_LABEL_LONG_DOT) {
ext->text = lv_mem_realloc(ext->text, lv_mem_get_size(copy_ext->text));
- lv_mem_assert(ext->text);
+ LV_ASSERT_MEM(ext->text);
if(ext->text == NULL) return NULL;
memcpy(ext->text, copy_ext->text, lv_mem_get_size(copy_ext->text));
}
if(copy_ext->dot_tmp_alloc && copy_ext->dot.tmp_ptr) {
- int len = strlen(copy_ext->dot.tmp_ptr);
+ uint16_t len = (uint16_t )strlen(copy_ext->dot.tmp_ptr);
lv_label_set_dot_tmp(new_label, ext->dot.tmp_ptr, len);
} else {
memcpy(ext->dot.tmp, copy_ext->dot.tmp, sizeof(ext->dot.tmp));
@@ -169,6 +178,8 @@ lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_label_set_text(lv_obj_t * label, const char * text)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_obj_invalidate(label);
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
@@ -179,30 +190,82 @@ void lv_label_set_text(lv_obj_t * label, const char * text)
return;
}
+ LV_ASSERT_STR(text);
+
if(ext->text == text) {
/*If set its own text then reallocate it (maybe its size changed)*/
ext->text = lv_mem_realloc(ext->text, strlen(ext->text) + 1);
- lv_mem_assert(ext->text);
+ LV_ASSERT_MEM(ext->text);
if(ext->text == NULL) return;
} else {
/*Allocate space for the new text*/
- uint32_t len = strlen(text) + 1;
+ size_t len = strlen(text) + 1;
if(ext->text != NULL && ext->static_txt == 0) {
lv_mem_free(ext->text);
ext->text = NULL;
}
ext->text = lv_mem_alloc(len);
- lv_mem_assert(ext->text);
+ LV_ASSERT_MEM(ext->text);
if(ext->text == NULL) return;
strcpy(ext->text, text);
- ext->static_txt = 0; /*Now the text is dynamically allocated*/
+
+ /*Now the text is dynamically allocated*/
+ ext->static_txt = 0;
}
lv_label_refr_text(label);
}
+/**
+ * Set a new formatted text for a label. Memory will be allocated to store the text by the label.
+ * @param label pointer to a label object
+ * @param fmt `printf`-like format
+ */
+void lv_label_set_text_fmt(lv_obj_t * label, const char * fmt, ...)
+{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+ LV_ASSERT_STR(fmt);
+
+ lv_obj_invalidate(label);
+
+ lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
+
+ /*If text is NULL then refresh */
+ if(fmt == NULL) {
+ lv_label_refr_text(label);
+ return;
+ }
+
+ if(ext->text != NULL && ext->static_txt == 0) {
+ lv_mem_free(ext->text);
+ ext->text = NULL;
+ }
+
+ va_list ap, ap2;
+ va_start(ap, fmt);
+ va_copy(ap2, ap);
+
+ /*Allocate space for the new text by using trick from C99 standard section 7.19.6.12 */
+ uint32_t len = lv_vsnprintf(NULL, 0, fmt, ap);
+
+ va_end(ap);
+
+
+ ext->text = lv_mem_alloc(len+1);
+ LV_ASSERT_MEM(ext->text);
+ if(ext->text == NULL) return;
+ ext->text[len-1] = 0; /* Ensure NULL termination */
+
+ lv_vsnprintf(ext->text, len+1, fmt, ap2);
+
+ va_end(ap2);
+ ext->static_txt = 0; /*Now the text is dynamically allocated*/
+
+ lv_label_refr_text(label);
+}
+
/**
* Set a new text for a label from a character array. The array don't has to be '\0' terminated.
* Memory will be allocated to store the array by the label.
@@ -212,6 +275,8 @@ void lv_label_set_text(lv_obj_t * label, const char * text)
*/
void lv_label_set_array_text(lv_obj_t * label, const char * array, uint16_t size)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_obj_invalidate(label);
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
@@ -228,7 +293,7 @@ void lv_label_set_array_text(lv_obj_t * label, const char * array, uint16_t size
ext->text = NULL;
}
ext->text = lv_mem_alloc(size + 1);
- lv_mem_assert(ext->text);
+ LV_ASSERT_MEM(ext->text);
if(ext->text == NULL) return;
memcpy(ext->text, array, size);
@@ -246,6 +311,9 @@ void lv_label_set_array_text(lv_obj_t * label, const char * array, uint16_t size
*/
void lv_label_set_static_text(lv_obj_t * label, const char * text)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+ LV_ASSERT_STR(text);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
if(ext->static_txt == 0 && ext->text != NULL) {
lv_mem_free(ext->text);
@@ -269,6 +337,8 @@ void lv_label_set_static_text(lv_obj_t * label, const char * text)
*/
void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
#if LV_USE_ANIMATION
@@ -302,6 +372,8 @@ void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode)
*/
void lv_label_set_align(lv_obj_t * label, lv_label_align_t align)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
if(ext->align == align) return;
@@ -318,6 +390,8 @@ void lv_label_set_align(lv_obj_t * label, lv_label_align_t align)
*/
void lv_label_set_recolor(lv_obj_t * label, bool en)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
if(ext->recolor == en) return;
@@ -334,6 +408,8 @@ void lv_label_set_recolor(lv_obj_t * label, bool en)
*/
void lv_label_set_body_draw(lv_obj_t * label, bool en)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
if(ext->body_draw == en) return;
@@ -351,6 +427,8 @@ void lv_label_set_body_draw(lv_obj_t * label, bool en)
*/
void lv_label_set_anim_speed(lv_obj_t * label, uint16_t anim_speed)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
if(ext->anim_speed == anim_speed) return;
@@ -368,9 +446,11 @@ void lv_label_set_anim_speed(lv_obj_t * label, uint16_t anim_speed)
void lv_label_set_text_sel_start(lv_obj_t * label, uint16_t index)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
#if LV_LABEL_TEXT_SEL
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- ext->txt_sel_start = index;
+ ext->txt_sel.start = index;
lv_obj_invalidate(label);
#else
(void)label; /*Unused*/
@@ -380,9 +460,11 @@ void lv_label_set_text_sel_start(lv_obj_t * label, uint16_t index)
void lv_label_set_text_sel_end(lv_obj_t * label, uint16_t index)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
#if LV_LABEL_TEXT_SEL
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- ext->txt_sel_end = index;
+ ext->txt_sel.end = index;
lv_obj_invalidate(label);
#else
(void)label; /*Unused*/
@@ -401,6 +483,8 @@ void lv_label_set_text_sel_end(lv_obj_t * label, uint16_t index)
*/
char * lv_label_get_text(const lv_obj_t * label)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
return ext->text;
@@ -413,6 +497,8 @@ char * lv_label_get_text(const lv_obj_t * label)
*/
lv_label_long_mode_t lv_label_get_long_mode(const lv_obj_t * label)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
return ext->long_mode;
}
@@ -424,8 +510,25 @@ lv_label_long_mode_t lv_label_get_long_mode(const lv_obj_t * label)
*/
lv_label_align_t lv_label_get_align(const lv_obj_t * label)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- return ext->align;
+
+ lv_label_align_t align = ext->align;
+
+ if(align == LV_LABEL_ALIGN_AUTO) {
+#if LV_USE_BIDI
+ lv_bidi_dir_t base_dir = lv_obj_get_base_dir(label);
+ if(base_dir == LV_BIDI_DIR_AUTO) base_dir = lv_bidi_detect_base_dir(ext->text);
+
+ if(base_dir == LV_BIDI_DIR_LTR) align = LV_LABEL_ALIGN_LEFT;
+ else if (base_dir == LV_BIDI_DIR_RTL) align = LV_LABEL_ALIGN_RIGHT;
+#else
+ align = LV_LABEL_ALIGN_LEFT;
+#endif
+ }
+
+ return align;
}
/**
@@ -435,6 +538,8 @@ lv_label_align_t lv_label_get_align(const lv_obj_t * label)
*/
bool lv_label_get_recolor(const lv_obj_t * label)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
return ext->recolor == 0 ? false : true;
}
@@ -446,6 +551,8 @@ bool lv_label_get_recolor(const lv_obj_t * label)
*/
bool lv_label_get_body_draw(const lv_obj_t * label)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
return ext->body_draw == 0 ? false : true;
}
@@ -457,6 +564,8 @@ bool lv_label_get_body_draw(const lv_obj_t * label)
*/
uint16_t lv_label_get_anim_speed(const lv_obj_t * label)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
return ext->anim_speed;
@@ -473,8 +582,11 @@ uint16_t lv_label_get_anim_speed(const lv_obj_t * label)
* index (different in UTF-8)
* @param pos store the result here (E.g. index = 0 gives 0;0 coordinates)
*/
-void lv_label_get_letter_pos(const lv_obj_t * label, uint16_t index, lv_point_t * pos)
+void lv_label_get_letter_pos(const lv_obj_t * label, uint16_t char_id, lv_point_t * pos)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+ LV_ASSERT_NULL(pos);
+
const char * txt = lv_label_get_text(label);
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
uint32_t line_start = 0;
@@ -482,25 +594,28 @@ void lv_label_get_letter_pos(const lv_obj_t * label, uint16_t index, lv_point_t
lv_coord_t max_w = lv_obj_get_width(label);
const lv_style_t * style = lv_obj_get_style(label);
const lv_font_t * font = style->text.font;
- uint8_t letter_height = lv_font_get_line_height(font);
+ lv_coord_t letter_height = lv_font_get_line_height(font);
lv_coord_t y = 0;
lv_txt_flag_t flag = LV_TXT_FLAG_NONE;
if(ext->recolor != 0) flag |= LV_TXT_FLAG_RECOLOR;
if(ext->expand != 0) flag |= LV_TXT_FLAG_EXPAND;
- if(ext->align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
+
+ lv_label_align_t align = lv_label_get_align(label);
+ if(align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
+ if(align == LV_LABEL_ALIGN_RIGHT) flag |= LV_TXT_FLAG_RIGHT;
/*If the width will be expanded the set the max length to very big */
if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
max_w = LV_COORD_MAX;
}
- index = lv_txt_encoded_get_byte_id(txt, index);
+ uint16_t byte_id = lv_txt_encoded_get_byte_id(txt, char_id);
/*Search the line of the index letter */;
while(txt[new_line_start] != '\0') {
new_line_start += lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, max_w, flag);
- if(index < new_line_start || txt[new_line_start] == '\0')
+ if(byte_id < new_line_start || txt[new_line_start] == '\0')
break; /*The line of 'index' letter begins at 'line_start'*/
y += letter_height + style->text.line_space;
@@ -508,31 +623,59 @@ void lv_label_get_letter_pos(const lv_obj_t * label, uint16_t index, lv_point_t
}
/*If the last character is line break then go to the next line*/
- if(index > 0) {
- if((txt[index - 1] == '\n' || txt[index - 1] == '\r') && txt[index] == '\0') {
+ if(byte_id > 0) {
+ if((txt[byte_id - 1] == '\n' || txt[byte_id - 1] == '\r') && txt[byte_id] == '\0') {
y += letter_height + style->text.line_space;
- line_start = index;
+ line_start = byte_id;
}
}
+ const char *bidi_txt;
+ uint16_t visual_byte_pos;
+#if LV_USE_BIDI
+ char *mutable_bidi_txt = NULL;
+ /*Handle Bidi*/
+ if(new_line_start == byte_id) {
+ visual_byte_pos = byte_id - line_start;
+ bidi_txt = &txt[line_start];
+ }
+ else {
+ uint16_t line_char_id = lv_txt_encoded_get_char_id(&txt[line_start], byte_id - line_start);
+
+ bool is_rtl;
+ uint16_t visual_char_pos = lv_bidi_get_visual_pos(&txt[line_start], &mutable_bidi_txt, new_line_start - line_start, lv_obj_get_base_dir(label), line_char_id, &is_rtl);
+ bidi_txt = mutable_bidi_txt;
+ if (is_rtl) visual_char_pos++;
+ visual_byte_pos = lv_txt_encoded_get_byte_id(bidi_txt, visual_char_pos);
+ }
+#else
+ bidi_txt = &txt[line_start];
+ visual_byte_pos = byte_id - line_start;
+#endif
+
+
/*Calculate the x coordinate*/
- lv_coord_t x = lv_txt_get_width(&txt[line_start], index - line_start, font, style->text.letter_space, flag);
+ lv_coord_t x = lv_txt_get_width(bidi_txt, visual_byte_pos, font, style->text.letter_space, flag);
- if(index != line_start) x += style->text.letter_space;
+ if(char_id != line_start) x += style->text.letter_space;
- if(ext->align == LV_LABEL_ALIGN_CENTER) {
+ if(align == LV_LABEL_ALIGN_CENTER) {
lv_coord_t line_w;
- line_w = lv_txt_get_width(&txt[line_start], new_line_start - line_start, font, style->text.letter_space, flag);
+ line_w = lv_txt_get_width(bidi_txt, new_line_start - line_start, font, style->text.letter_space, flag);
x += lv_obj_get_width(label) / 2 - line_w / 2;
- } else if(ext->align == LV_LABEL_ALIGN_RIGHT) {
+ } else if(align == LV_LABEL_ALIGN_RIGHT) {
lv_coord_t line_w;
- line_w = lv_txt_get_width(&txt[line_start], new_line_start - line_start, font, style->text.letter_space, flag);
+ line_w = lv_txt_get_width(bidi_txt, new_line_start - line_start, font, style->text.letter_space, flag);
x += lv_obj_get_width(label) - line_w;
}
pos->x = x;
pos->y = y;
+
+#if LV_USE_BIDI
+ if(mutable_bidi_txt) lv_mem_free(mutable_bidi_txt);
+#endif
}
/**
@@ -544,6 +687,9 @@ void lv_label_get_letter_pos(const lv_obj_t * label, uint16_t index, lv_point_t
*/
uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+ LV_ASSERT_NULL(pos);
+
const char * txt = lv_label_get_text(label);
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
uint32_t line_start = 0;
@@ -551,13 +697,18 @@ uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos)
lv_coord_t max_w = lv_obj_get_width(label);
const lv_style_t * style = lv_obj_get_style(label);
const lv_font_t * font = style->text.font;
- uint8_t letter_height = lv_font_get_line_height(font);
+ lv_coord_t letter_height = lv_font_get_line_height(font);
lv_coord_t y = 0;
lv_txt_flag_t flag = LV_TXT_FLAG_NONE;
+ uint16_t logical_pos;
+ char *bidi_txt;
if(ext->recolor != 0) flag |= LV_TXT_FLAG_RECOLOR;
if(ext->expand != 0) flag |= LV_TXT_FLAG_EXPAND;
- if(ext->align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
+
+ lv_label_align_t align = lv_label_get_align(label);
+ if(align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
+ if(align == LV_LABEL_ALIGN_RIGHT) flag |= LV_TXT_FLAG_RIGHT;
/*If the width will be expanded set the max length to very big */
if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
@@ -568,38 +719,60 @@ uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos)
while(txt[line_start] != '\0') {
new_line_start += lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, max_w, flag);
- if(pos->y <= y + letter_height) break; /*The line is found (stored in 'line_start')*/
+ if(pos->y <= y + letter_height) {
+ /*The line is found (stored in 'line_start')*/
+ /* Include the NULL terminator in the last line */
+ uint32_t tmp = new_line_start;
+ uint32_t letter;
+ letter = lv_txt_encoded_prev(txt, &tmp);
+ if(letter != '\n' && txt[new_line_start] == '\0' ) new_line_start++;
+ break;
+ }
y += letter_height + style->text.line_space;
line_start = new_line_start;
}
+#if LV_USE_BIDI
+ bidi_txt = lv_mem_buf_get(new_line_start - line_start + 1);
+ uint16_t txt_len = new_line_start - line_start;
+ if(bidi_txt[new_line_start] == '\0') txt_len--;
+ lv_bidi_process_paragraph(txt + line_start, bidi_txt, txt_len, lv_obj_get_base_dir(label), NULL, 0);
+#else
+ bidi_txt = (char*)txt + line_start;
+#endif
+
/*Calculate the x coordinate*/
lv_coord_t x = 0;
- if(ext->align == LV_LABEL_ALIGN_CENTER) {
+ if(align == LV_LABEL_ALIGN_CENTER) {
lv_coord_t line_w;
- line_w = lv_txt_get_width(&txt[line_start], new_line_start - line_start, font, style->text.letter_space, flag);
+ line_w = lv_txt_get_width(bidi_txt, new_line_start - line_start, font, style->text.letter_space, flag);
x += lv_obj_get_width(label) / 2 - line_w / 2;
}
+ else if(align == LV_LABEL_ALIGN_RIGHT) {
+ lv_coord_t line_w;
+ line_w = lv_txt_get_width(bidi_txt, new_line_start - line_start, font, style->text.letter_space, flag);
+ x += lv_obj_get_width(label) - line_w;
+ }
lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
- uint32_t i = line_start;
+ uint32_t i = 0;
uint32_t i_act = i;
uint32_t letter;
uint32_t letter_next;
if(new_line_start > 0) {
- while(i < new_line_start) {
+ while(i + line_start < new_line_start) {
/* Get the current letter.*/
- letter = lv_txt_encoded_next(txt, &i);
+ letter = lv_txt_encoded_next(bidi_txt, &i);
/*Get the next letter too for kerning*/
- letter_next = lv_txt_encoded_next(&txt[i], NULL);
+ letter_next = lv_txt_encoded_next(&bidi_txt[i], NULL);
/*Handle the recolor command*/
if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
- if(lv_txt_is_cmd(&cmd_state, txt[i]) != false) {
+ if(lv_txt_is_cmd(&cmd_state, bidi_txt[i]) != false) {
continue; /*Skip the letter is it is part of a command*/
}
}
@@ -607,7 +780,7 @@ uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos)
x += lv_font_get_glyph_width(font, letter, letter_next);
/*Finish if the x position or the last char of the line is reached*/
- if(pos->x < x || i == new_line_start) {
+ if(pos->x < x || i + line_start == new_line_start) {
i = i_act;
break;
}
@@ -616,7 +789,17 @@ uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos)
}
}
- return lv_encoded_get_char_id(txt, i);
+#if LV_USE_BIDI
+ lv_mem_buf_release(bidi_txt);
+ /*Handle Bidi*/
+ bool is_rtl;
+ logical_pos = lv_bidi_get_logical_pos(&txt[line_start], NULL, txt_len, lv_obj_get_base_dir(label), lv_txt_encoded_get_char_id(bidi_txt, i), &is_rtl);
+ if (is_rtl) logical_pos++;
+#else
+ logical_pos = lv_txt_encoded_get_char_id(bidi_txt, i);
+#endif
+
+ return logical_pos + lv_txt_encoded_get_char_id(txt, line_start);
}
/**
@@ -626,9 +809,11 @@ uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos)
*/
uint16_t lv_label_get_text_sel_start(const lv_obj_t * label)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
#if LV_LABEL_TEXT_SEL
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- return ext->txt_sel_start;
+ return ext->txt_sel.start;
#else
(void)label; /*Unused*/
@@ -643,9 +828,11 @@ uint16_t lv_label_get_text_sel_start(const lv_obj_t * label)
*/
uint16_t lv_label_get_text_sel_end(const lv_obj_t * label)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
#if LV_LABEL_TEXT_SEL
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
- return ext->txt_sel_end;
+ return ext->txt_sel.end;
#else
(void)label; /*Unused*/
return LV_LABEL_TEXT_SEL_OFF;
@@ -660,6 +847,9 @@ uint16_t lv_label_get_text_sel_end(const lv_obj_t * label)
*/
bool lv_label_is_char_under_pos(const lv_obj_t * label, lv_point_t * pos)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+ LV_ASSERT_NULL(pos);
+
const char * txt = lv_label_get_text(label);
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
uint32_t line_start = 0;
@@ -667,13 +857,14 @@ bool lv_label_is_char_under_pos(const lv_obj_t * label, lv_point_t * pos)
lv_coord_t max_w = lv_obj_get_width(label);
const lv_style_t * style = lv_obj_get_style(label);
const lv_font_t * font = style->text.font;
- uint8_t letter_height = lv_font_get_line_height(font);
+ lv_coord_t letter_height = lv_font_get_line_height(font);
lv_coord_t y = 0;
lv_txt_flag_t flag = LV_TXT_FLAG_NONE;
+ lv_label_align_t align = lv_label_get_align(label);
if(ext->recolor != 0) flag |= LV_TXT_FLAG_RECOLOR;
if(ext->expand != 0) flag |= LV_TXT_FLAG_EXPAND;
- if(ext->align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
+ if(align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
/*If the width will be expanded set the max length to very big */
if(ext->long_mode == LV_LABEL_LONG_EXPAND) {
@@ -693,11 +884,16 @@ bool lv_label_is_char_under_pos(const lv_obj_t * label, lv_point_t * pos)
/*Calculate the x coordinate*/
lv_coord_t x = 0;
lv_coord_t last_x = 0;
- if(ext->align == LV_LABEL_ALIGN_CENTER) {
+ if(align == LV_LABEL_ALIGN_CENTER) {
lv_coord_t line_w;
line_w = lv_txt_get_width(&txt[line_start], new_line_start - line_start, font, style->text.letter_space, flag);
x += lv_obj_get_width(label) / 2 - line_w / 2;
}
+ else if(align == LV_LABEL_ALIGN_RIGHT) {
+ lv_coord_t line_w;
+ line_w = lv_txt_get_width(&txt[line_start], new_line_start - line_start, font, style->text.letter_space, flag);
+ x += lv_obj_get_width(label) - line_w;
+ }
lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
@@ -749,6 +945,9 @@ bool lv_label_is_char_under_pos(const lv_obj_t * label, lv_point_t * pos)
*/
void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+ LV_ASSERT_STR(txt);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
/*Can not append to static text*/
@@ -757,20 +956,30 @@ void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt)
lv_obj_invalidate(label);
/*Allocate space for the new text*/
- uint32_t old_len = strlen(ext->text);
- uint32_t ins_len = strlen(txt);
- uint32_t new_len = ins_len + old_len;
+ size_t old_len = strlen(ext->text);
+ size_t ins_len = strlen(txt);
+ size_t new_len = ins_len + old_len;
ext->text = lv_mem_realloc(ext->text, new_len + 1);
- lv_mem_assert(ext->text);
+ LV_ASSERT_MEM(ext->text);
if(ext->text == NULL) return;
if(pos == LV_LABEL_POS_LAST) {
pos = lv_txt_get_encoded_length(ext->text);
}
- lv_txt_ins(ext->text, pos, txt);
+#if LV_USE_BIDI
+ char * bidi_buf = lv_mem_buf_get(ins_len + 1);
+ LV_ASSERT_MEM(bidi_buf);
+ if(bidi_buf == NULL) return;
+ lv_bidi_process(txt, bidi_buf, lv_obj_get_base_dir(label));
+ lv_txt_ins(ext->text, pos, bidi_buf);
+
+ lv_mem_buf_release(bidi_buf);
+#else
+ lv_txt_ins(ext->text, pos, txt);
lv_label_refr_text(label);
+#endif
}
/**
@@ -782,6 +991,8 @@ void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt)
*/
void lv_label_cut_text(lv_obj_t * label, uint32_t pos, uint32_t cnt)
{
+ LV_ASSERT_OBJ(label, LV_OBJX_NAME);
+
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
/*Can not append to static text*/
@@ -804,18 +1015,18 @@ void lv_label_cut_text(lv_obj_t * label, uint32_t pos, uint32_t cnt)
/**
* Handle the drawing related tasks of the labels
* @param label pointer to a label object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_label_design(lv_obj_t * label, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/* A label never covers an area */
if(mode == LV_DESIGN_COVER_CHK)
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
else if(mode == LV_DESIGN_DRAW_MAIN) {
lv_area_t coords;
const lv_style_t * style = lv_obj_get_style(label);
@@ -825,7 +1036,7 @@ static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_
#if LV_USE_GROUP
lv_group_t * g = lv_obj_get_group(label);
if(lv_group_get_focused(g) == label) {
- lv_draw_rect(&coords, mask, style, opa_scale);
+ lv_draw_rect(&coords, clip_area, style, opa_scale);
}
#endif
@@ -839,17 +1050,16 @@ static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_
bg.y1 -= style->body.padding.top;
bg.y2 += style->body.padding.bottom;
- lv_draw_rect(&bg, mask, style, lv_obj_get_opa_scale(label));
+ lv_draw_rect(&bg, clip_area, style, lv_obj_get_opa_scale(label));
}
- /*TEST: draw a background for the label*/
- // lv_draw_rect(&label->coords, mask, &lv_style_plain_color, LV_OPA_COVER);
+ lv_label_align_t align = lv_label_get_align(label);
lv_txt_flag_t flag = LV_TXT_FLAG_NONE;
if(ext->recolor != 0) flag |= LV_TXT_FLAG_RECOLOR;
if(ext->expand != 0) flag |= LV_TXT_FLAG_EXPAND;
- if(ext->align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
- if(ext->align == LV_LABEL_ALIGN_RIGHT) flag |= LV_TXT_FLAG_RIGHT;
+ if(align == LV_LABEL_ALIGN_CENTER) flag |= LV_TXT_FLAG_CENTER;
+ if(align == LV_LABEL_ALIGN_RIGHT) flag |= LV_TXT_FLAG_RIGHT;
/* In ROLL mode the CENTER and RIGHT are pointless so remove them.
* (In addition they will result mis-alignment is this case)*/
@@ -872,9 +1082,11 @@ static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_
/*Just for compatibility*/
lv_draw_label_hint_t * hint = NULL;
#endif
- lv_draw_label(&coords, mask, style, opa_scale, ext->text, flag, &ext->offset,
- lv_label_get_text_sel_start(label), lv_label_get_text_sel_end(label), hint);
+ lv_draw_label_txt_sel_t sel;
+ sel.start = lv_label_get_text_sel_start(label);
+ sel.end = lv_label_get_text_sel_end(label);
+ lv_draw_label(&coords, clip_area, style, opa_scale, ext->text, flag, &ext->offset, &sel, hint, lv_obj_get_base_dir(label));
if(ext->long_mode == LV_LABEL_LONG_SROLL_CIRC) {
lv_point_t size;
@@ -889,20 +1101,19 @@ static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv_design_
lv_font_get_glyph_width(style->text.font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT;
ofs.y = ext->offset.y;
- lv_draw_label(&coords, mask, style, opa_scale, ext->text, flag, &ofs,
- lv_label_get_text_sel_start(label), lv_label_get_text_sel_end(label), NULL);
+ lv_draw_label(&coords, clip_area, style, opa_scale, ext->text, flag, &ofs, &sel, NULL, lv_obj_get_base_dir(label));
}
/*Draw the text again below the original to make an circular effect */
if(size.y > lv_obj_get_height(label)) {
ofs.x = ext->offset.x;
ofs.y = ext->offset.y + size.y + lv_font_get_line_height(style->text.font);
- lv_draw_label(&coords, mask, style, opa_scale, ext->text, flag, &ofs,
- lv_label_get_text_sel_start(label), lv_label_get_text_sel_end(label), NULL);
+ lv_draw_label(&coords, clip_area, style, opa_scale, ext->text, flag, &ofs, &sel, NULL, lv_obj_get_base_dir(label));
}
}
}
- return true;
+
+ return LV_DESIGN_RES_OK;
}
/**
@@ -919,6 +1130,7 @@ static lv_res_t lv_label_signal(lv_obj_t * label, lv_signal_t sign, void * param
/* Include the ancient signal function */
res = ancestor_signal(label, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_label_ext_t * ext = lv_obj_get_ext_attr(label);
if(sign == LV_SIGNAL_CLEANUP) {
@@ -947,6 +1159,11 @@ static lv_res_t lv_label_signal(lv_obj_t * label, lv_signal_t sign, void * param
label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, style->body.padding.top);
label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, style->body.padding.bottom);
}
+ }
+ else if(sign == LV_SIGNAL_BASE_DIR_CHG) {
+#if LV_USE_BIDI
+ if(ext->static_txt == 0) lv_label_set_text(label, NULL);
+#endif
} else if(sign == LV_SIGNAL_GET_TYPE) {
lv_obj_type_t * buf = param;
uint8_t i;
@@ -1038,11 +1255,12 @@ static void lv_label_refr_text(lv_obj_t * label)
/*In roll inf. mode keep the size but start offset animations*/
else if(ext->long_mode == LV_LABEL_LONG_SROLL_CIRC) {
#if LV_USE_ANIMATION
+ lv_label_align_t align = lv_label_get_align(label);
+
lv_anim_t anim;
anim.var = label;
anim.repeat = 1;
anim.playback = 0;
- anim.start = 0;
anim.act_time = -(((lv_font_get_glyph_width(style->text.font, ' ', ' ') + style->text.letter_space) * 1000) /
ext->anim_speed) *
LV_LABEL_WAIT_CHAR_COUNT;
@@ -1053,7 +1271,14 @@ static void lv_label_refr_text(lv_obj_t * label)
bool hor_anim = false;
if(size.x > lv_obj_get_width(label)) {
- anim.end = -size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT;
+ if(align == LV_LABEL_ALIGN_RIGHT) {
+ anim.end = 0;
+ anim.start = -size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT;
+ } else {
+ anim.start = 0;
+ anim.end = -size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT;
+ }
+
anim.exec_cb = (lv_anim_exec_xcb_t)lv_label_set_offset_x;
anim.time = lv_anim_speed_to_time(ext->anim_speed, anim.start, anim.end);
lv_anim_create(&anim);
@@ -1065,7 +1290,14 @@ static void lv_label_refr_text(lv_obj_t * label)
}
if(size.y > lv_obj_get_height(label) && hor_anim == false) {
- anim.end = -size.y - (lv_font_get_line_height(font));
+ if(align == LV_LABEL_ALIGN_RIGHT) {
+ anim.end = 0;
+ anim.start = -size.y - (lv_font_get_line_height(font));
+ } else {
+ anim.start = 0;
+ anim.end = -size.y - (lv_font_get_line_height(font));
+ }
+
anim.exec_cb = (lv_anim_exec_xcb_t)lv_label_set_offset_y;
anim.time = lv_anim_speed_to_time(ext->anim_speed, anim.start, anim.end);
lv_anim_create(&anim);
diff --git a/src/lv_objx/lv_label.h b/src/lv_objx/lv_label.h
index 16b1a6e8f..976854235 100644
--- a/src/lv_objx/lv_label.h
+++ b/src/lv_objx/lv_label.h
@@ -21,6 +21,7 @@ extern "C" {
#if LV_USE_LABEL != 0
+#include
#include "../lv_core/lv_obj.h"
#include "../lv_font/lv_font.h"
#include "../lv_font/lv_symbol_def.h"
@@ -32,7 +33,11 @@ extern "C" {
*********************/
#define LV_LABEL_DOT_NUM 3
#define LV_LABEL_POS_LAST 0xFFFF
-#define LV_LABEL_TEXT_SEL_OFF 0xFFFF
+#define LV_LABEL_TEXT_SEL_OFF LV_DRAW_LABEL_NO_TXT_SEL
+
+LV_EXPORT_CONST_INT(LV_LABEL_DOT_NUM);
+LV_EXPORT_CONST_INT(LV_LABEL_POS_LAST);
+LV_EXPORT_CONST_INT(LV_LABEL_TEXT_SEL_OFF);
/**********************
* TYPEDEFS
@@ -55,6 +60,7 @@ enum {
LV_LABEL_ALIGN_LEFT, /**< Align text to left */
LV_LABEL_ALIGN_CENTER, /**< Align text to center */
LV_LABEL_ALIGN_RIGHT, /**< Align text to right */
+ LV_LABEL_ALIGN_AUTO, /**< Use LEFT or RIGHT depending on the direction of the text (LTR/RTL)*/
};
typedef uint8_t lv_label_align_t;
@@ -63,26 +69,29 @@ typedef struct
{
/*Inherited from 'base_obj' so no inherited ext.*/ /*Ext. of ancestor*/
/*New data for this type */
- char * text; /*Text of the label*/
+ char * text; /*Text of the label*/
+
union
{
char * tmp_ptr; /* Pointer to the allocated memory containing the character which are replaced by dots (Handled
by the library)*/
- char tmp[sizeof(char *)]; /* Directly store the characters if <=4 characters */
+ char tmp[LV_LABEL_DOT_NUM + 1]; /* Directly store the characters if <=4 characters */
} dot;
+
uint16_t dot_end; /*The text end position in dot mode (Handled by the library)*/
- lv_point_t offset; /*Text draw position offset*/
-#if LV_LABEL_LONG_TXT_HINT
- lv_draw_label_hint_t hint; /*Used to buffer info about large text*/
-#endif
#if LV_USE_ANIMATION
uint16_t anim_speed; /*Speed of scroll and roll animation in px/sec unit*/
#endif
+ lv_point_t offset; /*Text draw position offset*/
+
+#if LV_LABEL_LONG_TXT_HINT
+ lv_draw_label_hint_t hint; /*Used to buffer info about large text*/
+#endif
+
#if LV_LABEL_TEXT_SEL
- uint16_t txt_sel_start; /*Left-most selection character*/
- uint16_t txt_sel_end; /*Right-most selection character*/
+ lv_draw_label_txt_sel_t txt_sel;
#endif
lv_label_long_mode_t long_mode : 3; /*Determinate what to do with the long texts*/
@@ -124,6 +133,13 @@ lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy);
*/
void lv_label_set_text(lv_obj_t * label, const char * text);
+/**
+ * Set a new formatted text for a label. Memory will be allocated to store the text by the label.
+ * @param label pointer to a label object
+ * @param fmt `printf`-like format
+ */
+void lv_label_set_text_fmt(lv_obj_t * label, const char * fmt, ...);
+
/**
* Set a new text for a label from a character array. The array don't has to be '\0' terminated.
* Memory will be allocated to store the array by the label.
diff --git a/src/lv_objx/lv_led.c b/src/lv_objx/lv_led.c
index c991b518b..b51bc490b 100644
--- a/src/lv_objx/lv_led.c
+++ b/src/lv_objx/lv_led.c
@@ -9,12 +9,15 @@
#include "lv_led.h"
#if LV_USE_LED != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_draw/lv_draw.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_led"
+
#define LV_LED_WIDTH_DEF (LV_DPI / 3)
#define LV_LED_HEIGHT_DEF (LV_DPI / 3)
#define LV_LED_BRIGHT_OFF 100
@@ -27,13 +30,13 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_led_design(lv_obj_t * led, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_led_design(lv_obj_t * led, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_led_signal(lv_obj_t * led, lv_signal_t sign, void * param);
/**********************
* STATIC VARIABLES
**********************/
-static lv_design_cb_t ancestor_design_f;
+static lv_design_cb_t ancestor_design;
static lv_signal_cb_t ancestor_signal;
/**********************
@@ -56,16 +59,19 @@ lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor basic object*/
lv_obj_t * new_led = lv_obj_create(par, copy);
- lv_mem_assert(new_led);
+ LV_ASSERT_MEM(new_led);
if(new_led == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_led);
- if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_led);
+ if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_led);
/*Allocate the object type specific extended data*/
lv_led_ext_t * ext = lv_obj_allocate_ext_attr(new_led, sizeof(lv_led_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_led);
+ return NULL;
+ }
ext->bright = LV_LED_BRIGHT_ON;
@@ -109,6 +115,8 @@ lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_led_set_bright(lv_obj_t * led, uint8_t bright)
{
+ LV_ASSERT_OBJ(led, LV_OBJX_NAME);
+
/*Set the brightness*/
lv_led_ext_t * ext = lv_obj_get_ext_attr(led);
if(ext->bright == bright) return;
@@ -125,6 +133,8 @@ void lv_led_set_bright(lv_obj_t * led, uint8_t bright)
*/
void lv_led_on(lv_obj_t * led)
{
+ LV_ASSERT_OBJ(led, LV_OBJX_NAME);
+
lv_led_set_bright(led, LV_LED_BRIGHT_ON);
}
@@ -134,6 +144,8 @@ void lv_led_on(lv_obj_t * led)
*/
void lv_led_off(lv_obj_t * led)
{
+ LV_ASSERT_OBJ(led, LV_OBJX_NAME);
+
lv_led_set_bright(led, LV_LED_BRIGHT_OFF);
}
@@ -143,6 +155,8 @@ void lv_led_off(lv_obj_t * led)
*/
void lv_led_toggle(lv_obj_t * led)
{
+ LV_ASSERT_OBJ(led, LV_OBJX_NAME);
+
uint8_t bright = lv_led_get_bright(led);
if(bright > (LV_LED_BRIGHT_OFF + LV_LED_BRIGHT_ON) >> 1)
lv_led_off(led);
@@ -161,6 +175,8 @@ void lv_led_toggle(lv_obj_t * led)
*/
uint8_t lv_led_get_bright(const lv_obj_t * led)
{
+ LV_ASSERT_OBJ(led, LV_OBJX_NAME);
+
lv_led_ext_t * ext = lv_obj_get_ext_attr(led);
return ext->bright;
}
@@ -172,18 +188,18 @@ uint8_t lv_led_get_bright(const lv_obj_t * led)
/**
* Handle the drawing related tasks of the leds
* @param led pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_led_design(lv_obj_t * led, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_led_design(lv_obj_t * led, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
- /*Return false if the object is not covers the mask area*/
- return ancestor_design_f(led, mask, mode);
+ /*Return false if the object is not covers the clip_area area*/
+ return ancestor_design(led, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_MAIN) {
/*Make darker colors in a temporary style according to the brightness*/
lv_led_ext_t * ext = lv_obj_get_ext_attr(led);
@@ -210,10 +226,10 @@ static bool lv_led_design(lv_obj_t * led, const lv_area_t * mask, lv_design_mode
((bright_tmp - LV_LED_BRIGHT_OFF) * style->body.shadow.width) / (LV_LED_BRIGHT_ON - LV_LED_BRIGHT_OFF);
led->style_p = &leds_tmp;
- ancestor_design_f(led, mask, mode);
+ ancestor_design(led, clip_area, mode);
led->style_p = style_ori_p; /*Restore the ORIGINAL style pointer*/
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
diff --git a/src/lv_objx/lv_line.c b/src/lv_objx/lv_line.c
index 3831449a0..d9b25e46b 100644
--- a/src/lv_objx/lv_line.c
+++ b/src/lv_objx/lv_line.c
@@ -9,6 +9,7 @@
#include "lv_line.h"
#if LV_USE_LINE != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_misc/lv_math.h"
#include
@@ -18,6 +19,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_line"
/**********************
* TYPEDEFS
@@ -26,7 +28,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_line_design(lv_obj_t * line, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_line_signal(lv_obj_t * line, lv_signal_t sign, void * param);
/**********************
@@ -53,15 +55,18 @@ lv_obj_t * lv_line_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create a basic object*/
lv_obj_t * new_line = lv_obj_create(par, copy);
- lv_mem_assert(new_line);
+ LV_ASSERT_MEM(new_line);
if(new_line == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_line);
/*Extend the basic object to line object*/
lv_line_ext_t * ext = lv_obj_allocate_ext_attr(new_line, sizeof(lv_line_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_line);
+ return NULL;
+ }
ext->point_num = 0;
ext->point_array = NULL;
@@ -107,6 +112,8 @@ lv_obj_t * lv_line_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_line_set_points(lv_obj_t * line, const lv_point_t point_a[], uint16_t point_num)
{
+ LV_ASSERT_OBJ(line, LV_OBJX_NAME);
+
lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
ext->point_array = point_a;
ext->point_num = point_num;
@@ -135,6 +142,8 @@ void lv_line_set_points(lv_obj_t * line, const lv_point_t point_a[], uint16_t po
*/
void lv_line_set_auto_size(lv_obj_t * line, bool en)
{
+ LV_ASSERT_OBJ(line, LV_OBJX_NAME);
+
lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
if(ext->auto_size == en) return;
@@ -153,6 +162,8 @@ void lv_line_set_auto_size(lv_obj_t * line, bool en)
*/
void lv_line_set_y_invert(lv_obj_t * line, bool en)
{
+ LV_ASSERT_OBJ(line, LV_OBJX_NAME);
+
lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
if(ext->y_inv == en) return;
@@ -172,6 +183,8 @@ void lv_line_set_y_invert(lv_obj_t * line, bool en)
*/
bool lv_line_get_auto_size(const lv_obj_t * line)
{
+ LV_ASSERT_OBJ(line, LV_OBJX_NAME);
+
lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
return ext->auto_size == 0 ? false : true;
@@ -184,6 +197,8 @@ bool lv_line_get_auto_size(const lv_obj_t * line)
*/
bool lv_line_get_y_invert(const lv_obj_t * line)
{
+ LV_ASSERT_OBJ(line, LV_OBJX_NAME);
+
lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
return ext->y_inv == 0 ? false : true;
@@ -196,18 +211,18 @@ bool lv_line_get_y_invert(const lv_obj_t * line)
/**
* Handle the drawing related tasks of the lines
* @param line pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_line_design(lv_obj_t * line, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*A line never covers an area*/
if(mode == LV_DESIGN_COVER_CHK)
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
else if(mode == LV_DESIGN_DRAW_MAIN) {
lv_line_ext_t * ext = lv_obj_get_ext_attr(line);
@@ -225,12 +240,16 @@ static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, lv_design_mo
uint16_t i;
lv_style_t circle_style_tmp; /*If rounded...*/
- lv_style_copy(&circle_style_tmp, style);
- circle_style_tmp.body.radius = LV_RADIUS_CIRCLE;
- circle_style_tmp.body.main_color = style->line.color;
- circle_style_tmp.body.grad_color = style->line.color;
- circle_style_tmp.body.opa = style->line.opa;
+ if(style->line.rounded) {
+ lv_style_copy(&circle_style_tmp, style);
+ circle_style_tmp.body.radius = LV_RADIUS_CIRCLE;
+ circle_style_tmp.body.main_color = style->line.color;
+ circle_style_tmp.body.grad_color = style->line.color;
+ circle_style_tmp.body.opa = style->line.opa;
+ }
lv_area_t circle_area;
+ lv_coord_t r = (style->line.width >> 1);
+ lv_coord_t r_corr = (style->line.width & 1) ? 0 : 1;
/*Read all points and draw the lines*/
for(i = 0; i < ext->point_num - 1; i++) {
@@ -245,28 +264,28 @@ static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, lv_design_mo
p1.y = h - ext->point_array[i].y + y_ofs;
p2.y = h - ext->point_array[i + 1].y + y_ofs;
}
- lv_draw_line(&p1, &p2, mask, style, opa_scale);
+ lv_draw_line(&p1, &p2, clip_area, style, opa_scale);
/*Draw circle on the joints if enabled*/
if(style->line.rounded) {
- circle_area.x1 = p1.x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.y1 = p1.y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.x2 = p1.x + ((style->line.width - 1) >> 1);
- circle_area.y2 = p1.y + ((style->line.width - 1) >> 1);
- lv_draw_rect(&circle_area, mask, &circle_style_tmp, opa_scale);
+ circle_area.x1 = p1.x - r;
+ circle_area.y1 = p1.y - r;
+ circle_area.x2 = p1.x + r - r_corr;
+ circle_area.y2 = p1.y + r - r_corr ;
+ lv_draw_rect(&circle_area, clip_area, &circle_style_tmp, opa_scale);
}
}
/*Draw circle on the last point too if enabled*/
if(style->line.rounded) {
- circle_area.x1 = p2.x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.y1 = p2.y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
- circle_area.x2 = p2.x + ((style->line.width - 1) >> 1);
- circle_area.y2 = p2.y + ((style->line.width - 1) >> 1);
- lv_draw_rect(&circle_area, mask, &circle_style_tmp, opa_scale);
+ circle_area.x1 = p2.x - r;
+ circle_area.y1 = p2.y - r;
+ circle_area.x2 = p2.x + r - r_corr;
+ circle_area.y2 = p2.y + r - r_corr;
+ lv_draw_rect(&circle_area, clip_area, &circle_style_tmp, opa_scale);
}
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -282,15 +301,9 @@ static lv_res_t lv_line_signal(lv_obj_t * line, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(line, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
- if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_line";
- } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+ if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
const lv_style_t * style = lv_line_get_style(line, LV_LINE_STYLE_MAIN);
if(line->ext_draw_pad < style->line.width) line->ext_draw_pad = style->line.width;
}
diff --git a/src/lv_objx/lv_list.c b/src/lv_objx/lv_list.c
index ef50c4afe..f29f555dc 100644
--- a/src/lv_objx/lv_list.c
+++ b/src/lv_objx/lv_list.c
@@ -9,6 +9,7 @@
#include "lv_list.h"
#if LV_USE_LIST != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_core/lv_group.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_anim.h"
@@ -17,6 +18,8 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_list"
+
#define LV_LIST_LAYOUT_DEF LV_LAYOUT_COL_M
#if LV_USE_ANIMATION == 0
@@ -69,14 +72,17 @@ lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor basic object*/
lv_obj_t * new_list = lv_page_create(par, copy);
- lv_mem_assert(new_list);
+ LV_ASSERT_MEM(new_list);
if(new_list == NULL) return NULL;
if(ancestor_page_signal == NULL) ancestor_page_signal = lv_obj_get_signal_cb(new_list);
lv_list_ext_t * ext = lv_obj_allocate_ext_attr(new_list, sizeof(lv_list_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_list);
+ return NULL;
+ }
ext->style_img = NULL;
ext->styles_btn[LV_BTN_STATE_REL] = &lv_style_btn_rel;
@@ -149,13 +155,15 @@ lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy)
/**
* Delete all children of the scrl object, without deleting scrl child.
- * @param obj pointer to an object
+ * @param list pointer to an object
*/
-void lv_list_clean(lv_obj_t * obj)
+void lv_list_clean(lv_obj_t * list)
{
- lv_obj_t * scrl = lv_page_get_scrl(obj);
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
+ lv_obj_t * scrl = lv_page_get_scrl(list);
lv_obj_clean(scrl);
- lv_list_ext_t * ext = lv_obj_get_ext_attr(obj);
+ lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
ext->size = 0;
}
@@ -172,6 +180,8 @@ void lv_list_clean(lv_obj_t * obj)
*/
lv_obj_t * lv_list_add_btn(lv_obj_t * list, const void * img_src, const char * txt)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
ext->size++;
/*Create a list element with the image an the text*/
@@ -211,7 +221,8 @@ lv_obj_t * lv_list_add_btn(lv_obj_t * list, const void * img_src, const char * t
lv_label_set_text(label, txt);
lv_obj_set_click(label, false);
lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL_CIRC);
- lv_obj_set_width(label, liste->coords.x2 - label->coords.x1 - btn_hor_pad);
+ if(lv_obj_get_base_dir(liste) == LV_BIDI_DIR_RTL) lv_obj_set_width(label, label->coords.x2 - liste->coords.x1 - btn_hor_pad);
+ else lv_obj_set_width(label, liste->coords.x2 - label->coords.x1 - btn_hor_pad);
if(label_signal == NULL) label_signal = lv_obj_get_signal_cb(label);
}
#if LV_USE_GROUP
@@ -237,6 +248,8 @@ lv_obj_t * lv_list_add_btn(lv_obj_t * list, const void * img_src, const char * t
*/
bool lv_list_remove(const lv_obj_t * list, uint16_t index)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
if(index >= ext->size) return false;
uint16_t count = 0;
@@ -264,6 +277,8 @@ bool lv_list_remove(const lv_obj_t * list, uint16_t index)
*/
void lv_list_set_single_mode(lv_obj_t * list, bool mode)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
ext->single_mode = mode;
@@ -279,6 +294,9 @@ void lv_list_set_single_mode(lv_obj_t * list, bool mode)
*/
void lv_list_set_btn_selected(lv_obj_t * list, lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+ if(btn) LV_ASSERT_OBJ(list, "lv_btn");
+
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
if(ext->selected_btn) {
@@ -304,7 +322,7 @@ void lv_list_set_btn_selected(lv_obj_t * list, lv_obj_t * btn)
else if(s == LV_BTN_STATE_TGL_REL)
lv_btn_set_state(ext->selected_btn, LV_BTN_STATE_TGL_PR);
- lv_page_focus(list, ext->selected_btn, lv_list_get_anim_time(list));
+ lv_page_focus(list, ext->selected_btn, LV_ANIM_ON);
}
}
@@ -318,6 +336,8 @@ void lv_list_set_btn_selected(lv_obj_t * list, lv_obj_t * btn)
*/
void lv_list_set_style(lv_obj_t * list, lv_list_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
lv_btn_style_t btn_style_refr = LV_BTN_STYLE_REL;
lv_obj_t * btn;
@@ -363,6 +383,38 @@ void lv_list_set_style(lv_obj_t * list, lv_list_style_t type, const lv_style_t *
}
}
+/**
+ * Set layout of a list
+ * @param list pointer to a list object
+ * @param layout which layout should be used
+ */
+ void lv_list_set_layout(lv_obj_t * list, lv_layout_t layout)
+ {
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
+ /* Update list layout if necessary */
+ if (layout == lv_list_get_layout(list)) return;
+
+ /* Get the first button on the list */
+ lv_obj_t * btn = lv_list_get_prev_btn(list, NULL);
+
+ /* Visit all buttons on the list and update their layout */
+ while(btn != NULL) {
+ /*If a column layout set the buttons' width to list width*/
+ if(layout == LV_LAYOUT_COL_M || layout == LV_LAYOUT_COL_L || layout == LV_LAYOUT_COL_R) {
+ lv_btn_set_fit2(list, LV_FIT_FLOOD, LV_FIT_TIGHT);
+ }
+ /*If a row layout set the buttons' width according to the content*/
+ else if (layout == LV_LAYOUT_ROW_M || layout == LV_LAYOUT_ROW_T || layout == LV_LAYOUT_ROW_B) {
+ lv_btn_set_fit(list, LV_FIT_TIGHT);
+ }
+
+ btn = lv_list_get_prev_btn(list, btn);
+ }
+
+ lv_page_set_scrl_layout(list, layout);
+ }
+
/*=====================
* Getter functions
*====================*/
@@ -373,6 +425,8 @@ void lv_list_set_style(lv_obj_t * list, lv_list_style_t type, const lv_style_t *
*/
bool lv_list_get_single_mode(lv_obj_t * list)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
return (ext->single_mode);
@@ -385,6 +439,8 @@ bool lv_list_get_single_mode(lv_obj_t * list)
*/
const char * lv_list_get_btn_text(const lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(btn, "lv_btn");
+
lv_obj_t * label = lv_list_get_btn_label(btn);
if(label == NULL) return "";
return lv_label_get_text(label);
@@ -397,6 +453,8 @@ const char * lv_list_get_btn_text(const lv_obj_t * btn)
*/
lv_obj_t * lv_list_get_btn_label(const lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(btn, "lv_btn");
+
lv_obj_t * label = lv_obj_get_child(btn, NULL);
if(label == NULL) return NULL;
@@ -415,6 +473,8 @@ lv_obj_t * lv_list_get_btn_label(const lv_obj_t * btn)
*/
lv_obj_t * lv_list_get_btn_img(const lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(btn, "lv_btn");
+
#if LV_USE_IMG != 0
lv_obj_t * img = lv_obj_get_child(btn, NULL);
if(img == NULL) return NULL;
@@ -438,6 +498,8 @@ lv_obj_t * lv_list_get_btn_img(const lv_obj_t * btn)
*/
lv_obj_t * lv_list_get_prev_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
/* Not a good practice but user can add/create objects to the lists manually.
* When getting the next button try to be sure that it is at least a button */
@@ -463,6 +525,8 @@ lv_obj_t * lv_list_get_prev_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
*/
lv_obj_t * lv_list_get_next_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
/* Not a good practice but user can add/create objects to the lists manually.
* When getting the next button try to be sure that it is at least a button */
@@ -488,6 +552,9 @@ lv_obj_t * lv_list_get_next_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
*/
int32_t lv_list_get_btn_index(const lv_obj_t * list, const lv_obj_t * btn)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+ LV_ASSERT_OBJ(btn, "lv_btn");
+
int index = 0;
if(list == NULL) {
/* no list provided, assuming btn is part of a list */
@@ -511,6 +578,8 @@ int32_t lv_list_get_btn_index(const lv_obj_t * list, const lv_obj_t * btn)
*/
uint16_t lv_list_get_size(const lv_obj_t * list)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
return ext->size;
}
@@ -523,20 +592,35 @@ uint16_t lv_list_get_size(const lv_obj_t * list)
*/
lv_obj_t * lv_list_get_btn_selected(const lv_obj_t * list)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
return ext->selected_btn;
}
-
#endif
+/**
+ * Get layout of a list
+ * @param list pointer to a list object
+ * @return layout of the list object
+ */
+lv_layout_t lv_list_get_layout(lv_obj_t * list)
+{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
+ return lv_page_get_scrl_layout(list);
+}
+
/**
* Get a style of a list
* @param list pointer to a list object
* @param type which style should be get
* @return style pointer to a style
- * */
+ */
const lv_style_t * lv_list_get_style(const lv_obj_t * list, lv_list_style_t type)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
@@ -555,6 +639,7 @@ const lv_style_t * lv_list_get_style(const lv_obj_t * list, lv_list_style_t type
return style;
}
+
/*=====================
* Other functions
*====================*/
@@ -565,6 +650,8 @@ const lv_style_t * lv_list_get_style(const lv_obj_t * list, lv_list_style_t type
*/
void lv_list_up(const lv_obj_t * list)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
/*Search the first list element which 'y' coordinate is below the parent
* and position the list to show this element on the bottom*/
lv_obj_t * scrl = lv_page_get_scrl(list);
@@ -610,6 +697,8 @@ void lv_list_up(const lv_obj_t * list)
*/
void lv_list_down(const lv_obj_t * list)
{
+ LV_ASSERT_OBJ(list, LV_OBJX_NAME);
+
/*Search the first list element which 'y' coordinate is above the parent
* and position the list to show this element on the top*/
lv_obj_t * scrl = lv_page_get_scrl(list);
@@ -651,6 +740,7 @@ void lv_list_down(const lv_obj_t * list)
*/
void lv_list_focus(const lv_obj_t * btn, lv_anim_enable_t anim)
{
+ LV_ASSERT_OBJ(btn, "");
#if LV_USE_ANIMATION == 0
anim = false;
@@ -679,6 +769,7 @@ static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_page_signal(list, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_PRESSING ||
sign == LV_SIGNAL_LONG_PRESS || sign == LV_SIGNAL_LONG_PRESS_REP) {
@@ -808,13 +899,6 @@ static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void * param)
}
}
#endif
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_list";
}
return res;
}
@@ -833,11 +917,11 @@ static lv_res_t lv_list_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * para
/* Include the ancient signal function */
res = ancestor_btn_signal(btn, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
if(sign == LV_SIGNAL_RELEASED) {
lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- ext->page.scroll_prop_ip = 0;
#if LV_USE_GROUP
lv_group_t * g = lv_obj_get_group(list);
@@ -865,10 +949,6 @@ static lv_res_t lv_list_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * para
if(lv_indev_is_dragging(lv_indev_get_act()) == false && ext->single_mode) {
lv_list_btn_single_select(btn);
}
- } else if(sign == LV_SIGNAL_PRESS_LOST) {
- lv_obj_t * list = lv_obj_get_parent(lv_obj_get_parent(btn));
- lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
- ext->page.scroll_prop_ip = 0;
} else if(sign == LV_SIGNAL_CLEANUP) {
#if LV_USE_GROUP
diff --git a/src/lv_objx/lv_list.h b/src/lv_objx/lv_list.h
index 5a8c6ee4c..e17bc87d5 100644
--- a/src/lv_objx/lv_list.h
+++ b/src/lv_objx/lv_list.h
@@ -95,9 +95,9 @@ lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy);
/**
* Delete all children of the scrl object, without deleting scrl child.
- * @param obj pointer to an object
+ * @param list pointer to an object
*/
-void lv_list_clean(lv_obj_t * obj);
+void lv_list_clean(lv_obj_t * list);
/*======================
* Add/remove functions
@@ -192,6 +192,13 @@ static inline void lv_list_set_anim_time(lv_obj_t * list, uint16_t anim_time)
*/
void lv_list_set_style(lv_obj_t * list, lv_list_style_t type, const lv_style_t * style);
+/**
+ * Set layout of a list
+ * @param list pointer to a list object
+ * @param layout which layout should be used
+ */
+void lv_list_set_layout(lv_obj_t * list, lv_layout_t layout);
+
/*=====================
* Getter functions
*====================*/
@@ -262,6 +269,13 @@ uint16_t lv_list_get_size(const lv_obj_t * list);
lv_obj_t * lv_list_get_btn_selected(const lv_obj_t * list);
#endif
+/**
+ * Get layout of a list
+ * @param list pointer to a list object
+ * @return layout of the list object
+ */
+lv_layout_t lv_list_get_layout(lv_obj_t * list);
+
/**
* Get the scroll bar mode of a list
* @param list pointer to a list object
diff --git a/src/lv_objx/lv_lmeter.c b/src/lv_objx/lv_lmeter.c
index 78f7a8e61..e451ff677 100644
--- a/src/lv_objx/lv_lmeter.c
+++ b/src/lv_objx/lv_lmeter.c
@@ -9,6 +9,7 @@
#include "lv_lmeter.h"
#if LV_USE_LMETER != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_core/lv_group.h"
@@ -17,8 +18,7 @@
/*********************
* DEFINES
*********************/
-#define LV_LMETER_LINE_UPSCALE 5 /*2^x upscale of line to make rounding*/
-#define LV_LMETER_LINE_UPSCALE_MASK ((1 << LV_LMETER_LINE_UPSCALE) - 1)
+#define LV_OBJX_NAME "lv_lmeter"
/**********************
* TYPEDEFS
@@ -27,9 +27,8 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_lmeter_signal(lv_obj_t * lmeter, lv_signal_t sign, void * param);
-static lv_coord_t lv_lmeter_coord_round(int32_t x);
/**********************
* STATIC VARIABLES
@@ -57,15 +56,18 @@ lv_obj_t * lv_lmeter_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of line meter*/
lv_obj_t * new_lmeter = lv_obj_create(par, copy);
- lv_mem_assert(new_lmeter);
+ LV_ASSERT_MEM(new_lmeter);
if(new_lmeter == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_lmeter);
/*Allocate the line meter type specific extended data*/
lv_lmeter_ext_t * ext = lv_obj_allocate_ext_attr(new_lmeter, sizeof(lv_lmeter_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_lmeter);
+ return NULL;
+ }
/*Initialize the allocated 'ext' */
ext->min_value = 0;
@@ -73,6 +75,7 @@ lv_obj_t * lv_lmeter_create(lv_obj_t * par, const lv_obj_t * copy)
ext->cur_value = 0;
ext->line_cnt = 21; /*Odd scale number looks better*/
ext->scale_angle = 240; /*(scale_num - 1) * N looks better */
+ ext->angle_ofs = 0;
/*The signal and design functions are not copied so set them here*/
lv_obj_set_signal_cb(new_lmeter, lv_lmeter_signal);
@@ -119,6 +122,8 @@ lv_obj_t * lv_lmeter_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_lmeter_set_value(lv_obj_t * lmeter, int16_t value)
{
+ LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
+
lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
if(ext->cur_value == value) return;
@@ -135,6 +140,8 @@ void lv_lmeter_set_value(lv_obj_t * lmeter, int16_t value)
*/
void lv_lmeter_set_range(lv_obj_t * lmeter, int16_t min, int16_t max)
{
+ LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
+
lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
if(ext->min_value == min && ext->max_value == max) return;
@@ -157,8 +164,10 @@ void lv_lmeter_set_range(lv_obj_t * lmeter, int16_t min, int16_t max)
* @param angle angle of the scale (0..360)
* @param line_cnt number of lines
*/
-void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint8_t line_cnt)
+void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint16_t line_cnt)
{
+ LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
+
lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
if(ext->scale_angle == angle && ext->line_cnt == line_cnt) return;
@@ -168,6 +177,21 @@ void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint8_t line_cnt)
lv_obj_invalidate(lmeter);
}
+/**
+ * Set the set an offset for the line meter's angles to rotate it.
+ * @param lmeter pointer to a line meter object
+ * @param angle angle where the meter will be facing (with its center)
+ */
+void lv_lmeter_set_angle_offset(lv_obj_t * lmeter, uint16_t angle)
+{
+ lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
+ if(ext->angle_ofs == angle) return;
+
+ ext->angle_ofs = angle;
+
+ lv_obj_invalidate(lmeter);
+}
+
/*=====================
* Getter functions
*====================*/
@@ -179,6 +203,8 @@ void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint8_t line_cnt)
*/
int16_t lv_lmeter_get_value(const lv_obj_t * lmeter)
{
+ LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
+
lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
return ext->cur_value;
}
@@ -190,6 +216,8 @@ int16_t lv_lmeter_get_value(const lv_obj_t * lmeter)
*/
int16_t lv_lmeter_get_min_value(const lv_obj_t * lmeter)
{
+ LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
+
lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
return ext->min_value;
}
@@ -201,6 +229,8 @@ int16_t lv_lmeter_get_min_value(const lv_obj_t * lmeter)
*/
int16_t lv_lmeter_get_max_value(const lv_obj_t * lmeter)
{
+ LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
+
lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
return ext->max_value;
}
@@ -212,6 +242,8 @@ int16_t lv_lmeter_get_max_value(const lv_obj_t * lmeter)
*/
uint8_t lv_lmeter_get_line_count(const lv_obj_t * lmeter)
{
+ LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
+
lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
return ext->line_cnt;
}
@@ -219,14 +251,28 @@ uint8_t lv_lmeter_get_line_count(const lv_obj_t * lmeter)
/**
* Get the scale angle of a line meter
* @param lmeter pointer to a line meter object
- * @return angle of the scale
+ * @return angle_ofs of the scale
*/
uint16_t lv_lmeter_get_scale_angle(const lv_obj_t * lmeter)
{
+ LV_ASSERT_OBJ(lmeter, LV_OBJX_NAME);
+
lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
return ext->scale_angle;
}
+/**
+ * get the set an offset for the line meter.
+ * @param lmeter pointer to a line meter object
+ * @return angle offset (0..360)
+ */
+uint16_t lv_lmeter_get_angle_offset(lv_obj_t * lmeter)
+{
+ lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter);
+
+ return ext->angle_ofs;
+}
+
/**********************
* STATIC FUNCTIONS
**********************/
@@ -234,18 +280,18 @@ uint16_t lv_lmeter_get_scale_angle(const lv_obj_t * lmeter)
/**
* Handle the drawing related tasks of the line meters
* @param lmeter pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
@@ -268,31 +314,34 @@ static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, lv_desig
lv_coord_t x_ofs = lv_obj_get_width(lmeter) / 2 + lmeter->coords.x1;
lv_coord_t y_ofs = lv_obj_get_height(lmeter) / 2 + lmeter->coords.y1;
- int16_t angle_ofs = 90 + (360 - ext->scale_angle) / 2;
+ int16_t angle_ofs = ext->angle_ofs + 90 + (360 - ext->scale_angle) / 2;
int16_t level =
(int32_t)((int32_t)(ext->cur_value - ext->min_value) * ext->line_cnt) / (ext->max_value - ext->min_value);
uint8_t i;
style_tmp.line.color = style->body.main_color;
- /*Calculate every coordinate in a bigger size to make rounding later*/
- r_out = r_out << LV_LMETER_LINE_UPSCALE;
- r_in = r_in << LV_LMETER_LINE_UPSCALE;
-
for(i = 0; i < ext->line_cnt; i++) {
/*Calculate the position a scale label*/
int16_t angle = (i * ext->scale_angle) / (ext->line_cnt - 1) + angle_ofs;
- lv_coord_t y_out = (int32_t)((int32_t)lv_trigo_sin(angle) * r_out) >> LV_TRIGO_SHIFT;
- lv_coord_t x_out = (int32_t)((int32_t)lv_trigo_sin(angle + 90) * r_out) >> LV_TRIGO_SHIFT;
- lv_coord_t y_in = (int32_t)((int32_t)lv_trigo_sin(angle) * r_in) >> LV_TRIGO_SHIFT;
- lv_coord_t x_in = (int32_t)((int32_t)lv_trigo_sin(angle + 90) * r_in) >> LV_TRIGO_SHIFT;
+ lv_coord_t y_out = (int32_t)((int32_t)lv_trigo_sin(angle) * r_out) >> (LV_TRIGO_SHIFT - 8);
+ lv_coord_t x_out = (int32_t)((int32_t)lv_trigo_sin(angle + 90) * r_out) >> (LV_TRIGO_SHIFT - 8);
+ lv_coord_t y_in = (int32_t)((int32_t)lv_trigo_sin(angle) * r_in) >> (LV_TRIGO_SHIFT - 8);
+ lv_coord_t x_in = (int32_t)((int32_t)lv_trigo_sin(angle + 90) * r_in) >> (LV_TRIGO_SHIFT - 8);
/*Rounding*/
- x_out = lv_lmeter_coord_round(x_out);
- x_in = lv_lmeter_coord_round(x_in);
- y_out = lv_lmeter_coord_round(y_out);
- y_in = lv_lmeter_coord_round(y_in);
+ if(x_out <= 0) x_out = (x_out + 127) >> 8;
+ else x_out = (x_out - 127) >> 8;
+
+ if(x_in <= 0) x_in = (x_in + 127) >> 8;
+ else x_in = (x_in - 127) >> 8;
+
+ if(y_out <= 0) y_out = (y_out + 127) >> 8;
+ else y_out = (y_out - 127) >> 8;
+
+ if(y_in <= 0) y_in = (y_in + 127) >> 8;
+ else y_in = (y_in - 127) >> 8;
lv_point_t p1;
lv_point_t p2;
@@ -310,7 +359,7 @@ static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, lv_desig
lv_color_mix(style->body.grad_color, style->body.main_color, (255 * i) / ext->line_cnt);
}
- lv_draw_line(&p1, &p2, mask, &style_tmp, opa_scale);
+ lv_draw_line(&p1, &p2, clip_area, &style_tmp, opa_scale);
}
}
@@ -318,7 +367,7 @@ static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, lv_desig
else if(mode == LV_DESIGN_DRAW_POST) {
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -335,6 +384,7 @@ static lv_res_t lv_lmeter_signal(lv_obj_t * lmeter, lv_signal_t sign, void * par
/* Include the ancient signal function */
res = ancestor_signal(lmeter, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
@@ -343,40 +393,8 @@ static lv_res_t lv_lmeter_signal(lv_obj_t * lmeter, lv_signal_t sign, void * par
} else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
const lv_style_t * style = lv_lmeter_get_style(lmeter, LV_LMETER_STYLE_MAIN);
lmeter->ext_draw_pad = LV_MATH_MAX(lmeter->ext_draw_pad, style->line.width);
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_lmeter";
}
return res;
}
-
-/**
- * Round a coordinate which is upscaled (>=x.5 -> x + 1; x)
- * @param x a coordinate which is greater then it should be
- * @return the downscaled and rounded coordinate (+-1)
- */
-static lv_coord_t lv_lmeter_coord_round(int32_t x)
-{
-#if LV_LMETER_LINE_UPSCALE > 0
- bool was_negative = false;
- if(x < 0) {
- was_negative = true;
- x = -x;
- }
-
- x = (x >> LV_LMETER_LINE_UPSCALE) + ((x & LV_LMETER_LINE_UPSCALE_MASK) >> (LV_LMETER_LINE_UPSCALE - 1));
-
- if(was_negative) x = -x;
-
- return x;
-#else
- return x;
-#endif
-}
-
#endif
diff --git a/src/lv_objx/lv_lmeter.h b/src/lv_objx/lv_lmeter.h
index e1a70a64f..b90b6ba40 100644
--- a/src/lv_objx/lv_lmeter.h
+++ b/src/lv_objx/lv_lmeter.h
@@ -36,7 +36,8 @@ typedef struct
/*No inherited ext.*/ /*Ext. of ancestor*/
/*New data for this type */
uint16_t scale_angle; /*Angle of the scale in deg. (0..360)*/
- uint8_t line_cnt; /*Count of lines */
+ uint16_t angle_ofs;
+ uint16_t line_cnt; /*Count of lines */
int16_t cur_value;
int16_t min_value;
int16_t max_value;
@@ -86,7 +87,14 @@ void lv_lmeter_set_range(lv_obj_t * lmeter, int16_t min, int16_t max);
* @param angle angle of the scale (0..360)
* @param line_cnt number of lines
*/
-void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint8_t line_cnt);
+void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint16_t line_cnt);
+
+/**
+ * Set the set an offset for the line meter's angles to rotate it.
+ * @param lmeter pointer to a line meter object
+ * @param angle angle offset (0..360), rotates clockwise
+ */
+void lv_lmeter_set_angle_offset(lv_obj_t * lmeter, uint16_t angle);
/**
* Set the styles of a line meter
@@ -139,6 +147,13 @@ uint8_t lv_lmeter_get_line_count(const lv_obj_t * lmeter);
*/
uint16_t lv_lmeter_get_scale_angle(const lv_obj_t * lmeter);
+/**
+ * get the set an offset for the line meter.
+ * @param lmeter pointer to a line meter object
+ * @return angle offset (0..360)
+ */
+uint16_t lv_lmeter_get_angle_offset(lv_obj_t * lmeter);
+
/**
* Get the style of a line meter
* @param lmeter pointer to a line meter object
diff --git a/src/lv_objx/lv_mbox.c b/src/lv_objx/lv_mbox.c
index 9a5fa1dd7..604e798e8 100644
--- a/src/lv_objx/lv_mbox.c
+++ b/src/lv_objx/lv_mbox.c
@@ -9,6 +9,7 @@
#include "lv_mbox.h"
#if LV_USE_MBOX != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_core/lv_group.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_anim.h"
@@ -17,6 +18,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_mbos"
#if LV_USE_ANIMATION
#ifndef LV_MBOX_CLOSE_ANIM_TIME
@@ -68,15 +70,18 @@ lv_obj_t * lv_mbox_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor message box*/
lv_obj_t * new_mbox = lv_cont_create(par, copy);
- lv_mem_assert(new_mbox);
+ LV_ASSERT_MEM(new_mbox);
if(new_mbox == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_mbox);
/*Allocate the message box type specific extended data*/
lv_mbox_ext_t * ext = lv_obj_allocate_ext_attr(new_mbox, sizeof(lv_mbox_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_mbox);
+ return NULL;
+ }
ext->text = NULL;
ext->btnm = NULL;
@@ -137,8 +142,11 @@ lv_obj_t * lv_mbox_create(lv_obj_t * par, const lv_obj_t * copy)
* @param btn_map button descriptor (button matrix map).
* E.g. a const char *txt[] = {"ok", "close", ""} (Can not be local variable)
*/
-void lv_mbox_add_btns(lv_obj_t * mbox, const char ** btn_map)
+void lv_mbox_add_btns(lv_obj_t * mbox, const char * btn_map[])
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+ LV_ASSERT_NULL(btn_map);
+
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
/*Create a button matrix if not exists yet*/
@@ -174,6 +182,9 @@ void lv_mbox_add_btns(lv_obj_t * mbox, const char ** btn_map)
*/
void lv_mbox_set_text(lv_obj_t * mbox, const char * txt)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+ LV_ASSERT_STR(txt);
+
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
lv_label_set_text(ext->text, txt);
@@ -187,6 +198,8 @@ void lv_mbox_set_text(lv_obj_t * mbox, const char * txt)
*/
void lv_mbox_set_anim_time(lv_obj_t * mbox, uint16_t anim_time)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
anim_time = 0;
@@ -204,6 +217,8 @@ void lv_mbox_set_anim_time(lv_obj_t * mbox, uint16_t anim_time)
*/
void lv_mbox_start_auto_close(lv_obj_t * mbox, uint16_t delay)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
if(lv_mbox_get_anim_time(mbox) != 0) {
/*Add shrinking animations*/
@@ -258,6 +273,8 @@ void lv_mbox_start_auto_close(lv_obj_t * mbox, uint16_t delay)
*/
void lv_mbox_stop_auto_close(lv_obj_t * mbox)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_anim_del(mbox, NULL);
#else
@@ -273,6 +290,8 @@ void lv_mbox_stop_auto_close(lv_obj_t * mbox)
*/
void lv_mbox_set_style(lv_obj_t * mbox, lv_mbox_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
switch(type) {
@@ -295,6 +314,8 @@ void lv_mbox_set_style(lv_obj_t * mbox, lv_mbox_style_t type, const lv_style_t *
*/
void lv_mbox_set_recolor(lv_obj_t * mbox, bool en)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
if(ext->btnm) lv_btnm_set_recolor(ext->btnm, en);
@@ -311,6 +332,8 @@ void lv_mbox_set_recolor(lv_obj_t * mbox, bool en)
*/
const char * lv_mbox_get_text(const lv_obj_t * mbox)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
return lv_label_get_text(ext->text);
@@ -324,6 +347,8 @@ const char * lv_mbox_get_text(const lv_obj_t * mbox)
*/
uint16_t lv_mbox_get_active_btn(lv_obj_t * mbox)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
if(ext->btnm)
return lv_btnm_get_active_btn(ext->btnm);
@@ -339,6 +364,8 @@ uint16_t lv_mbox_get_active_btn(lv_obj_t * mbox)
*/
const char * lv_mbox_get_active_btn_text(lv_obj_t * mbox)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
if(ext->btnm)
return lv_btnm_get_active_btn_text(ext->btnm);
@@ -353,6 +380,8 @@ const char * lv_mbox_get_active_btn_text(lv_obj_t * mbox)
*/
uint16_t lv_mbox_get_anim_time(const lv_obj_t * mbox)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
return ext->anim_time;
@@ -370,6 +399,8 @@ uint16_t lv_mbox_get_anim_time(const lv_obj_t * mbox)
*/
const lv_style_t * lv_mbox_get_style(const lv_obj_t * mbox, lv_mbox_style_t type)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
@@ -394,6 +425,8 @@ const lv_style_t * lv_mbox_get_style(const lv_obj_t * mbox, lv_mbox_style_t type
*/
bool lv_mbox_get_recolor(const lv_obj_t * mbox)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
if(!ext->btnm) return false;
@@ -409,6 +442,8 @@ bool lv_mbox_get_recolor(const lv_obj_t * mbox)
*/
lv_obj_t * lv_mbox_get_btnm(lv_obj_t * mbox)
{
+ LV_ASSERT_OBJ(mbox, LV_OBJX_NAME);
+
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
return ext->btnm;
}
@@ -441,6 +476,7 @@ static lv_res_t lv_mbox_signal(lv_obj_t * mbox, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(mbox, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_mbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
if(sign == LV_SIGNAL_CORD_CHG) {
@@ -476,13 +512,6 @@ static lv_res_t lv_mbox_signal(lv_obj_t * mbox, lv_signal_t sign, void * param)
}
#endif
}
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_mbox";
}
return res;
diff --git a/src/lv_objx/lv_mbox.h b/src/lv_objx/lv_mbox.h
index df504f851..2068b3735 100644
--- a/src/lv_objx/lv_mbox.h
+++ b/src/lv_objx/lv_mbox.h
@@ -94,7 +94,7 @@ lv_obj_t * lv_mbox_create(lv_obj_t * par, const lv_obj_t * copy);
* @param btn_map button descriptor (button matrix map).
* E.g. a const char *txt[] = {"ok", "close", ""} (Can not be local variable)
*/
-void lv_mbox_add_btns(lv_obj_t * mbox, const char ** btn_mapaction);
+void lv_mbox_add_btns(lv_obj_t * mbox, const char * btn_mapaction[]);
/*=====================
* Setter functions
diff --git a/src/lv_objx/lv_objmask.c b/src/lv_objx/lv_objmask.c
new file mode 100644
index 000000000..1d426e92d
--- /dev/null
+++ b/src/lv_objx/lv_objmask.c
@@ -0,0 +1,356 @@
+/**
+ * @file lv_objmask.c
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_objmask.h"
+#include "../lv_core/lv_debug.h"
+#include "../lv_draw/lv_draw.h"
+
+#if defined(LV_USE_OBJMASK) && LV_USE_OBJMASK != 0
+
+/*********************
+ * DEFINES
+ *********************/
+#define LV_OBJX_NAME "lv_objmask"
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+static lv_design_res_t lv_objmask_design(lv_obj_t * objmask, const lv_area_t * clip_area, lv_design_mode_t mode);
+static lv_res_t lv_objmask_signal(lv_obj_t * objmask, lv_signal_t sign, void * param);
+static uint16_t get_param_size(lv_draw_mask_type_t type);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+/**
+ * Create a object mask object
+ * @param par pointer to an object, it will be the parent of the new object mask
+ * @param copy pointer to a object mask object, if not NULL then the new object will be copied from it
+ * @return pointer to the created object mask
+ */
+lv_obj_t * lv_objmask_create(lv_obj_t * par, const lv_obj_t * copy)
+{
+ LV_LOG_TRACE("object mask create started");
+
+ /*Create the ancestor of object mask*/
+ lv_obj_t * new_objmask = lv_cont_create(par, copy);
+ LV_ASSERT_MEM(new_objmask);
+ if(new_objmask == NULL) return NULL;
+
+ /*Allocate the object mask type specific extended data*/
+ lv_objmask_ext_t * ext = lv_obj_allocate_ext_attr(new_objmask, sizeof(lv_objmask_ext_t));
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_objmask);
+ return NULL;
+ }
+
+ if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_objmask);
+ if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_objmask);
+
+ /*Initialize the allocated 'ext' */
+ lv_ll_init(&ext->mask_ll, sizeof(lv_objmask_mask_t));
+
+ /*The signal and design functions are not copied so set them here*/
+ lv_obj_set_signal_cb(new_objmask, lv_objmask_signal);
+ lv_obj_set_design_cb(new_objmask, lv_objmask_design);
+
+ /*Init the new object mask object mask*/
+ if(copy == NULL) {
+ lv_objmask_set_style(new_objmask, LV_OBJMASK_STYLE_BG, &lv_style_transp);
+
+ }
+ /*TODO: Copy an existing object mask*/
+ else {
+ /* lv_objmask_ext_t * copy_ext = lv_obj_get_ext_attr(copy); */
+
+ /*Refresh the style with new signal function*/
+ lv_obj_refresh_style(new_objmask);
+ }
+
+ LV_LOG_INFO("object mask created");
+
+ return new_objmask;
+}
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add a mask
+ * @param objmask pointer to an Object mask object
+ * @param param an initialized mask parameter
+ * @return pointer to the added mask
+ */
+lv_objmask_mask_t * lv_objmask_add_mask(lv_obj_t * objmask, void * param)
+{
+ LV_ASSERT_OBJ(objmask, LV_OBJX_NAME);
+ LV_ASSERT_NULL(param)
+
+ lv_objmask_ext_t * ext = lv_obj_get_ext_attr(objmask);
+
+ lv_draw_mask_common_dsc_t * dsc = param;
+ uint16_t param_size = get_param_size(dsc->type);
+
+ lv_objmask_mask_t * m = lv_ll_ins_head(&ext->mask_ll);
+ m->param = lv_mem_alloc(param_size);
+ LV_ASSERT_MEM(m->param);
+ if(m == NULL) return NULL;
+
+ memcpy(m->param, param, param_size);
+
+ lv_obj_invalidate(objmask);
+
+ return m;
+}
+
+/**
+ * Update an already created mask
+ * @param objmask pointer to an Object mask object
+ * @param mask pointer to created mask (returned by `lv_objmask_add_mask`)
+ * @param param an initialized mask parameter (initialized by `lv_draw_mask_line/angle/.../_init`)
+ */
+void lv_objmask_update_mask(lv_obj_t * objmask, lv_objmask_mask_t * mask, void * param)
+{
+ LV_ASSERT_OBJ(objmask, LV_OBJX_NAME);
+ LV_ASSERT_NULL(mask);
+ LV_ASSERT_NULL(param);
+ lv_draw_mask_common_dsc_t * dsc = param;
+
+ memcpy(mask->param, param, get_param_size(dsc->type));
+
+ lv_obj_invalidate(objmask);
+}
+
+/**
+ * Remove a mask
+ * @param objmask pointer to an Object mask object
+ * @param mask pointer to created mask (returned by `lv_objmask_add_mask`)
+ * If `NULL` passed all masks will be deleted.
+ */
+void lv_objmask_remove_mask(lv_obj_t * objmask, lv_objmask_mask_t * mask)
+{
+ LV_ASSERT_OBJ(objmask, LV_OBJX_NAME);
+
+ lv_objmask_ext_t * ext = lv_obj_get_ext_attr(objmask);
+
+ /*Remove all masks*/
+ if(mask == NULL) {
+ lv_objmask_mask_t * m;
+ LV_LL_READ(ext->mask_ll, m) {
+ lv_mem_free(m->param);
+ }
+
+ lv_ll_clear(&ext->mask_ll);
+ }
+ /*Remove only the specified mask*/
+ else {
+ lv_mem_free(mask->param);
+ lv_ll_remove(&ext->mask_ll, mask);
+ }
+
+ lv_obj_invalidate(objmask);
+}
+
+
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+
+/*=====================
+ * Getter functions
+ *====================*/
+
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+/**
+ * Handle the drawing related tasks of the object masks
+ * @param objmask pointer to an object
+ * @param clip_area the object will be drawn only in this area
+ * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
+ * (return 'true' if yes)
+ * LV_DESIGN_DRAW: draw the object (always return 'true')
+ * LV_DESIGN_DRAW_POST: drawing after every children are drawn
+ * @param return an element of `lv_design_res_t`
+ */
+static lv_design_res_t lv_objmask_design(lv_obj_t * objmask, const lv_area_t * clip_area, lv_design_mode_t mode)
+{
+ /*Return false if the object is not covers the mask_p area*/
+ if(mode == LV_DESIGN_COVER_CHK) {
+ lv_objmask_ext_t * ext = lv_obj_get_ext_attr(objmask);
+ if(lv_ll_get_len(&ext->mask_ll) > 0) return LV_DESIGN_RES_MASKED;
+ else return ancestor_design(objmask, clip_area, mode);
+ }
+ /*Draw the object*/
+ else if(mode == LV_DESIGN_DRAW_MAIN) {
+ ancestor_design(objmask, clip_area, mode);
+
+ lv_objmask_ext_t * ext = lv_obj_get_ext_attr(objmask);
+
+ lv_coord_t xofs = objmask->coords.x1;
+ lv_coord_t yofs = objmask->coords.y1;
+
+ lv_objmask_mask_t * m;
+
+ LV_LL_READ(ext->mask_ll, m) {
+ lv_draw_mask_common_dsc_t * dsc = m->param;
+
+ if(dsc->type == LV_DRAW_MASK_TYPE_LINE) {
+ lv_draw_mask_line_param_t * p_ori = m->param;
+ lv_draw_mask_line_param_t * p_new = lv_mem_buf_get(sizeof(lv_draw_mask_line_param_t));
+
+ lv_draw_mask_line_points_init(p_new, p_ori->cfg.p1.x + xofs, p_ori->cfg.p1.y + yofs,
+ p_ori->cfg.p2.x + xofs, p_ori->cfg.p2.y + yofs,
+ p_ori->cfg.side);
+ lv_draw_mask_add(p_new, m->param);
+ }
+ else if(dsc->type == LV_DRAW_MASK_TYPE_ANGLE) {
+ lv_draw_mask_angle_param_t * p_ori = m->param;
+ lv_draw_mask_angle_param_t * p_new = lv_mem_buf_get(sizeof(lv_draw_mask_angle_param_t));
+
+ lv_draw_mask_angle_init(p_new, p_ori->cfg.vertex_p.x + xofs, p_ori->cfg.vertex_p.y + yofs,
+ p_ori->cfg.start_angle, p_ori->cfg.end_angle);
+ lv_draw_mask_add(p_new, m->param);
+ }
+ else if(dsc->type == LV_DRAW_MASK_TYPE_RADIUS) {
+ lv_draw_mask_radius_param_t * p_ori = m->param;
+ lv_draw_mask_radius_param_t * p_new = lv_mem_buf_get(sizeof(lv_draw_mask_radius_param_t));
+
+ lv_area_t rect;
+ rect.x1 = p_ori->cfg.rect.x1 + xofs;
+ rect.y1 = p_ori->cfg.rect.y1 + yofs;
+ rect.x2 = p_ori->cfg.rect.x2 + xofs;
+ rect.y2 = p_ori->cfg.rect.y2 + yofs;
+
+ lv_draw_mask_radius_init(p_new, &rect, p_ori->cfg.radius, p_ori->cfg.outer);
+ lv_draw_mask_add(p_new, m->param);
+ }
+ else if(dsc->type == LV_DRAW_MASK_TYPE_FADE) {
+ lv_draw_mask_fade_param_t * p_ori = m->param;
+ lv_draw_mask_fade_param_t * p_new = lv_mem_buf_get(sizeof(lv_draw_mask_fade_param_t));
+
+ lv_area_t rect;
+ rect.x1 = p_ori->cfg.coords.x1 + xofs;
+ rect.y1 = p_ori->cfg.coords.y1 + yofs;
+ rect.x2 = p_ori->cfg.coords.x2 + xofs;
+ rect.y2 = p_ori->cfg.coords.y2 + yofs;
+
+ lv_draw_mask_fade_init(p_new, &rect, p_ori->cfg.opa_top, p_ori->cfg.y_top + yofs,
+ p_ori->cfg.opa_bottom, p_ori->cfg.y_bottom + yofs);
+ lv_draw_mask_add(p_new, m->param);
+ }
+ else if(dsc->type == LV_DRAW_MASK_TYPE_MAP) {
+ lv_draw_mask_map_param_t * p_ori = m->param;
+ lv_draw_mask_map_param_t * p_new = lv_mem_buf_get(sizeof(lv_draw_mask_map_param_t));
+
+ lv_area_t rect;
+ rect.x1 = p_ori->cfg.coords.x1 + xofs;
+ rect.y1 = p_ori->cfg.coords.y1 + yofs;
+ rect.x2 = p_ori->cfg.coords.x2 + xofs;
+ rect.y2 = p_ori->cfg.coords.y2 + yofs;
+
+ lv_draw_mask_map_init(p_new, &rect, p_ori->cfg.map);
+ lv_draw_mask_add(p_new, m->param);
+ }
+
+
+ }
+ }
+ /*Post draw when the children are drawn*/
+ else if(mode == LV_DESIGN_DRAW_POST) {
+ lv_objmask_ext_t * ext = lv_obj_get_ext_attr(objmask);
+
+
+ lv_objmask_mask_t * m;
+
+ LV_LL_READ(ext->mask_ll, m) {
+ void * param;
+ param = lv_draw_mask_remove_custom(m->param);
+ lv_mem_buf_release(param);
+ }
+
+ }
+
+ return LV_DESIGN_RES_OK;
+}
+
+/**
+ * Signal function of the object mask
+ * @param objmask pointer to a object mask object
+ * @param sign a signal type from lv_signal_t enum
+ * @param param pointer to a signal specific variable
+ * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
+ */
+static lv_res_t lv_objmask_signal(lv_obj_t * objmask, lv_signal_t sign, void * param)
+{
+ lv_res_t res;
+
+ /* Include the ancient signal function */
+ res = ancestor_signal(objmask, sign, param);
+ if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
+
+ if(sign == LV_SIGNAL_CLEANUP) {
+ lv_objmask_ext_t * ext = lv_obj_get_ext_attr(objmask);
+ lv_objmask_mask_t * i;
+ LV_LL_READ(ext->mask_ll, i) {
+ if(i->param) {
+ lv_mem_free(i->param);
+ i->param = NULL;
+ }
+ }
+
+ lv_ll_clear(&ext->mask_ll);
+ }
+
+ return res;
+}
+
+static uint16_t get_param_size(lv_draw_mask_type_t type)
+{
+ uint16_t param_size;
+ switch(type) {
+ case LV_DRAW_MASK_TYPE_LINE: param_size = sizeof(lv_draw_mask_line_param_t); break;
+ case LV_DRAW_MASK_TYPE_ANGLE: param_size = sizeof(lv_draw_mask_angle_param_t); break;
+ case LV_DRAW_MASK_TYPE_RADIUS: param_size = sizeof(lv_draw_mask_radius_param_t); break;
+ case LV_DRAW_MASK_TYPE_FADE: param_size = sizeof(lv_draw_mask_fade_param_t); break;
+ case LV_DRAW_MASK_TYPE_MAP: param_size = sizeof(lv_draw_mask_map_param_t); break;
+ default: param_size = 0;
+ }
+
+ return param_size;
+}
+
+#else /* Enable this file at the top */
+
+#endif
diff --git a/src/lv_objx/lv_objmask.h b/src/lv_objx/lv_objmask.h
new file mode 100644
index 000000000..18a0506f7
--- /dev/null
+++ b/src/lv_objx/lv_objmask.h
@@ -0,0 +1,137 @@
+/**
+ * @file lv_objmask.h
+ *
+ */
+
+#ifndef LV_OBJMASK_H
+#define LV_OBJMASK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lv_conf.h"
+#else
+#include "../../../lv_conf.h"
+#endif
+
+#if LV_USE_OBJMASK != 0
+
+#include "../lv_core/lv_obj.h"
+#include "../lv_objx/lv_cont.h"
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+typedef struct {
+ void * param;
+}lv_objmask_mask_t;
+
+/*Data of object mask*/
+typedef struct
+{
+ lv_cont_ext_t cont; /*Ext. of ancestor*/
+ /*New data for this type */
+ lv_ll_t mask_ll; /*Store the created masks*/
+
+} lv_objmask_ext_t;
+
+/*Styles*/
+enum {
+ LV_OBJMASK_STYLE_BG,
+};
+typedef uint8_t lv_objmask_style_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Create a object mask objects
+ * @param par pointer to an object, it will be the parent of the new object mask
+ * @param copy pointer to a object mask object, if not NULL then the new object will be copied from it
+ * @return pointer to the created object mask
+ */
+lv_obj_t * lv_objmask_create(lv_obj_t * par, const lv_obj_t * copy);
+
+/*======================
+ * Add/remove functions
+ *=====================*/
+
+/**
+ * Add a mask
+ * @param objmask pointer to an Object mask object
+ * @param param an initialized mask parameter
+ * @return pointer to the added mask
+ */
+lv_objmask_mask_t * lv_objmask_add_mask(lv_obj_t * objmask, void * param);
+
+/**
+ * Update an already created mask
+ * @param objmask pointer to an Object mask object
+ * @param mask pointer to created mask (returned by `lv_objmask_add_mask`)
+ * @param param an initialized mask parameter (initialized by `lv_draw_mask_line/angle/.../_init`)
+ */
+void lv_objmask_update_mask(lv_obj_t * objmask, lv_objmask_mask_t * mask, void * param);
+
+/**
+ * Remove a mask
+ * @param objmask pointer to an Object mask object
+ * @param mask pointer to created mask (returned by `lv_objmask_add_mask`)
+ * If `NULL` passed all masks will be deleted.
+ */
+void lv_objmask_remove_mask(lv_obj_t * objmask, lv_objmask_mask_t * mask);
+
+/*=====================
+ * Setter functions
+ *====================*/
+
+/**
+ * Set the style of a object mask
+ * @param objmask pointer to a container object
+ * @param type which style should be set (can be only `LV_CONT_STYLE_MAIN`)
+ * @param style pointer to the new style
+ */
+static inline void lv_objmask_set_style(lv_obj_t * objmask, lv_cont_style_t type, const lv_style_t * style)
+{
+ lv_cont_set_style(objmask, type, style);
+}
+
+/*=====================
+ * Getter functions
+ *====================*/
+/**
+ * Get the style of an object mask
+ * @param objmask pointer to a container object
+ * @param type which style should be get (can be only `LV_CONT_STYLE_MAIN`)
+ * @return pointer to the container's style
+ */
+static inline const lv_style_t * lv_objmask_get_style(const lv_obj_t * objmask, lv_cont_style_t type)
+{
+ return lv_cont_get_style(objmask, type);
+}
+
+/*=====================
+ * Other functions
+ *====================*/
+
+/**********************
+ * MACROS
+ **********************/
+
+#endif /*LV_USE_OBJMASK*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*LV_OBJMASK_H*/
diff --git a/src/lv_objx/lv_objx.mk b/src/lv_objx/lv_objx.mk
index 45b3e2ad3..5879b420e 100644
--- a/src/lv_objx/lv_objx.mk
+++ b/src/lv_objx/lv_objx.mk
@@ -1,6 +1,7 @@
CSRCS += lv_arc.c
CSRCS += lv_bar.c
CSRCS += lv_cb.c
+CSRCS += lv_cpicker.c
CSRCS += lv_ddlist.c
CSRCS += lv_kb.c
CSRCS += lv_line.c
@@ -29,6 +30,7 @@ CSRCS += lv_lmeter.c
CSRCS += lv_page.c
CSRCS += lv_sw.c
CSRCS += lv_win.c
+CSRCS += lv_objmask.c
DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_objx
VPATH += :$(LVGL_DIR)/lvgl/src/lv_objx
diff --git a/src/lv_objx/lv_objx_templ.c b/src/lv_objx/lv_objx_templ.c
index b5c1b258e..aebefb4b9 100644
--- a/src/lv_objx/lv_objx_templ.c
+++ b/src/lv_objx/lv_objx_templ.c
@@ -15,6 +15,7 @@
/*********************
* INCLUDES
*********************/
+#include "../lv_core/lv_debug.h"
//#include "lv_templ.h" /*TODO uncomment this*/
#if defined(LV_USE_TEMPL) && LV_USE_TEMPL != 0
@@ -22,6 +23,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_templ"
/**********************
* TYPEDEFS
@@ -30,14 +32,14 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_templ_design(lv_obj_t * templ, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_templ_design(lv_obj_t * templ, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_templ_signal(lv_obj_t * templ, lv_signal_t sign, void * param);
/**********************
* STATIC VARIABLES
**********************/
-static lv_signal_func_t ancestor_signal;
-static lv_design_func_t ancestor_design;
+static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
/**********************
* MACROS
@@ -66,16 +68,20 @@ lv_obj_t * lv_templ_create(lv_obj_t * par, const lv_obj_t * copy)
/*Allocate the template type specific extended data*/
lv_templ_ext_t * ext = lv_obj_allocate_ext_attr(new_templ, sizeof(lv_templ_ext_t));
lv_mem_assert(ext);
- if(ext == NULL) return NULL;
- if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_func(new_templ);
- if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_func(new_templ);
+ if(ext == NULL) {
+ lv_obj_del(new_templ);
+ return NULL;
+ }
+
+ if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_templ);
+ if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_templ);
/*Initialize the allocated 'ext' */
ext->xyz = 0;
/*The signal and design functions are not copied so set them here*/
- lv_obj_set_signal_func(new_templ, lv_templ_signal);
- lv_obj_set_design_func(new_templ, lv_templ_design);
+ lv_obj_set_signal_cb(new_templ, lv_templ_signal);
+ lv_obj_set_design_cb(new_templ, lv_templ_design);
/*Init the new template template*/
if(copy == NULL) {
@@ -118,6 +124,8 @@ lv_obj_t * lv_templ_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_templ_set_style(lv_obj_t * templ, lv_templ_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(templ, LV_OBJX_NAME);
+
lv_templ_ext_t * ext = lv_obj_get_ext_attr(templ);
switch(type) {
@@ -142,6 +150,8 @@ void lv_templ_set_style(lv_obj_t * templ, lv_templ_style_t type, const lv_style_
*/
lv_style_t * lv_templ_get_style(const lv_obj_t * templ, lv_templ_style_t type)
{
+ LV_ASSERT_OBJ(templ, LV_OBJX_NAME);
+
lv_templ_ext_t * ext = lv_obj_get_ext_attr(templ);
lv_style_t * style = NULL;
@@ -174,13 +184,13 @@ lv_style_t * lv_templ_get_style(const lv_obj_t * templ, lv_templ_style_t type)
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_templ_design(lv_obj_t * templ, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_templ_design(lv_obj_t * templ, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
@@ -190,7 +200,7 @@ static bool lv_templ_design(lv_obj_t * templ, const lv_area_t * mask, lv_design_
else if(mode == LV_DESIGN_DRAW_POST) {
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -207,16 +217,10 @@ static lv_res_t lv_templ_signal(lv_obj_t * templ, lv_signal_t sign, void * param
/* Include the ancient signal function */
res = ancestor_signal(templ, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_templ";
}
return res;
diff --git a/src/lv_objx/lv_page.c b/src/lv_objx/lv_page.c
index e6c315363..9b4002bbd 100644
--- a/src/lv_objx/lv_page.c
+++ b/src/lv_objx/lv_page.c
@@ -9,6 +9,7 @@
#include "../lv_objx/lv_page.h"
#if LV_USE_PAGE != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_core/lv_group.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_themes/lv_theme.h"
@@ -19,6 +20,8 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_page"
+
#define LV_PAGE_SB_MIN_SIZE (LV_DPI / 8)
/*[ms] Scroll anim time on `lv_page_scroll_up/down/left/rigth`*/
@@ -41,8 +44,8 @@
* STATIC PROTOTYPES
**********************/
static void lv_page_sb_refresh(lv_obj_t * page);
-static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, lv_design_mode_t mode);
-static bool lv_scrl_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_page_design(lv_obj_t * page, const lv_area_t * clip_area, lv_design_mode_t mode);
+static lv_design_res_t lv_scrl_design(lv_obj_t * scrl, const lv_area_t * clisp_area, lv_design_mode_t mode);
static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param);
static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
static void scrl_def_event_cb(lv_obj_t * scrl, lv_event_t event);
@@ -77,7 +80,7 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor object*/
lv_obj_t * new_page = lv_cont_create(par, copy);
- lv_mem_assert(new_page);
+ LV_ASSERT_MEM(new_page);
if(new_page == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_page);
@@ -85,8 +88,11 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
/*Allocate the object type specific extended data*/
lv_page_ext_t * ext = lv_obj_allocate_ext_attr(new_page, sizeof(lv_page_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_page);
+ return NULL;
+ }
ext->scrl = NULL;
ext->sb.hor_draw = 0;
@@ -104,7 +110,7 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
ext->anim_time = LV_PAGE_DEF_ANIM_TIME;
#endif
ext->scroll_prop = 0;
- ext->scroll_prop_ip = 0;
+ ext->scroll_prop_obj = NULL;
/*Init the new page object*/
if(copy == NULL) {
@@ -171,11 +177,13 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
/**
* Delete all children of the scrl object, without deleting scrl child.
- * @param obj pointer to an object
+ * @param page pointer to an object
*/
-void lv_page_clean(lv_obj_t * obj)
+void lv_page_clean(lv_obj_t * page)
{
- lv_obj_t * scrl = lv_page_get_scrl(obj);
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
+ lv_obj_t * scrl = lv_page_get_scrl(page);
lv_obj_clean(scrl);
}
@@ -190,6 +198,8 @@ void lv_page_clean(lv_obj_t * obj)
*/
void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
if(ext->sb.mode == sb_mode) return;
@@ -216,6 +226,8 @@ void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode)
*/
void lv_page_set_anim_time(lv_obj_t * page, uint16_t anim_time)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
ext->anim_time = anim_time;
@@ -228,12 +240,19 @@ void lv_page_set_anim_time(lv_obj_t * page, uint16_t anim_time)
/**
* Enable the scroll propagation feature. If enabled then the page will move its parent if there is
* no more space to scroll.
+ * The page needs to have a page-like parent (e.g. `lv_page`, `lv_tabview` tab, `lv_win` content area etc)
+ * If enabled drag direction will be changed `LV_DRAG_DIR_ONE` automatically to allow scrolling only in one direction at one time.
* @param page pointer to a Page
* @param en true or false to enable/disable scroll propagation
*/
void lv_page_set_scroll_propagation(lv_obj_t * page, bool en)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
+ if(en) lv_obj_set_drag_dir(ext->scrl, LV_DRAG_DIR_ONE);
+ else lv_obj_set_drag_dir(ext->scrl, LV_DRAG_DIR_BOTH);
+
ext->scroll_prop = en ? 1 : 0;
}
@@ -244,6 +263,8 @@ void lv_page_set_scroll_propagation(lv_obj_t * page, bool en)
*/
void lv_page_set_edge_flash(lv_obj_t * page, bool en)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
ext->edge_flash.enabled = en ? 1 : 0;
@@ -261,6 +282,8 @@ void lv_page_set_edge_flash(lv_obj_t * page, bool en)
* */
void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
switch(type) {
@@ -291,6 +314,8 @@ void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, const lv_style_t *
*/
lv_obj_t * lv_page_get_scrl(const lv_obj_t * page)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
return ext->scrl;
@@ -303,6 +328,8 @@ lv_obj_t * lv_page_get_scrl(const lv_obj_t * page)
*/
uint16_t lv_page_get_anim_time(const lv_obj_t * page)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
return ext->anim_time;
@@ -319,6 +346,8 @@ uint16_t lv_page_get_anim_time(const lv_obj_t * page)
*/
lv_sb_mode_t lv_page_get_sb_mode(const lv_obj_t * page)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
return ext->sb.mode;
}
@@ -330,8 +359,10 @@ lv_sb_mode_t lv_page_get_sb_mode(const lv_obj_t * page)
*/
bool lv_page_get_scroll_propagation(lv_obj_t * page)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- return ext->scroll_prop == 0 ? false : true;
+ return ext->scroll_prop ? true : false;
}
/**
@@ -341,6 +372,8 @@ bool lv_page_get_scroll_propagation(lv_obj_t * page)
*/
bool lv_page_get_edge_flash(lv_obj_t * page)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
return ext->edge_flash.enabled == 0 ? false : true;
@@ -357,6 +390,8 @@ bool lv_page_get_edge_flash(lv_obj_t * page)
*/
lv_coord_t lv_page_get_fit_width(lv_obj_t * page)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
const lv_style_t * bg_style = lv_page_get_style(page, LV_PAGE_STYLE_BG);
const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);
@@ -371,6 +406,8 @@ lv_coord_t lv_page_get_fit_width(lv_obj_t * page)
*/
lv_coord_t lv_page_get_fit_height(lv_obj_t * page)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
const lv_style_t * bg_style = lv_page_get_style(page, LV_PAGE_STYLE_BG);
const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);
@@ -386,6 +423,8 @@ lv_coord_t lv_page_get_fit_height(lv_obj_t * page)
* */
const lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t type)
{
+ LV_ASSERT_OBJ(page, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
@@ -595,29 +634,45 @@ void lv_page_scroll_ver(lv_obj_t * page, lv_coord_t dist)
/**
* Not intended to use directly by the user but by other object types internally.
- * Start an edge flash animation. Exactly one `ext->edge_flash.xxx_ip` should be set
+ * Start an edge flash animation.
* @param page
+ * @param edge the edge to flash. Can be `LV_PAGE_EDGE_LEFT/RIGHT/TOP/BOTTOM`
*/
-void lv_page_start_edge_flash(lv_obj_t * page)
+void lv_page_start_edge_flash(lv_obj_t * page, lv_page_edge_t edge)
{
#if LV_USE_ANIMATION
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- if(ext->edge_flash.enabled) {
- lv_anim_t a;
- a.var = page;
- a.start = 0;
- a.end = LV_PAGE_END_FLASH_SIZE;
- a.exec_cb = (lv_anim_exec_xcb_t)edge_flash_anim;
- a.path_cb = lv_anim_path_linear;
- a.ready_cb = edge_flash_anim_end;
- a.act_time = 0;
- a.time = LV_PAGE_END_ANIM_TIME;
- a.playback = 1;
- a.playback_pause = LV_PAGE_END_ANIM_WAIT_TIME;
- a.repeat = 0;
- a.repeat_pause = 0;
- lv_anim_create(&a);
+ if(ext->edge_flash.enabled == 0) return;
+
+ if(ext->edge_flash.left_ip ||
+ ext->edge_flash.right_ip ||
+ ext->edge_flash.top_ip ||
+ ext->edge_flash.bottom_ip) {
+ return;
}
+
+ lv_anim_t a;
+ a.var = page;
+ a.start = 0;
+ a.end = LV_PAGE_END_FLASH_SIZE;
+ a.exec_cb = (lv_anim_exec_xcb_t)edge_flash_anim;
+ a.path_cb = lv_anim_path_linear;
+ a.ready_cb = edge_flash_anim_end;
+ a.act_time = 0;
+ a.time = LV_PAGE_END_ANIM_TIME;
+ a.playback = 1;
+ a.playback_pause = LV_PAGE_END_ANIM_WAIT_TIME;
+ a.repeat = 0;
+ a.repeat_pause = 0;
+ lv_anim_create(&a);
+
+ switch(edge) {
+ case LV_PAGE_EDGE_BOTTOM: ext->edge_flash.bottom_ip = 1; break;
+ case LV_PAGE_EDGE_TOP: ext->edge_flash.top_ip = 1; break;
+ case LV_PAGE_EDGE_LEFT: ext->edge_flash.left_ip = 1; break;
+ case LV_PAGE_EDGE_RIGHT: ext->edge_flash.right_ip = 1; break;
+ }
+
#else
(void)page; /*Unused*/
#endif
@@ -630,17 +685,17 @@ void lv_page_start_edge_flash(lv_obj_t * page)
/**
* Handle the drawing related tasks of the pages
* @param page pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_page_design(lv_obj_t * page, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design(page, mask, mode);
+ return ancestor_design(page, clip_area, mode);
}
/*Cache page bg style for temporary modification*/
const lv_style_t * style = lv_page_get_style(page, LV_PAGE_STYLE_BG);
@@ -650,13 +705,20 @@ static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, lv_design_mo
if(mode == LV_DESIGN_DRAW_MAIN) {
/*Draw without border*/
style_tmp.body.border.width = 0;
- lv_draw_rect(&page->coords, mask, &style_tmp, lv_obj_get_opa_scale(page));
+ lv_draw_rect(&page->coords, clip_area, &style_tmp, lv_obj_get_opa_scale(page));
+ if(style->body.corner_mask) {
+ style = lv_page_get_style(page, LV_PAGE_STYLE_BG);
+ lv_draw_mask_radius_param_t * mp = lv_mem_buf_get(sizeof(lv_draw_mask_radius_param_t));;
+ lv_draw_mask_radius_init(mp, &page->coords, style->body.radius, false);
+ /*Add the mask and use `page+8` as custom id. Don't use `page` directly because it might be sued by the user*/
+ lv_draw_mask_add(mp, page + 8);
+ }
} else if(mode == LV_DESIGN_DRAW_POST) {
/*Draw only a border*/
style_tmp.body.shadow.width = 0;
style_tmp.body.opa = LV_OPA_TRANSP;
- lv_draw_rect(&page->coords, mask, &style_tmp, lv_obj_get_opa_scale(page));
+ lv_draw_rect(&page->coords, clip_area, &style_tmp, lv_obj_get_opa_scale(page));
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
@@ -669,7 +731,7 @@ static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, lv_design_mo
sb_area.y1 += page->coords.y1;
sb_area.x2 += page->coords.x1;
sb_area.y2 += page->coords.y1;
- lv_draw_rect(&sb_area, mask, ext->sb.style, lv_obj_get_opa_scale(page));
+ lv_draw_rect(&sb_area, clip_area, ext->sb.style, lv_obj_get_opa_scale(page));
}
if(ext->sb.ver_draw && (ext->sb.mode & LV_SB_MODE_HIDE) == 0) {
@@ -679,7 +741,7 @@ static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, lv_design_mo
sb_area.y1 += page->coords.y1;
sb_area.x2 += page->coords.x1;
sb_area.y2 += page->coords.y1;
- lv_draw_rect(&sb_area, mask, ext->sb.style, lv_obj_get_opa_scale(page));
+ lv_draw_rect(&sb_area, clip_area, ext->sb.style, lv_obj_get_opa_scale(page));
}
#if LV_USE_ANIMATION
@@ -718,29 +780,34 @@ static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, lv_design_mo
flash_style.body.radius = LV_RADIUS_CIRCLE;
uint32_t opa = (flash_style.body.opa * ext->edge_flash.state) / LV_PAGE_END_FLASH_SIZE;
flash_style.body.opa = opa;
- lv_draw_rect(&flash_area, mask, &flash_style, lv_obj_get_opa_scale(page));
+ lv_draw_rect(&flash_area, clip_area, &flash_style, lv_obj_get_opa_scale(page));
}
}
+
+ if(style->body.corner_mask) {
+ void * param = lv_draw_mask_remove_custom(page + 8);
+ lv_mem_buf_release(param);
+ }
#endif
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
* Handle the drawing related tasks of the scrollable object
* @param scrl pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clisp_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_scrl_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_scrl_design(lv_obj_t * scrl, const lv_area_t * clisp_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
- return ancestor_design(scrl, mask, mode);
+ return ancestor_design(scrl, clisp_area, mode);
} else if(mode == LV_DESIGN_DRAW_MAIN) {
#if LV_USE_GROUP
/* If the page is focused in a group and
@@ -766,16 +833,16 @@ static bool lv_scrl_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mo
}
}
#endif
- ancestor_design(scrl, mask, mode);
+ ancestor_design(scrl, clisp_area, mode);
#if LV_USE_GROUP
scrl->style_p = style_scrl_ori; /*Revert the style*/
#endif
} else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_design(scrl, mask, mode);
+ ancestor_design(scrl, clisp_area, mode);
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -792,28 +859,51 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(page, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
- lv_obj_t * child;
- if(sign == LV_SIGNAL_CHILD_CHG) { /*Automatically move children to the scrollable object*/
- const lv_style_t * style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);
+ if(sign == LV_SIGNAL_CLEANUP) {
+ /*Check whether the object being deleted is propagating scroll to the parent */
+ if(ext->scroll_prop) {
+ lv_obj_t * parent_page = lv_obj_get_parent(lv_obj_get_parent(page));
+ lv_page_ext_t * parent_ext = lv_obj_get_ext_attr(parent_page);
+ if(parent_ext->scroll_prop_obj == page) {
+ parent_ext->scroll_prop_obj = NULL;
+ }
+ }
+ }
+ /*Automatically move children to the scrollable object*/
+ else if(sign == LV_SIGNAL_CHILD_CHG) {
+ lv_obj_t * child;
+ const lv_style_t * style_scrl = lv_page_get_style(page, LV_PAGE_STYLE_SCRL);
lv_fit_t fit_left = lv_page_get_scrl_fit_left(page);
+ lv_fit_t fit_right = lv_page_get_scrl_fit_right(page);
lv_fit_t fit_top = lv_page_get_scrl_fit_top(page);
- child = lv_obj_get_child(page, NULL);
+ lv_bidi_dir_t base_dir = lv_obj_get_base_dir(page);
+
+ child = lv_obj_get_child(page, NULL);
while(child != NULL) {
if(lv_obj_is_protected(child, LV_PROTECT_PARENT) == false) {
lv_obj_t * tmp = child;
child = lv_obj_get_child(page, child); /*Get the next child before move this*/
- /* Reposition the child to take padding into account (Only if it's on (0;0) now)
+ /* Reposition the child to take padding into account (Only if it's on (0;0) or (widht;height) coordinates now)
* It's required to keep new the object on the same coordinate if FIT is enabled.*/
- if((tmp->coords.x1 == page->coords.x1) && (fit_left == LV_FIT_TIGHT || fit_left == LV_FIT_FILL)) {
- tmp->coords.x1 += style->body.padding.left;
- tmp->coords.x2 += style->body.padding.left;
+ if((tmp->coords.x1 == page->coords.x1) &&
+ (fit_left == LV_FIT_TIGHT || fit_left == LV_FIT_FILL) &&
+ base_dir != LV_BIDI_DIR_RTL) {
+ tmp->coords.x1 += style_scrl->body.padding.left;
+ tmp->coords.x2 += style_scrl->body.padding.left;
+ }
+ else if((tmp->coords.x2 == page->coords.x2) &&
+ (fit_right == LV_FIT_TIGHT || fit_right == LV_FIT_FILL)
+ && base_dir == LV_BIDI_DIR_RTL) {
+ tmp->coords.x1 -= style_scrl->body.padding.right;
+ tmp->coords.x2 -= style_scrl->body.padding.right;
}
if((tmp->coords.y1 == page->coords.y1) && (fit_top == LV_FIT_TIGHT || fit_top == LV_FIT_FILL)) {
- tmp->coords.y1 += style->body.padding.top;
- tmp->coords.y2 += style->body.padding.top;
+ tmp->coords.y1 += style_scrl->body.padding.top;
+ tmp->coords.y2 += style_scrl->body.padding.top;
}
lv_obj_set_parent(tmp, ext->scrl);
} else {
@@ -869,13 +959,6 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param)
} else if(sign == LV_SIGNAL_GET_EDITABLE) {
bool * editable = (bool *)param;
*editable = true;
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_page";
}
return res;
@@ -895,6 +978,7 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi
/* Include the ancient signal function */
res = ancestor_signal(scrl, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
lv_obj_t * page = lv_obj_get_parent(scrl);
const lv_style_t * page_style = lv_obj_get_style(page);
@@ -912,28 +996,33 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi
lv_obj_get_coords(scrl, &scrl_coords);
lv_obj_get_coords(page, &page_coords);
- lv_area_t * ori_coords = (lv_area_t *)param;
- lv_coord_t diff_x = scrl->coords.x1 - ori_coords->x1;
- lv_coord_t diff_y = scrl->coords.y1 - ori_coords->y1;
lv_coord_t hpad = page_style->body.padding.left + page_style->body.padding.right;
lv_coord_t vpad = page_style->body.padding.top + page_style->body.padding.bottom;
lv_obj_t * page_parent = lv_obj_get_parent(page);
+ /*Handle scroll propagation*/
lv_indev_t * indev = lv_indev_get_act();
- lv_point_t drag_vect;
- lv_indev_get_vect(indev, &drag_vect);
-
- /* Start the scroll propagation if there is drag vector on the indev, but the drag is not
- * started yet and the scrollable is in a corner. It will enable the scroll propagation only
- * when a new scroll begins and not when the scrollable is already being scrolled.*/
- if(page_ext->scroll_prop && page_ext->scroll_prop_ip == 0 && lv_indev_is_dragging(indev) == false) {
- if(((drag_vect.y > 0 && scrl_coords.y1 == page_coords.y1 + page_style->body.padding.top) ||
- (drag_vect.y < 0 && scrl_coords.y2 == page_coords.y2 - page_style->body.padding.bottom)) &&
- ((drag_vect.x > 0 && scrl_coords.x1 == page_coords.x1 + page_style->body.padding.left) ||
- (drag_vect.x < 0 && scrl_coords.x2 == page_coords.x2 - page_style->body.padding.right))) {
-
- if(lv_obj_get_parent(page_parent) != NULL) { /*Do not propagate the scroll to a screen*/
- page_ext->scroll_prop_ip = 1;
+ if(page_ext->scroll_prop && indev) {
+ lv_point_t * drag_sum = &indev->proc.types.pointer.drag_sum;
+ lv_page_ext_t * parent_ext = lv_obj_get_ext_attr(lv_obj_get_parent(page_parent));
+ if(parent_ext->scroll_prop_obj == NULL) {
+ /*If the dragging just started or scroll is already propagated to this object
+ * enable the scroll propagation if the conditions are met*/
+ if((lv_indev_is_dragging(indev) == false || page_ext->scroll_prop_obj) && (drag_sum->y || drag_sum->x)) {
+ /*Propagate vertically?*/
+ if((drag_sum->y > 0 && lv_page_on_edge(page, LV_PAGE_EDGE_TOP)) ||
+ (drag_sum->y < 0 && lv_page_on_edge(page, LV_PAGE_EDGE_BOTTOM))) {
+ lv_obj_set_drag_parent(page, true);
+ lv_obj_set_drag_parent(scrl, true);
+ parent_ext->scroll_prop_obj = page;
+ }
+ /*Propagate horizontally?*/
+ if((drag_sum->x > 0 && lv_page_on_edge(page, LV_PAGE_EDGE_LEFT)) ||
+ (drag_sum->x < 0 && lv_page_on_edge(page, LV_PAGE_EDGE_RIGHT))) {
+ lv_obj_set_drag_parent(page, true);
+ lv_obj_set_drag_parent(scrl, true);
+ parent_ext->scroll_prop_obj = page;
+ }
}
}
}
@@ -945,39 +1034,16 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi
refr_x = true;
}
} else {
- /*If the scroll propagation is in progress revert the original coordinates (don't let
- * the page scroll)*/
- if(page_ext->scroll_prop_ip) {
- if(drag_vect.x == diff_x) { /*`scrl` is bouncing: drag pos. it somewhere and here it
- is reverted. Handle only the pos. because of drag*/
- new_x = ori_coords->x1 - page_coords.x1;
- refr_x = true;
- }
- }
/*The edges of the scrollable can not be in the page (minus hpad) */
- else if(scrl_coords.x2 < page_coords.x2 - page_style->body.padding.right) {
+ if(scrl_coords.x2 < page_coords.x2 - page_style->body.padding.right) {
new_x = lv_area_get_width(&page_coords) - lv_area_get_width(&scrl_coords) -
page_style->body.padding.right; /* Right align */
refr_x = true;
-#if LV_USE_ANIMATION
- if(page_ext->edge_flash.enabled && page_ext->edge_flash.left_ip == 0 &&
- page_ext->edge_flash.right_ip == 0 && page_ext->edge_flash.top_ip == 0 &&
- page_ext->edge_flash.bottom_ip == 0) {
- lv_page_start_edge_flash(page);
- page_ext->edge_flash.right_ip = 1;
- }
-#endif
+ lv_page_start_edge_flash(page, LV_PAGE_EDGE_RIGHT);
} else if(scrl_coords.x1 > page_coords.x1 + page_style->body.padding.left) {
new_x = page_style->body.padding.left; /*Left align*/
refr_x = true;
-#if LV_USE_ANIMATION
- if(page_ext->edge_flash.enabled && page_ext->edge_flash.left_ip == 0 &&
- page_ext->edge_flash.right_ip == 0 && page_ext->edge_flash.top_ip == 0 &&
- page_ext->edge_flash.bottom_ip == 0) {
- lv_page_start_edge_flash(page);
- page_ext->edge_flash.left_ip = 1;
- }
-#endif
+ lv_page_start_edge_flash(page, LV_PAGE_EDGE_LEFT);
}
}
@@ -988,56 +1054,44 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi
refr_y = true;
}
} else {
- /*If the scroll propagation is in progress revert the original coordinates (don't let
- * the page scroll)*/
- if(page_ext->scroll_prop_ip) {
- if(drag_vect.y == diff_y) { /*`scrl` is bouncing: drag pos. it somewhere and here it
- is reverted. Handle only the pos. because of drag*/
- new_y = ori_coords->y1 - page_coords.y1;
- refr_y = true;
- }
- }
/*The edges of the scrollable can not be in the page (minus vpad) */
- else if(scrl_coords.y2 < page_coords.y2 - page_style->body.padding.bottom) {
+ if(scrl_coords.y2 < page_coords.y2 - page_style->body.padding.bottom) {
new_y = lv_area_get_height(&page_coords) - lv_area_get_height(&scrl_coords) -
page_style->body.padding.bottom; /* Bottom align */
refr_y = true;
-#if LV_USE_ANIMATION
- if(page_ext->edge_flash.enabled && page_ext->edge_flash.left_ip == 0 &&
- page_ext->edge_flash.right_ip == 0 && page_ext->edge_flash.top_ip == 0 &&
- page_ext->edge_flash.bottom_ip == 0) {
- lv_page_start_edge_flash(page);
- page_ext->edge_flash.bottom_ip = 1;
- }
-#endif
+ lv_page_start_edge_flash(page, LV_PAGE_EDGE_BOTTOM);
} else if(scrl_coords.y1 > page_coords.y1 + page_style->body.padding.top) {
new_y = page_style->body.padding.top; /*Top align*/
refr_y = true;
-#if LV_USE_ANIMATION
- if(page_ext->edge_flash.enabled && page_ext->edge_flash.left_ip == 0 &&
- page_ext->edge_flash.right_ip == 0 && page_ext->edge_flash.top_ip == 0 &&
- page_ext->edge_flash.bottom_ip == 0) {
- lv_page_start_edge_flash(page);
- page_ext->edge_flash.top_ip = 1;
- }
-#endif
+ lv_page_start_edge_flash(page, LV_PAGE_EDGE_TOP);
}
}
if(refr_x || refr_y) {
lv_obj_set_pos(scrl, new_x, new_y);
-
- if(page_ext->scroll_prop_ip) {
- if(refr_y) lv_obj_set_y(page_parent, lv_obj_get_y(page_parent) + diff_y);
- if(refr_x) lv_obj_set_x(page_parent, lv_obj_get_x(page_parent) + diff_x);
- }
}
lv_page_sb_refresh(page);
} else if(sign == LV_SIGNAL_DRAG_END) {
/*Scroll propagation is finished on drag end*/
- page_ext->scroll_prop_ip = 0;
+ if(page_ext->scroll_prop_obj) {
+ lv_obj_t * scroller_page = page_ext->scroll_prop_obj;
+ page_ext->scroll_prop_obj = NULL;
+ lv_obj_set_drag_parent(scroller_page, false);
+ lv_obj_set_drag_parent(lv_page_get_scrl(scroller_page), false);
+
+ /*The scrolling can be chained so stop all of them*/
+ lv_page_ext_t * scroller_ext = lv_obj_get_ext_attr(scroller_page);
+ while(scroller_ext->scroll_prop_obj) {
+ scroller_page = scroller_ext->scroll_prop_obj;
+ scroller_ext->scroll_prop_obj = NULL;
+ lv_obj_set_drag_parent(scroller_page, false);
+ lv_obj_set_drag_parent(lv_page_get_scrl(scroller_page), false);
+
+ scroller_ext = lv_obj_get_ext_attr(scroller_page);
+ }
+ }
/*Hide scrollbars if required*/
if(page_ext->sb.mode == LV_SB_MODE_DRAG) {
diff --git a/src/lv_objx/lv_page.h b/src/lv_objx/lv_page.h
index 344d1aecc..86e1b0a4d 100644
--- a/src/lv_objx/lv_page.h
+++ b/src/lv_objx/lv_page.h
@@ -86,9 +86,8 @@ typedef struct
uint16_t anim_time; /*Scroll animation time*/
#endif
-
- uint8_t scroll_prop : 1; /*1: Propagate the scrolling the the parent if the edge is reached*/
- uint8_t scroll_prop_ip : 1; /*1: Scroll propagation is in progress (used by the library)*/
+ lv_obj_t * scroll_prop_obj; /*Pointer to child page from where the scroll is being propagated */
+ uint8_t scroll_prop :1; /*The direction of the scroll propagation*/
} lv_page_ext_t;
enum {
@@ -113,9 +112,9 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy);
/**
* Delete all children of the scrl object, without deleting scrl child.
- * @param obj pointer to an object
+ * @param page pointer to an object
*/
-void lv_page_clean(lv_obj_t * obj);
+void lv_page_clean(lv_obj_t * page);
/**
* Get the scrollable object of a page
@@ -152,6 +151,8 @@ void lv_page_set_anim_time(lv_obj_t * page, uint16_t anim_time);
/**
* Enable the scroll propagation feature. If enabled then the page will move its parent if there is
* no more space to scroll.
+ * The page needs to have a page-like parent (e.g. `lv_page`, `lv_tabview` tab, `lv_win` content area etc)
+ * If enabled drag direction will be changed `LV_DRAG_DIR_ONE` automatically to allow scrolling only in one direction at one time.
* @param page pointer to a Page
* @param en true or false to enable/disable scroll propagation
*/
@@ -399,10 +400,12 @@ void lv_page_scroll_ver(lv_obj_t * page, lv_coord_t dist);
/**
* Not intended to use directly by the user but by other object types internally.
- * Start an edge flash animation. Exactly one `ext->edge_flash.xxx_ip` should be set
+ * Start an edge flash animation.
* @param page
+ * @param edge the edge to flash. Can be `LV_PAGE_EDGE_LEFT/RIGHT/TOP/BOTTOM`
*/
-void lv_page_start_edge_flash(lv_obj_t * page);
+void lv_page_start_edge_flash(lv_obj_t * page, lv_page_edge_t edge);
+
/**********************
* MACROS
**********************/
diff --git a/src/lv_objx/lv_preload.c b/src/lv_objx/lv_preload.c
index eee893203..b00bb8cb5 100644
--- a/src/lv_objx/lv_preload.c
+++ b/src/lv_objx/lv_preload.c
@@ -9,6 +9,7 @@
#include "lv_preload.h"
#if LV_USE_PRELOAD != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_misc/lv_math.h"
#include "../lv_draw/lv_draw_rect.h"
#include "../lv_draw/lv_draw_arc.h"
@@ -17,6 +18,8 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_preloader"
+
#ifndef LV_PRELOAD_DEF_ARC_LENGTH
#define LV_PRELOAD_DEF_ARC_LENGTH 60 /*[deg]*/
#endif
@@ -36,7 +39,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_preload_design(lv_obj_t * preload, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_preload_design(lv_obj_t * preload, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_preload_signal(lv_obj_t * preload, lv_signal_t sign, void * param);
/**********************
@@ -66,13 +69,16 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of pre loader*/
lv_obj_t * new_preload = lv_arc_create(par, copy);
- lv_mem_assert(new_preload);
+ LV_ASSERT_MEM(new_preload);
if(new_preload == NULL) return NULL;
/*Allocate the pre loader type specific extended data*/
lv_preload_ext_t * ext = lv_obj_allocate_ext_attr(new_preload, sizeof(lv_preload_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_preload);
+ return NULL;
+ }
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_preload);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_preload);
@@ -81,6 +87,7 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy)
ext->arc_length = LV_PRELOAD_DEF_ARC_LENGTH;
ext->anim_type = LV_PRELOAD_DEF_ANIM;
ext->anim_dir = LV_PRELOAD_DIR_FORWARD;
+ ext->time = LV_PRELOAD_DEF_SPIN_TIME;
/*The signal and design functions are not copied so set them here*/
lv_obj_set_signal_cb(new_preload, lv_preload_signal);
@@ -98,7 +105,6 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy)
lv_obj_set_style(new_preload, &lv_style_pretty_color);
}
- ext->time = LV_PRELOAD_DEF_SPIN_TIME;
}
/*Copy an existing pre loader*/
@@ -129,6 +135,8 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_preload_set_arc_length(lv_obj_t * preload, lv_anim_value_t deg)
{
+ LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
+
lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
ext->arc_length = deg;
@@ -141,6 +149,8 @@ void lv_preload_set_arc_length(lv_obj_t * preload, lv_anim_value_t deg)
*/
void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time)
{
+ LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
+
lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
ext->time = time;
@@ -158,6 +168,8 @@ void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time)
* */
void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
+
switch(type) {
case LV_PRELOAD_STYLE_MAIN: lv_arc_set_style(preload, LV_ARC_STYLE_MAIN, style); break;
}
@@ -170,6 +182,8 @@ void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, const lv_
* */
void lv_preload_set_type(lv_obj_t * preload, lv_preload_type_t type)
{
+ LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
+
lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
/*delete previous animation*/
@@ -181,11 +195,11 @@ void lv_preload_set_type(lv_obj_t * preload, lv_preload_type_t type)
a.var = preload;
if(ext->anim_dir == LV_PRELOAD_DIR_FORWARD) {
/* Clockwise */
- a.start = 360;
- a.end = 0;
- } else {
a.start = 0;
a.end = 360;
+ } else {
+ a.start = 360;
+ a.end = 0;
}
a.exec_cb = (lv_anim_exec_xcb_t)lv_preload_spinner_anim;
a.path_cb = lv_anim_path_ease_in_out;
@@ -202,11 +216,11 @@ void lv_preload_set_type(lv_obj_t * preload, lv_preload_type_t type)
b.var = preload;
if(ext->anim_dir == LV_PRELOAD_DIR_FORWARD) {
/* Clockwise */
- b.start = 360 - ext->arc_length;
- b.end = ext->arc_length;
- } else {
b.start = ext->arc_length;
b.end = 360 - ext->arc_length;
+ } else {
+ b.start = 360 - ext->arc_length;
+ b.end = ext->arc_length;
}
b.exec_cb = (lv_anim_exec_xcb_t)lv_preload_set_arc_length;
b.path_cb = lv_anim_path_ease_in_out;
@@ -220,21 +234,23 @@ void lv_preload_set_type(lv_obj_t * preload, lv_preload_type_t type)
lv_anim_create(&b);
break;
}
+ case LV_PRELOAD_TYPE_CONSTANT_ARC:
case LV_PRELOAD_TYPE_SPINNING_ARC:
default: {
- ext->anim_type = LV_PRELOAD_TYPE_SPINNING_ARC;
+ ext->anim_type = type;
lv_anim_t a;
a.var = preload;
if(ext->anim_dir == LV_PRELOAD_DIR_FORWARD) {
/* Clockwise */
- a.start = 360;
- a.end = 0;
- } else {
a.start = 0;
a.end = 360;
+ } else {
+ a.start = 360;
+ a.end = 0;
}
a.exec_cb = (lv_anim_exec_xcb_t)lv_preload_spinner_anim;
- a.path_cb = lv_anim_path_ease_in_out;
+ a.path_cb = (LV_PRELOAD_TYPE_CONSTANT_ARC == type ?
+ lv_anim_path_linear : lv_anim_path_ease_in_out);
a.ready_cb = NULL;
a.act_time = 0;
a.time = ext->time;
@@ -250,6 +266,8 @@ void lv_preload_set_type(lv_obj_t * preload, lv_preload_type_t type)
void lv_preload_set_dir(lv_obj_t * preload, lv_preload_dir_t dir)
{
+ LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
+
lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
ext->anim_dir = dir;
@@ -266,6 +284,8 @@ void lv_preload_set_dir(lv_obj_t * preload, lv_preload_dir_t dir)
*/
lv_anim_value_t lv_preload_get_arc_length(const lv_obj_t * preload)
{
+ LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
+
lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
return ext->arc_length;
}
@@ -276,6 +296,8 @@ lv_anim_value_t lv_preload_get_arc_length(const lv_obj_t * preload)
*/
uint16_t lv_preload_get_spin_time(const lv_obj_t * preload)
{
+ LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
+
lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
return ext->time;
}
@@ -288,6 +310,8 @@ uint16_t lv_preload_get_spin_time(const lv_obj_t * preload)
* */
const lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_style_t type)
{
+ LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
switch(type) {
@@ -305,6 +329,8 @@ const lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_sty
* */
lv_preload_type_t lv_preload_get_type(lv_obj_t * preload)
{
+ LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
+
lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
return ext->anim_type;
}
@@ -329,13 +355,15 @@ void lv_preload_spinner_anim(void * ptr, lv_anim_value_t val)
lv_obj_t * preload = ptr;
lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload);
- int16_t angle_start = val - ext->arc_length / 2 + 180;
+ int16_t angle_start = val - ext->arc_length / 2 - 90;
+ if(angle_start < 0) angle_start += 360;
int16_t angle_end = angle_start + ext->arc_length;
angle_start = angle_start % 360;
angle_end = angle_end % 360;
- lv_arc_set_angles(preload, angle_start, angle_end);
+ lv_arc_set_start_angle(preload, angle_start);
+ lv_arc_set_end_angle(preload, angle_end);
}
/**********************
@@ -345,18 +373,18 @@ void lv_preload_spinner_anim(void * ptr, lv_anim_value_t val)
/**
* Handle the drawing related tasks of the pre loaders
* @param preload pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_preload_design(lv_obj_t * preload, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_preload_design(lv_obj_t * preload, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
@@ -376,6 +404,7 @@ static bool lv_preload_design(lv_obj_t * preload, const lv_area_t * mask, lv_des
bg_style.body.radius = LV_RADIUS_CIRCLE;
bg_style.body.border.color = style->body.border.color;
bg_style.body.border.width = style->body.border.width;
+ bg_style.body.border.opa = style->body.border.opa;
lv_area_t bg_area;
bg_area.x1 = x - r;
@@ -383,16 +412,16 @@ static bool lv_preload_design(lv_obj_t * preload, const lv_area_t * mask, lv_des
bg_area.x2 = x + r;
bg_area.y2 = y + r;
- lv_draw_rect(&bg_area, mask, &bg_style, lv_obj_get_opa_scale(preload));
+ lv_draw_rect(&bg_area, clip_area, &bg_style, lv_obj_get_opa_scale(preload));
}
/*Draw the arc above the background circle */
- ancestor_design(preload, mask, mode);
+ ancestor_design(preload, clip_area, mode);
}
/*Post draw when the children are drawn*/
else if(mode == LV_DESIGN_DRAW_POST) {
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -409,16 +438,10 @@ static lv_res_t lv_preload_signal(lv_obj_t * preload, lv_signal_t sign, void * p
/* Include the ancient signal function */
res = ancestor_signal(preload, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_preload";
}
return res;
diff --git a/src/lv_objx/lv_preload.h b/src/lv_objx/lv_preload.h
index cbc7826a6..22b87f32f 100644
--- a/src/lv_objx/lv_preload.h
+++ b/src/lv_objx/lv_preload.h
@@ -48,6 +48,7 @@ extern "C" {
enum {
LV_PRELOAD_TYPE_SPINNING_ARC,
LV_PRELOAD_TYPE_FILLSPIN_ARC,
+ LV_PRELOAD_TYPE_CONSTANT_ARC,
};
typedef uint8_t lv_preload_type_t;
@@ -67,7 +68,7 @@ typedef struct
/*New data for this type */
lv_anim_value_t arc_length; /*Length of the spinning indicator in degree*/
uint16_t time; /*Time of one round*/
- lv_preload_type_t anim_type : 1; /*Type of the arc animation*/
+ lv_preload_type_t anim_type : 2; /*Type of the arc animation*/
lv_preload_dir_t anim_dir : 1; /*Animation Direction*/
} lv_preload_ext_t;
diff --git a/src/lv_objx/lv_roller.c b/src/lv_objx/lv_roller.c
index 287d139b1..dbd0a79f6 100644
--- a/src/lv_objx/lv_roller.c
+++ b/src/lv_objx/lv_roller.c
@@ -9,6 +9,7 @@
#include "lv_roller.h"
#if LV_USE_ROLLER != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_core/lv_group.h"
#include "../lv_themes/lv_theme.h"
@@ -16,6 +17,8 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_roller"
+
#if LV_USE_ANIMATION == 0
#undef LV_ROLLER_DEF_ANIM_TIME
#define LV_ROLLER_DEF_ANIM_TIME 0 /*No animation*/
@@ -28,7 +31,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_roller_design(lv_obj_t * roller, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_roller_scrl_signal(lv_obj_t * roller_scrl, lv_signal_t sign, void * param);
static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * param);
static void refr_position(lv_obj_t * roller, lv_anim_enable_t animen);
@@ -65,7 +68,7 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of roller*/
lv_obj_t * new_roller = lv_ddlist_create(par, copy);
- lv_mem_assert(new_roller);
+ LV_ASSERT_MEM(new_roller);
if(new_roller == NULL) return NULL;
if(ancestor_scrl_signal == NULL) ancestor_scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(new_roller));
@@ -73,9 +76,13 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
/*Allocate the roller type specific extended data*/
lv_roller_ext_t * ext = lv_obj_allocate_ext_attr(new_roller, sizeof(lv_roller_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
- ext->ddlist.draw_arrow = 0; /*Do not draw arrow by default*/
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_roller);
+ return NULL;
+ }
+
+ ext->mode = LV_ROLLER_MODE_NORMAL;
/*The signal and design functions are not copied so set them here*/
lv_obj_set_signal_cb(new_roller, lv_roller_signal);
@@ -89,6 +96,7 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
lv_ddlist_open(new_roller, false);
lv_ddlist_set_anim_time(new_roller, LV_ROLLER_DEF_ANIM_TIME);
lv_ddlist_set_stay_open(new_roller, true);
+ lv_ddlist_set_symbol(new_roller, NULL);
lv_roller_set_visible_row_count(new_roller, 3);
lv_label_set_align(ext->ddlist.label, LV_LABEL_ALIGN_CENTER);
@@ -134,6 +142,9 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_roller_set_options(lv_obj_t * roller, const char * options, lv_roller_mode_t mode)
{
+ LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
+ LV_ASSERT_STR(options);
+
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
if(mode == LV_ROLLER_MODE_NORMAL) {
@@ -147,7 +158,7 @@ void lv_roller_set_options(lv_obj_t * roller, const char * options, lv_roller_mo
} else {
ext->mode = LV_ROLLER_MODE_INIFINITE;
- uint32_t opt_len = strlen(options) + 1; /*+1 to add '\n' after option lists*/
+ size_t opt_len = strlen(options) + 1; /*+1 to add '\n' after option lists*/
char * opt_extra = lv_mem_alloc(opt_len * LV_ROLLER_INF_PAGES);
uint8_t i;
for(i = 0; i < LV_ROLLER_INF_PAGES; i++) {
@@ -175,6 +186,8 @@ void lv_roller_set_options(lv_obj_t * roller, const char * options, lv_roller_mo
*/
void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align)
{
+ LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
+
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
lv_obj_t * label = ext->ddlist.label;
@@ -197,6 +210,8 @@ void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align)
*/
void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, lv_anim_enable_t anim)
{
+ LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION == 0
anim = LV_ANIM_OFF;
#endif
@@ -214,6 +229,8 @@ void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, lv_anim_enable_
*/
void lv_roller_set_visible_row_count(lv_obj_t * roller, uint8_t row_cnt)
{
+ LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
+
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
const lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
uint8_t n_line_space = (row_cnt > 1) ? row_cnt - 1 : 1;
@@ -229,6 +246,8 @@ void lv_roller_set_visible_row_count(lv_obj_t * roller, uint8_t row_cnt)
*/
void lv_roller_set_style(lv_obj_t * roller, lv_roller_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
+
switch(type) {
case LV_ROLLER_STYLE_BG: lv_obj_set_style(roller, style); break;
case LV_ROLLER_STYLE_SEL: lv_ddlist_set_style(roller, LV_DDLIST_STYLE_SEL, style); break;
@@ -246,6 +265,8 @@ void lv_roller_set_style(lv_obj_t * roller, lv_roller_style_t type, const lv_sty
*/
uint16_t lv_roller_get_selected(const lv_obj_t * roller)
{
+ LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
+
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
uint16_t real_id_cnt = ext->ddlist.option_cnt / LV_ROLLER_INF_PAGES;
@@ -262,9 +283,11 @@ uint16_t lv_roller_get_selected(const lv_obj_t * roller)
*/
lv_label_align_t lv_roller_get_align(const lv_obj_t * roller)
{
+ LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
+
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
- lv_mem_assert(ext);
- lv_mem_assert(ext->ddlist.label);
+ LV_ASSERT_MEM(ext);
+ LV_ASSERT_MEM(ext->ddlist.label);
return lv_label_get_align(ext->ddlist.label);
}
@@ -275,6 +298,8 @@ lv_label_align_t lv_roller_get_align(const lv_obj_t * roller)
*/
bool lv_roller_get_hor_fit(const lv_obj_t * roller)
{
+ LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
+
return lv_page_get_scrl_fit_left(roller);
}
@@ -286,14 +311,21 @@ bool lv_roller_get_hor_fit(const lv_obj_t * roller)
* */
const lv_style_t * lv_roller_get_style(const lv_obj_t * roller, lv_roller_style_t type)
{
+ LV_ASSERT_OBJ(roller, LV_OBJX_NAME);
+
+ const lv_style_t * style;
switch(type) {
- case LV_ROLLER_STYLE_BG: return lv_obj_get_style(roller);
- case LV_ROLLER_STYLE_SEL: return lv_ddlist_get_style(roller, LV_DDLIST_STYLE_SEL);
- default: return NULL;
+ case LV_ROLLER_STYLE_BG:
+ style = lv_obj_get_style(roller);
+ break;
+ case LV_ROLLER_STYLE_SEL:
+ style = lv_ddlist_get_style(roller, LV_DDLIST_STYLE_SEL);
+ break;
+ default:
+ style = NULL;
}
- /*To avoid warning*/
- return NULL;
+ return style;
}
/**********************
@@ -303,22 +335,22 @@ const lv_style_t * lv_roller_get_style(const lv_obj_t * roller, lv_roller_style_
/**
* Handle the drawing related tasks of the rollers
* @param roller pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_roller_design(lv_obj_t * roller, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
- draw_bg(roller, mask);
+ draw_bg(roller, clip_area);
const lv_style_t * style = lv_roller_get_style(roller, LV_ROLLER_STYLE_BG);
lv_opa_t opa_scale = lv_obj_get_opa_scale(roller);
@@ -336,7 +368,7 @@ static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, lv_desig
rect_area.x1 = roller_coords.x1;
rect_area.x2 = roller_coords.x2;
- lv_draw_rect(&rect_area, mask, ext->ddlist.sel_style, opa_scale);
+ lv_draw_rect(&rect_area, clip_area, ext->ddlist.sel_style, opa_scale);
}
/*Post draw when the children are drawn*/
else if(mode == LV_DESIGN_DRAW_POST) {
@@ -355,7 +387,7 @@ static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, lv_desig
rect_area.x2 = roller->coords.x2;
lv_area_t mask_sel;
bool area_ok;
- area_ok = lv_area_intersect(&mask_sel, mask, &rect_area);
+ area_ok = lv_area_intersect(&mask_sel, clip_area, &rect_area);
if(area_ok) {
const lv_style_t * sel_style = lv_roller_get_style(roller, LV_ROLLER_STYLE_SEL);
lv_style_t new_style;
@@ -375,11 +407,11 @@ static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, lv_desig
new_style.text.color = sel_style->text.color;
new_style.text.opa = sel_style->text.opa;
lv_draw_label(&ext->ddlist.label->coords, &mask_sel, &new_style, opa_scale,
- lv_label_get_text(ext->ddlist.label), txt_align, NULL, -1, -1, NULL);
+ lv_label_get_text(ext->ddlist.label), txt_align, NULL, NULL, NULL, lv_obj_get_base_dir(ext->ddlist.label));
}
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -399,6 +431,7 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par
res = ancestor_signal(roller, sign, param);
if(res != LV_RES_OK) return res;
}
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
@@ -465,13 +498,6 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par
ext->ddlist.sel_opt_id_ori = ori_id;
}
}
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_roller";
}
return res;
diff --git a/src/lv_objx/lv_slider.c b/src/lv_objx/lv_slider.c
index a7fb4333b..79a00042f 100644
--- a/src/lv_objx/lv_slider.c
+++ b/src/lv_objx/lv_slider.c
@@ -10,16 +10,18 @@
#include "lv_slider.h"
#if LV_USE_SLIDER != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_core/lv_group.h"
+#include "../lv_core/lv_indev.h"
#include "../lv_draw/lv_draw.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_math.h"
+#include "lv_img.h"
/*********************
* DEFINES
*********************/
-#define LV_SLIDER_SIZE_MIN 4 /*hor. pad and ver. pad cannot make the bar or indicator smaller then this [px]*/
-#define LV_SLIDER_NOT_PRESSED INT16_MIN
+#define LV_OBJX_NAME "lv_slider"
/**********************
* TYPEDEFS
@@ -28,8 +30,10 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_slider_design(lv_obj_t * slider, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_slider_design(lv_obj_t * slider, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * param);
+static void lv_slider_position_knob(lv_obj_t * slider, lv_area_t * knob_area, lv_coord_t knob_size, bool hor);
+static void lv_slider_draw_knob(lv_obj_t * slider, lv_area_t * knob_area, lv_area_t * clip_area);
/**********************
* STATIC VARIABLES
@@ -57,7 +61,7 @@ lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor slider*/
lv_obj_t * new_slider = lv_bar_create(par, copy);
- lv_mem_assert(new_slider);
+ LV_ASSERT_MEM(new_slider);
if(new_slider == NULL) return NULL;
if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(new_slider);
@@ -65,13 +69,17 @@ lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
/*Allocate the slider type specific extended data*/
lv_slider_ext_t * ext = lv_obj_allocate_ext_attr(new_slider, sizeof(lv_slider_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_slider);
+ return NULL;
+ }
/*Initialize the allocated 'ext' */
- ext->drag_value = LV_SLIDER_NOT_PRESSED;
ext->style_knob = &lv_style_pretty;
- ext->knob_in = 0;
+ ext->value_to_set = NULL;
+ ext->dragging = false;
+ ext->img_knob = NULL;
/*The signal and design functions are not copied so set them here*/
lv_obj_set_signal_cb(new_slider, lv_slider_signal);
@@ -96,7 +104,6 @@ lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
else {
lv_slider_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
ext->style_knob = copy_ext->style_knob;
- ext->knob_in = copy_ext->knob_in;
/*Refresh the style with new signal function*/
lv_obj_refresh_style(new_slider);
}
@@ -111,17 +118,19 @@ lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
*====================*/
/**
- * Set the 'knob in' attribute of a slider
- * @param slider pointer to slider object
- * @param in true: the knob is drawn always in the slider;
- * false: the knob can be out on the edges
+ * Set an image to display on the knob of the slider
+ * @param slider pointer to a slider object
+ * @param img_src pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
*/
-void lv_slider_set_knob_in(lv_obj_t * slider, bool in)
+void lv_slider_set_knob_img(lv_obj_t * slider, const void * img_src)
{
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
- if(ext->knob_in == in) return;
+ LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
- ext->knob_in = in == false ? 0 : 1;
+ lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
+
+ ext->img_knob = img_src;
+ lv_obj_refresh_ext_draw_pad(slider);
lv_obj_invalidate(slider);
}
@@ -133,6 +142,8 @@ void lv_slider_set_knob_in(lv_obj_t * slider, bool in)
*/
void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
+
lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
switch(type) {
@@ -141,6 +152,7 @@ void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, const lv_sty
case LV_SLIDER_STYLE_KNOB:
ext->style_knob = style;
lv_obj_refresh_ext_draw_pad(slider);
+ lv_obj_invalidate(slider);
break;
}
}
@@ -156,12 +168,8 @@ void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, const lv_sty
*/
int16_t lv_slider_get_value(const lv_obj_t * slider)
{
- lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
-
- if(ext->drag_value != LV_SLIDER_NOT_PRESSED)
- return ext->drag_value;
- else
- return lv_bar_get_value(slider);
+ LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
+ return lv_bar_get_value(slider);
}
/**
@@ -171,20 +179,24 @@ int16_t lv_slider_get_value(const lv_obj_t * slider)
*/
bool lv_slider_is_dragged(const lv_obj_t * slider)
{
+ LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
+
lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
- return ext->drag_value == LV_SLIDER_NOT_PRESSED ? false : true;
+ return ext->dragging ? true : false;
}
/**
- * Get the 'knob in' attribute of a slider
- * @param slider pointer to slider object
- * @return true: the knob is drawn always in the slider;
- * false: the knob can be out on the edges
+ * Get an image to display on the knob of the slider
+ * @param slider pointer to a slider object
+ * @return the image source: pointer to an `lv_img_dsc_t` variable or a path to an image (not an `lv_img` object)
*/
-bool lv_slider_get_knob_in(const lv_obj_t * slider)
+const void * lv_slider_get_knob_img(lv_obj_t * slider, const void * img_src)
{
+ LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
+
lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
- return ext->knob_in == 0 ? false : true;
+
+ return ext->img_knob;
}
/**
@@ -195,6 +207,8 @@ bool lv_slider_get_knob_in(const lv_obj_t * slider)
*/
const lv_style_t * lv_slider_get_style(const lv_obj_t * slider, lv_slider_style_t type)
{
+ LV_ASSERT_OBJ(slider, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
@@ -215,240 +229,85 @@ const lv_style_t * lv_slider_get_style(const lv_obj_t * slider, lv_slider_style_
/**
* Handle the drawing related tasks of the sliders
* @param slider pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_slider_design(lv_obj_t * slider, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_slider_design(lv_obj_t * slider, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
+
+ /*The ancestor design function will draw the background and the indicator.
+ * It also sets ext->bar.indic_area*/
+ ancestor_design_f(slider, clip_area, mode);
+
lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
- const lv_style_t * style_bg = lv_slider_get_style(slider, LV_SLIDER_STYLE_BG);
- const lv_style_t * style_knob = lv_slider_get_style(slider, LV_SLIDER_STYLE_KNOB);
- const lv_style_t * style_indic = lv_slider_get_style(slider, LV_SLIDER_STYLE_INDIC);
+ lv_coord_t objw = lv_obj_get_width(slider);
+ lv_coord_t objh = lv_obj_get_height(slider);
+ bool hor = objw >= objh ? true : false;
+ lv_coord_t knob_size = hor ? objh : objw;
+ bool sym = false;
+ if(ext->bar.type == LV_BAR_TYPE_SYM && ext->bar.min_value < 0 && ext->bar.max_value > 0) sym = true;
- lv_opa_t opa_scale = lv_obj_get_opa_scale(slider);
-
- lv_coord_t slider_w = lv_area_get_width(&slider->coords);
- lv_coord_t slider_h = lv_area_get_height(&slider->coords);
-
- /*Draw the bar*/
- lv_area_t area_bg;
- lv_area_copy(&area_bg, &slider->coords);
-
- /*Be sure at least LV_SLIDER_SIZE_MIN size will remain*/
- lv_coord_t pad_top_bg = style_bg->body.padding.top;
- lv_coord_t pad_bottom_bg = style_bg->body.padding.bottom;
- lv_coord_t pad_left_bg = style_bg->body.padding.left;
- lv_coord_t pad_right_bg = style_bg->body.padding.right;
- if(pad_top_bg + pad_bottom_bg + LV_SLIDER_SIZE_MIN > lv_area_get_height(&area_bg)) {
- pad_top_bg = (lv_area_get_height(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- pad_bottom_bg = pad_top_bg;
- }
- if(pad_left_bg + pad_right_bg + LV_SLIDER_SIZE_MIN > lv_area_get_width(&area_bg)) {
- pad_left_bg = (lv_area_get_width(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- pad_right_bg = (lv_area_get_width(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- }
-
- if(ext->knob_in) { /*Enable extra size if the knob is inside */
- area_bg.x1 += pad_left_bg;
- area_bg.x2 -= pad_right_bg;
- area_bg.y1 += pad_top_bg;
- area_bg.y2 -= pad_bottom_bg;
- } else { /*Let space only in the perpendicular directions*/
- area_bg.x1 += slider_w < slider_h ? pad_left_bg : 0; /*Pad only for vertical slider*/
- area_bg.x2 -= slider_w < slider_h ? pad_right_bg : 0; /*Pad only for vertical slider*/
- area_bg.y1 += slider_w > slider_h ? pad_top_bg : 0; /*Pad only for horizontal slider*/
- area_bg.y2 -= slider_w > slider_h ? pad_bottom_bg : 0; /*Pad only for horizontal slider*/
- }
-
-#if LV_USE_GROUP == 0
- lv_draw_rect(&area_bg, mask, style_bg, lv_obj_get_opa_scale(slider));
-#else
- /* Draw the borders later if the slider is focused.
- * At value = 100% the indicator can cover to whole background and the focused style won't
- * be visible*/
- if(lv_obj_is_focused(slider)) {
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style_bg);
- style_tmp.body.border.width = 0;
- lv_draw_rect(&area_bg, mask, &style_tmp, opa_scale);
- } else {
- lv_draw_rect(&area_bg, mask, style_bg, opa_scale);
- }
-#endif
-
- /*Draw the indicator*/
- lv_area_t area_indic;
- lv_area_copy(&area_indic, &area_bg);
-
- /*Be sure at least ver pad/hor pad width indicator will remain*/
- lv_coord_t pad_top_indic = style_indic->body.padding.top;
- lv_coord_t pad_bottom_indic = style_indic->body.padding.bottom;
- lv_coord_t pad_left_indic = style_indic->body.padding.left;
- lv_coord_t pad_right_indic = style_indic->body.padding.right;
- if(pad_top_indic + pad_bottom_indic + LV_SLIDER_SIZE_MIN > lv_area_get_height(&area_bg)) {
- pad_top_indic = (lv_area_get_height(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- pad_bottom_indic = pad_top_indic;
- }
- if(pad_left_indic + pad_right_indic + LV_SLIDER_SIZE_MIN > lv_area_get_width(&area_bg)) {
- pad_left_indic = (lv_area_get_width(&area_bg) - LV_SLIDER_SIZE_MIN) >> 1;
- pad_right_indic = pad_left_indic;
- }
-
- area_indic.x1 += pad_left_indic;
- area_indic.x2 -= pad_right_indic;
- area_indic.y1 += pad_top_indic;
- area_indic.y2 -= pad_bottom_indic;
-
- lv_coord_t cur_value = lv_slider_get_value(slider);
- lv_coord_t min_value = lv_slider_get_min_value(slider);
- lv_coord_t max_value = lv_slider_get_max_value(slider);
-
- /*If dragged draw to the drag position*/
- if(ext->drag_value != LV_SLIDER_NOT_PRESSED) cur_value = ext->drag_value;
-
- if(slider_w >= slider_h) {
- lv_coord_t indic_w = lv_area_get_width(&area_indic);
-#if LV_USE_ANIMATION
- if(ext->bar.anim_state != LV_BAR_ANIM_STATE_INV) {
- /*Calculate the coordinates of anim. start and end*/
- lv_coord_t anim_start_x =
- (int32_t)((int32_t)indic_w * (ext->bar.anim_start - min_value)) / (max_value - min_value);
- lv_coord_t anim_end_x =
- (int32_t)((int32_t)indic_w * (ext->bar.anim_end - min_value)) / (max_value - min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- area_indic.x2 = anim_start_x + (((anim_end_x - anim_start_x) * ext->bar.anim_state) >> 8);
- } else
-#endif
- {
- area_indic.x2 = (int32_t)((int32_t)indic_w * (cur_value - min_value)) / (max_value - min_value);
- }
- area_indic.x2 = area_indic.x1 + area_indic.x2 - 1;
-
- /*Draw the indicator but don't draw an ugly 1px wide rectangle on the left on min.
- * value*/
- if(area_indic.x1 != area_indic.x2) lv_draw_rect(&area_indic, mask, style_indic, opa_scale);
-
- } else {
- lv_coord_t indic_h = lv_area_get_height(&area_indic);
-#if LV_USE_ANIMATION
- if(ext->bar.anim_state != LV_BAR_ANIM_STATE_INV) {
- /*Calculate the coordinates of anim. start and end*/
- lv_coord_t anim_start_y =
- (int32_t)((int32_t)indic_h * (ext->bar.anim_start - min_value)) / (max_value - min_value);
- lv_coord_t anim_end_y =
- (int32_t)((int32_t)indic_h * (ext->bar.anim_end - min_value)) / (max_value - min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- area_indic.y1 = anim_start_y + (((anim_end_y - anim_start_y) * ext->bar.anim_state) >> 8);
- } else
-#endif
- {
- area_indic.y1 = (int32_t)((int32_t)indic_h * (cur_value - min_value)) / (max_value - min_value);
- }
- area_indic.y1 = area_indic.y2 - area_indic.y1 + 1;
-
- /*Draw the indicator but don't draw an ugly 1px height rectangle on the bottom on min.
- * value*/
- if(area_indic.x1 != area_indic.x2) lv_draw_rect(&area_indic, mask, style_indic, opa_scale);
- }
-
- /*Before the knob add the border if required*/
-#if LV_USE_GROUP
- /* Draw the borders later if the bar is focused.
- * At value = 100% the indicator can cover to whole background and the focused style won't
- * be visible*/
- if(lv_obj_is_focused(slider)) {
- lv_style_t style_tmp;
- lv_style_copy(&style_tmp, style_bg);
- style_tmp.body.opa = LV_OPA_TRANSP;
- style_tmp.body.shadow.width = 0;
- lv_draw_rect(&area_bg, mask, &style_tmp, opa_scale);
- }
-#endif
-
- /*Draw the knob*/
lv_area_t knob_area;
- lv_area_copy(&knob_area, &slider->coords);
- if(slider_w >= slider_h) {
- if(ext->knob_in == 0) {
- knob_area.x1 = area_indic.x2 - slider_h / 2;
- knob_area.x2 = knob_area.x1 + slider_h - 1;
+ /*Horizontal*/
+ if(hor) {
+ if(!sym) {
+ knob_area.x1 = ext->bar.indic_area.x2;
} else {
-#if LV_USE_ANIMATION
- if(ext->bar.anim_state != LV_BAR_ANIM_STATE_INV) {
- lv_coord_t w = slider_w - slider_h - 1;
- lv_coord_t anim_start_x =
- (int32_t)((int32_t)w * (ext->bar.anim_start - min_value)) / (max_value - min_value);
- lv_coord_t anim_end_x =
- (int32_t)((int32_t)w * (ext->bar.anim_end - min_value)) / (max_value - min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- knob_area.x1 = anim_start_x + (((anim_end_x - anim_start_x) * ext->bar.anim_state) >> 8);
- } else
-#endif
- {
- knob_area.x1 = (int32_t)((int32_t)(slider_w - slider_h - 1) * (cur_value - min_value)) /
- (max_value - min_value);
+ if(ext->bar.cur_value >= 0) {
+ knob_area.x1 = ext->bar.indic_area.x2;
+ } else {
+ knob_area.x1 = ext->bar.indic_area.x1;
}
-
- knob_area.x1 += slider->coords.x1;
- knob_area.x2 = knob_area.x1 + slider_h - 1;
}
-
- knob_area.y1 = slider->coords.y1;
- knob_area.y2 = slider->coords.y2;
- } else {
- if(ext->knob_in == 0) {
- knob_area.y1 = area_indic.y1 - slider_w / 2;
- knob_area.y2 = knob_area.y1 + slider_w - 1;
- } else {
-#if LV_USE_ANIMATION
- if(ext->bar.anim_state != LV_BAR_ANIM_STATE_INV) {
- lv_coord_t h = slider_h - slider_w - 1;
- lv_coord_t anim_start_x =
- (int32_t)((int32_t)h * (ext->bar.anim_start - min_value)) / (max_value - min_value);
- lv_coord_t anim_end_x =
- (int32_t)((int32_t)h * (ext->bar.anim_end - min_value)) / (max_value - min_value);
-
- /*Calculate the real position based on `anim_state` (between `anim_start` and
- * `anim_end`)*/
- knob_area.y2 = anim_start_x + (((anim_end_x - anim_start_x) * ext->bar.anim_state) >> 8);
- } else
-#endif
- {
- knob_area.y2 = (int32_t)((int32_t)(slider_h - slider_w - 1) * (cur_value - min_value)) /
- (max_value - min_value);
- }
-
- knob_area.y2 = slider->coords.y2 - knob_area.y2;
- knob_area.y1 = knob_area.y2 - slider_w - 1;
- }
- knob_area.x1 = slider->coords.x1;
- knob_area.x2 = slider->coords.x2;
}
- lv_draw_rect(&knob_area, mask, style_knob, opa_scale);
+ /*Vertical*/
+ else {
+ if(!sym) {
+ knob_area.y1 = ext->bar.indic_area.y1;
+ } else {
+ if(ext->bar.cur_value >= 0) {
+ knob_area.y1 = ext->bar.indic_area.y1;
+ } else {
+ knob_area.y1 = ext->bar.indic_area.y2;
+ }
+ }
+ }
+ lv_slider_position_knob(slider, &knob_area, knob_size, hor);
+
+ lv_area_copy(&ext->left_knob_area, &knob_area);
+ lv_slider_draw_knob(slider, &knob_area, clip_area);
+
+ if(lv_slider_get_type(slider) == LV_SLIDER_TYPE_RANGE) {
+ /* Draw a second knob for the start_value side */
+ if(hor) {
+ knob_area.x1 = ext->bar.indic_area.x1;
+ } else {
+ knob_area.y1 = ext->bar.indic_area.y1;
+ }
+ lv_slider_position_knob(slider, &knob_area, knob_size, hor);
+
+ lv_area_copy(&ext->right_knob_area, &knob_area);
+ lv_slider_draw_knob(slider, &knob_area, clip_area);
+ }
}
/*Post draw when the children are drawn*/
else if(mode == LV_DESIGN_DRAW_POST) {
+ return ancestor_design_f(slider, clip_area, mode);
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -465,45 +324,75 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
/* Include the ancient signal function */
res = ancestor_signal(slider, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
lv_point_t p;
- lv_coord_t w = lv_obj_get_width(slider);
- lv_coord_t h = lv_obj_get_height(slider);
if(sign == LV_SIGNAL_PRESSED) {
- ext->drag_value = lv_slider_get_value(slider);
- } else if(sign == LV_SIGNAL_PRESSING) {
+ ext->dragging = true;
+ if(lv_slider_get_type(slider) == LV_SLIDER_TYPE_RANGE) {
+ lv_indev_get_point(param, &p);
+ bool hor = lv_obj_get_width(slider) >= lv_obj_get_height(slider);
+
+ /* Calculate the distance from each knob */
+ lv_coord_t dist_left, dist_right;
+ if(hor) {
+ dist_left = LV_MATH_ABS((ext->left_knob_area.x1+(ext->left_knob_area.x2 - ext->left_knob_area.x1)/2) - p.x);
+ dist_right = LV_MATH_ABS((ext->right_knob_area.x1+(ext->right_knob_area.x2 - ext->right_knob_area.x1)/2) - p.x);
+ } else {
+ dist_left = LV_MATH_ABS((ext->left_knob_area.y1+(ext->left_knob_area.y2 - ext->left_knob_area.y1)/2) - p.y);
+ dist_right = LV_MATH_ABS((ext->right_knob_area.y1+(ext->right_knob_area.y2 - ext->right_knob_area.y1)/2) - p.y);
+ }
+
+ /* Use whichever one is closer */
+ if(dist_right > dist_left)
+ ext->value_to_set = &ext->bar.cur_value;
+ else
+ ext->value_to_set = &ext->bar.start_value;
+ } else
+ ext->value_to_set = &ext->bar.cur_value;
+ } else if(sign == LV_SIGNAL_PRESSING && ext->value_to_set != NULL) {
lv_indev_get_point(param, &p);
- int16_t tmp = 0;
- if(w > h) {
- lv_coord_t knob_w = h;
- p.x -=
- slider->coords.x1 + h / 2; /*Modify the point to shift with half knob (important on the start and end)*/
- tmp = (int32_t)((int32_t)p.x * (ext->bar.max_value - ext->bar.min_value + 1)) / (w - knob_w);
- tmp += ext->bar.min_value;
- } else {
- lv_coord_t knob_h = w;
- p.y -=
- slider->coords.y1 + w / 2; /*Modify the point to shift with half knob (important on the start and end)*/
- tmp = (int32_t)((int32_t)p.y * (ext->bar.max_value - ext->bar.min_value + 1)) / (h - knob_h);
- tmp = ext->bar.max_value - tmp; /*Invert the value: smaller value means higher y*/
- }
- if(tmp < ext->bar.min_value)
- tmp = ext->bar.min_value;
- else if(tmp > ext->bar.max_value)
- tmp = ext->bar.max_value;
+ lv_coord_t w = lv_obj_get_width(slider);
+ lv_coord_t h = lv_obj_get_height(slider);
+ const lv_style_t * indic_style = lv_slider_get_style(slider, LV_SLIDER_STYLE_INDIC);
+ int32_t range = ext->bar.max_value - ext->bar.min_value;
+ int16_t new_value = 0, real_max_value = ext->bar.max_value, real_min_value = ext->bar.min_value;
- if(tmp != ext->drag_value) {
- ext->drag_value = tmp;
- lv_obj_invalidate(slider);
- res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
- if(res != LV_RES_OK) return res;
- }
+ if(w >= h) {
+ lv_coord_t indic_w = w - indic_style->body.padding.left - indic_style->body.padding.right;
+ new_value = p.x - (slider->coords.x1 + indic_style->body.padding.left); /*Make the point relative to the indicator*/
+ new_value = (new_value * range) / indic_w;
+ new_value += ext->bar.min_value;
+ } else {
+ lv_coord_t indic_h = h - indic_style->body.padding.bottom - indic_style->body.padding.top;
+ new_value = p.y - (slider->coords.y2 + indic_style->body.padding.bottom); /*Make the point relative to the indicator*/
+ new_value = (-new_value * range) / indic_h;
+ new_value += ext->bar.min_value;
+
+ }
+
+ /* Figure out the min. and max. for this mode */
+ if(ext->value_to_set == &ext->bar.start_value) {
+ real_max_value = ext->bar.cur_value;
+ } else
+ real_min_value = ext->bar.start_value;
+
+ if(new_value < real_min_value) new_value = real_min_value;
+ else if(new_value > real_max_value) new_value = real_max_value;
+
+ if(new_value != ext->bar.cur_value) {
+ *ext->value_to_set = new_value;
+ lv_obj_invalidate(slider);
+ res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
+ if(res != LV_RES_OK) return res;
+ }
+
} else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
- if(ext->drag_value != LV_SLIDER_NOT_PRESSED) lv_slider_set_value(slider, ext->drag_value, false);
- ext->drag_value = LV_SLIDER_NOT_PRESSED;
+ ext->dragging = false;
+ ext->value_to_set = NULL;
#if LV_USE_GROUP
/*Leave edit mode if released. (No need to wait for LONG_PRESS) */
@@ -523,30 +412,45 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
slider->signal_cb(slider, LV_SIGNAL_REFR_EXT_DRAW_PAD, NULL);
}
} else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
- const lv_style_t * style = lv_slider_get_style(slider, LV_SLIDER_STYLE_BG);
+ const lv_style_t * bg_style = lv_slider_get_style(slider, LV_SLIDER_STYLE_BG);
+ const lv_style_t * indic_style = lv_slider_get_style(slider, LV_SLIDER_STYLE_INDIC);
const lv_style_t * knob_style = lv_slider_get_style(slider, LV_SLIDER_STYLE_KNOB);
- lv_coord_t shadow_w = knob_style->body.shadow.width;
- if(ext->knob_in == 0) {
- /* The smaller size is the knob diameter*/
- lv_coord_t x = LV_MATH_MIN(w / 2 + 1 + shadow_w, h / 2 + 1 + shadow_w);
- if(slider->ext_draw_pad < x) slider->ext_draw_pad = x;
- } else {
- lv_coord_t pad = 0;
- pad = LV_MATH_MIN(pad, style->body.padding.top);
- pad = LV_MATH_MIN(pad, style->body.padding.bottom);
- pad = LV_MATH_MIN(pad, style->body.padding.left);
- pad = LV_MATH_MIN(pad, style->body.padding.right);
- if(pad < 0) pad = -pad;
- if(slider->ext_draw_pad < pad) slider->ext_draw_pad = pad;
+ /* The smaller size is the knob diameter*/
+ lv_coord_t knob_size = LV_MATH_MIN(lv_obj_get_width(slider), lv_obj_get_height(slider)) >> 1;
+ knob_size += LV_MATH_MAX(
+ LV_MATH_MAX(knob_style->body.padding.left, knob_style->body.padding.right),
+ LV_MATH_MAX(knob_style->body.padding.bottom,knob_style->body.padding.top));
- if(slider->ext_draw_pad < shadow_w) slider->ext_draw_pad = shadow_w;
+ knob_size += knob_style->body.shadow.width + knob_style->body.shadow.spread;
+ knob_size += LV_MATH_MAX(LV_MATH_ABS(knob_style->body.shadow.offset.x), LV_MATH_ABS(knob_style->body.shadow.offset.y));
+
+ if(ext->img_knob) {
+ lv_img_header_t info;
+ lv_res_t res;
+ res = lv_img_decoder_get_info(ext->img_knob, &info);
+ if(res == LV_RES_OK) {
+ knob_size = LV_MATH_MAX(knob_size, info.w / 2);
+ knob_size = LV_MATH_MAX(knob_size, info.h / 2);
+ } else {
+ LV_LOG_WARN("slider signal (LV_SIGNAL_REFR_EXT_DRAW_PAD): can't get knob image info")
+ }
}
+
+
+ lv_coord_t bg_size = bg_style->body.shadow.width + bg_style->body.shadow.spread;
+ bg_size += LV_MATH_MAX(LV_MATH_ABS(bg_style->body.shadow.offset.x), LV_MATH_ABS(bg_style->body.shadow.offset.y));
+
+ lv_coord_t indic_size = indic_style->body.shadow.width + indic_style->body.shadow.spread;
+ indic_size += LV_MATH_MAX(LV_MATH_ABS(indic_style->body.shadow.offset.x), LV_MATH_ABS(indic_style->body.shadow.offset.y));
+
+ slider->ext_draw_pad = LV_MATH_MAX(slider->ext_draw_pad, knob_size);
+ slider->ext_draw_pad = LV_MATH_MAX(slider->ext_draw_pad, indic_size);
+ slider->ext_draw_pad = LV_MATH_MAX(slider->ext_draw_pad, bg_size);
+
} else if(sign == LV_SIGNAL_CONTROL) {
char c = *((char *)param);
- ext->drag_value = LV_SLIDER_NOT_PRESSED;
-
if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
lv_slider_set_value(slider, lv_slider_get_value(slider) + 1, true);
res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
@@ -559,15 +463,58 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
} else if(sign == LV_SIGNAL_GET_EDITABLE) {
bool * editable = (bool *)param;
*editable = true;
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_slider";
}
return res;
}
+
+static void lv_slider_position_knob(lv_obj_t * slider, lv_area_t * knob_area, lv_coord_t knob_size, bool hor)
+{
+ const lv_style_t * style_knob = lv_slider_get_style(slider, LV_SLIDER_STYLE_KNOB);
+
+ if(hor) {
+ knob_area->x1 -= (knob_size >> 1);
+ knob_area->x2 = knob_area->x1 + knob_size;
+ knob_area->y1 = slider->coords.y1;
+ knob_area->y2 = slider->coords.y2;
+ } else {
+ knob_area->y1 -= (knob_size >> 1);
+ knob_area->y2 = knob_area->y1 + knob_size;
+ knob_area->x1 = slider->coords.x1;
+ knob_area->x2 = slider->coords.x2;
+ }
+
+ /*Apply the paddings on the knob area*/
+ knob_area->x1 -= style_knob->body.padding.left;
+ knob_area->x2 += style_knob->body.padding.right;
+ knob_area->y1 -= style_knob->body.padding.top;
+ knob_area->y2 += style_knob->body.padding.bottom;
+}
+
+static void lv_slider_draw_knob(lv_obj_t * slider, lv_area_t * knob_area, lv_area_t * clip_area) {
+ lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider);
+ const lv_style_t * style_knob = lv_slider_get_style(slider, LV_SLIDER_STYLE_KNOB);
+ lv_opa_t opa_scale = lv_obj_get_opa_scale(slider);
+
+ lv_draw_rect(knob_area, clip_area, style_knob, opa_scale);
+
+ if(ext->img_knob) {
+ lv_res_t res;
+ lv_img_header_t info;
+ res = lv_img_decoder_get_info(ext->img_knob, &info);
+ if(res == LV_RES_OK) {
+ lv_coord_t x_ofs = knob_area->x1 + (lv_area_get_width(knob_area) - info.w) / 2;
+ lv_coord_t y_ofs = knob_area->y1 + (lv_area_get_height(knob_area) - info.h) / 2;
+ lv_area_t a;
+ a.x1 = x_ofs;
+ a.y1 = y_ofs;
+ a.x2 = info.w - 1 + x_ofs;
+ a.y2 = info.h - 1 + y_ofs;
+
+ lv_draw_img(&a, clip_area, ext->img_knob, style_knob, 0, NULL, LV_IMG_ZOOM_NONE, false, opa_scale);
+ } else {
+ LV_LOG_WARN("lv_slider_design: can't get knob image info")
+ }
+ }
+}
#endif
diff --git a/src/lv_objx/lv_slider.h b/src/lv_objx/lv_slider.h
index 07086efe4..34398889c 100644
--- a/src/lv_objx/lv_slider.h
+++ b/src/lv_objx/lv_slider.h
@@ -36,14 +36,24 @@ extern "C" {
/**********************
* TYPEDEFS
**********************/
+
+enum {
+ LV_SLIDER_TYPE_NORMAL,
+ LV_SLIDER_TYPE_SYM,
+ LV_SLIDER_TYPE_RANGE
+};
+typedef uint8_t lv_slider_type_t;
/*Data of slider*/
typedef struct
{
lv_bar_ext_t bar; /*Ext. of ancestor*/
/*New data for this type */
const lv_style_t * style_knob; /*Style of the knob*/
- int16_t drag_value; /*Store a temporal value during press until release (Handled by the library)*/
- uint8_t knob_in : 1; /*1: Draw the knob inside the bar*/
+ lv_area_t left_knob_area;
+ lv_area_t right_knob_area;
+ int16_t *value_to_set; /* Which bar value to set */
+ const void * img_knob;
+ uint8_t dragging :1; /*1: the slider is being dragged*/
} lv_slider_ext_t;
/** Built-in styles of slider*/
@@ -81,6 +91,17 @@ static inline void lv_slider_set_value(lv_obj_t * slider, int16_t value, lv_anim
lv_bar_set_value(slider, value, anim);
}
+/**
+ * Set a new value for the left knob of a slider
+ * @param slider pointer to a slider object
+ * @param left_value new value
+ * @param anim LV_ANIM_ON: set the value with an animation; LV_ANIM_OFF: change the value immediately
+ */
+static inline void lv_slider_set_left_value(lv_obj_t * slider, int16_t left_value, lv_anim_enable_t anim)
+{
+ lv_bar_set_start_value(slider, left_value, anim);
+}
+
/**
* Set minimum and the maximum values of a bar
* @param slider pointer to the slider object
@@ -93,9 +114,10 @@ static inline void lv_slider_set_range(lv_obj_t * slider, int16_t min, int16_t m
}
/**
- * Set the animation time of the slider
- * @param slider pointer to a bar object
- * @param anim_time the animation time in milliseconds.
+ * Make the slider symmetric to zero. The indicator will grow from zero instead of the minimum
+ * position.
+ * @param slider pointer to a slider object
+ * @param en true: enable disable symmetric behavior; false: disable
*/
static inline void lv_slider_set_anim_time(lv_obj_t * slider, uint16_t anim_time)
{
@@ -103,12 +125,27 @@ static inline void lv_slider_set_anim_time(lv_obj_t * slider, uint16_t anim_time
}
/**
- * Set the 'knob in' attribute of a slider
- * @param slider pointer to slider object
- * @param in true: the knob is drawn always in the slider;
- * false: the knob can be out on the edges
+ * Set an image to display on the knob of the slider
+ * @param slider pointer to a slider object
+ * @param img_src pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
*/
-void lv_slider_set_knob_in(lv_obj_t * slider, bool in);
+void lv_slider_set_knob_img(lv_obj_t * slider, const void * img_src);
+
+/**
+ * Set the animation time of the slider
+ * @param slider pointer to a bar object
+ * @param anim_time the animation time in milliseconds.
+ */
+static inline void lv_slider_set_type(lv_obj_t * slider, lv_slider_type_t type)
+{
+ if(type == LV_SLIDER_TYPE_NORMAL)
+ lv_bar_set_type(slider, LV_BAR_TYPE_NORMAL);
+ else if(type == LV_SLIDER_TYPE_SYM)
+ lv_bar_set_type(slider, LV_BAR_TYPE_SYM);
+ else if(type == LV_SLIDER_TYPE_RANGE)
+ lv_bar_set_type(slider, LV_BAR_TYPE_CUSTOM);
+}
/**
* Set a style of a slider
@@ -123,12 +160,22 @@ void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, const lv_sty
*====================*/
/**
- * Get the value of a slider
+ * Get the value of the main knob of a slider
* @param slider pointer to a slider object
- * @return the value of the slider
+ * @return the value of the main knob of the slider
*/
int16_t lv_slider_get_value(const lv_obj_t * slider);
+/**
+ * Get the value of the left knob of a slider
+ * @param slider pointer to a slider object
+ * @return the value of the left knob of the slider
+ */
+static inline int16_t lv_slider_get_left_value(const lv_obj_t * slider)
+{
+ return lv_bar_get_start_value(slider);
+}
+
/**
* Get the minimum value of a slider
* @param slider pointer to a slider object
@@ -157,12 +204,37 @@ static inline int16_t lv_slider_get_max_value(const lv_obj_t * slider)
bool lv_slider_is_dragged(const lv_obj_t * slider);
/**
- * Get the 'knob in' attribute of a slider
- * @param slider pointer to slider object
- * @return true: the knob is drawn always in the slider;
- * false: the knob can be out on the edges
+ * Get an image to display on the knob of the slider
+ * @param slider pointer to a slider object
+ * @return the image source: pointer to an `lv_img_dsc_t` variable or a path to an image (not an `lv_img` object)
*/
-bool lv_slider_get_knob_in(const lv_obj_t * slider);
+const void * lv_slider_get_knob_img(lv_obj_t * slider, const void * img_src);
+
+/**
+ * Get the animation time of the slider
+ * @param slider pointer to a slider object
+ * @return the animation time in milliseconds.
+ */
+static inline uint16_t lv_slider_get_anim_time(lv_obj_t * slider)
+{
+ return lv_bar_get_anim_time(slider);
+}
+
+/**
+ * Get whether the slider is symmetric or not.
+ * @param slider pointer to a bar object
+ * @return true: symmetric is enabled; false: disable
+ */
+static inline lv_slider_type_t lv_slider_get_type(lv_obj_t * slider)
+{
+ lv_bar_type_t type = lv_bar_get_type(slider);
+ if(type == LV_BAR_TYPE_SYM)
+ return LV_SLIDER_TYPE_SYM;
+ else if(type == LV_BAR_TYPE_CUSTOM)
+ return LV_SLIDER_TYPE_RANGE;
+ else
+ return LV_SLIDER_TYPE_NORMAL;
+}
/**
* Get a style of a slider
diff --git a/src/lv_objx/lv_spinbox.c b/src/lv_objx/lv_spinbox.c
index 4dc544942..914f7afe3 100644
--- a/src/lv_objx/lv_spinbox.c
+++ b/src/lv_objx/lv_spinbox.c
@@ -9,6 +9,7 @@
#include "lv_spinbox.h"
#if LV_USE_SPINBOX != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_math.h"
#include "../lv_misc/lv_utils.h"
@@ -16,6 +17,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_spinbox"
/**********************
* TYPEDEFS
@@ -53,13 +55,17 @@ lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of spinbox*/
lv_obj_t * new_spinbox = lv_ta_create(par, copy);
- lv_mem_assert(new_spinbox);
+ LV_ASSERT_MEM(new_spinbox);
if(new_spinbox == NULL) return NULL;
/*Allocate the spinbox type specific extended data*/
lv_spinbox_ext_t * ext = lv_obj_allocate_ext_attr(new_spinbox, sizeof(lv_spinbox_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_spinbox);
+ return NULL;
+ }
+
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_spinbox);
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_spinbox);
@@ -121,6 +127,8 @@ lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_spinbox_set_value(lv_obj_t * spinbox, int32_t i)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if(ext == NULL) return;
@@ -141,6 +149,8 @@ void lv_spinbox_set_value(lv_obj_t * spinbox, int32_t i)
*/
void lv_spinbox_set_digit_format(lv_obj_t * spinbox, uint8_t digit_count, uint8_t separator_position)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if(ext == NULL) return;
@@ -161,6 +171,8 @@ void lv_spinbox_set_digit_format(lv_obj_t * spinbox, uint8_t digit_count, uint8_
*/
void lv_spinbox_set_step(lv_obj_t * spinbox, uint32_t step)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if(ext == NULL) return;
@@ -175,6 +187,8 @@ void lv_spinbox_set_step(lv_obj_t * spinbox, uint32_t step)
*/
void lv_spinbox_set_range(lv_obj_t * spinbox, int32_t range_min, int32_t range_max)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if(ext == NULL) return;
@@ -198,6 +212,8 @@ void lv_spinbox_set_range(lv_obj_t * spinbox, int32_t range_min, int32_t range_m
*/
void lv_spinbox_set_padding_left(lv_obj_t * spinbox, uint8_t padding)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
ext->digit_padding_left = padding;
lv_spinbox_updatevalue(spinbox);
@@ -214,6 +230,8 @@ void lv_spinbox_set_padding_left(lv_obj_t * spinbox, uint8_t padding)
*/
int32_t lv_spinbox_get_value(lv_obj_t * spinbox)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
return ext->value;
@@ -229,6 +247,8 @@ int32_t lv_spinbox_get_value(lv_obj_t * spinbox)
*/
void lv_spinbox_step_next(lv_obj_t * spinbox)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
int32_t new_step = ext->step / 10;
@@ -246,6 +266,8 @@ void lv_spinbox_step_next(lv_obj_t * spinbox)
*/
void lv_spinbox_step_prev(lv_obj_t * spinbox)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
int32_t step_limit;
step_limit = LV_MATH_MAX(ext->range_max, (ext->range_min < 0 ? (-ext->range_min) : ext->range_min));
@@ -261,6 +283,8 @@ void lv_spinbox_step_prev(lv_obj_t * spinbox)
*/
void lv_spinbox_increment(lv_obj_t * spinbox)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if(ext->value + ext->step <= ext->range_max) {
@@ -281,6 +305,8 @@ void lv_spinbox_increment(lv_obj_t * spinbox)
*/
void lv_spinbox_decrement(lv_obj_t * spinbox)
{
+ LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
+
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if(ext->value - ext->step >= ext->range_min) {
@@ -308,8 +334,6 @@ void lv_spinbox_decrement(lv_obj_t * spinbox)
static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * param)
{
- lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
-
lv_res_t res = LV_RES_OK;
/* Include the ancient signal function */
@@ -317,7 +341,10 @@ static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * p
res = ancestor_signal(spinbox, sign, param);
if(res != LV_RES_OK) return res;
}
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
+
+ lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
} else if(sign == LV_SIGNAL_GET_TYPE) {
@@ -383,11 +410,13 @@ static void lv_spinbox_updatevalue(lv_obj_t * spinbox)
memset(buf, 0, sizeof(buf));
char * buf_p = buf;
- /*Add the sign*/
- (*buf_p) = ext->value >= 0 ? '+' : '-';
- buf_p++;
+ if (ext->range_min < 0) { // hide sign if there are only positive values
+ /*Add the sign*/
+ (*buf_p) = ext->value >= 0 ? '+' : '-';
+ buf_p++;
+ }
- int i;
+ int32_t i;
/*padding left*/
for(i = 0; i < ext->digit_padding_left; i++) {
(*buf_p) = ' ';
@@ -401,7 +430,7 @@ static void lv_spinbox_updatevalue(lv_obj_t * spinbox)
/*Add leading zeros*/
int lz_cnt = ext->digit_count - (int)strlen(digits);
if(lz_cnt > 0) {
- for(i = strlen(digits); i >= 0; i--) {
+ for(i = (uint16_t)strlen(digits); i >= 0; i--) {
digits[i + lz_cnt] = digits[i];
}
for(i = 0; i < lz_cnt; i++) {
@@ -434,7 +463,7 @@ static void lv_spinbox_updatevalue(lv_obj_t * spinbox)
/*Set the cursor position*/
int32_t step = ext->step;
- uint8_t cur_pos = ext->digit_count;
+ uint8_t cur_pos = (uint8_t)ext->digit_count;
while(step >= 10) {
step /= 10;
cur_pos--;
diff --git a/src/lv_objx/lv_sw.c b/src/lv_objx/lv_sw.c
index 80854b0a0..8ceaab05d 100644
--- a/src/lv_objx/lv_sw.c
+++ b/src/lv_objx/lv_sw.c
@@ -15,12 +15,16 @@
#error "lv_sw: lv_slider is required. Enable it in lv_conf.h (LV_USE_SLIDER 1) "
#endif
+#include "../lv_core/lv_debug.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_math.h"
+#include "../lv_core/lv_indev.h"
+#include "lv_img.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_sw"
/**********************
* TYPEDEFS
@@ -29,12 +33,14 @@
/**********************
* STATIC PROTOTYPES
**********************/
+static lv_design_res_t lv_sw_design(lv_obj_t * slider, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param);
/**********************
* STATIC VARIABLES
**********************/
static lv_signal_cb_t ancestor_signal;
+static lv_design_cb_t ancestor_design;
/**********************
* MACROS
@@ -55,33 +61,39 @@ lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy)
LV_LOG_TRACE("switch create started");
/*Create the ancestor of switch*/
- lv_obj_t * new_sw = lv_slider_create(par, copy);
- lv_mem_assert(new_sw);
+ lv_obj_t * new_sw = lv_bar_create(par, copy);
+ LV_ASSERT_MEM(new_sw);
+
if(new_sw == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_sw);
+ if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_sw);
/*Allocate the switch type specific extended data*/
lv_sw_ext_t * ext = lv_obj_allocate_ext_attr(new_sw, sizeof(lv_sw_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_sw);
+ return NULL;
+ }
/*Initialize the allocated 'ext' */
ext->changed = 0;
-#if LV_USE_ANIMATION
- ext->anim_time = 0;
-#endif
- ext->style_knob_off = ext->slider.style_knob;
- ext->style_knob_on = ext->slider.style_knob;
+ ext->style_knob_off = &lv_style_pretty;
+ ext->style_knob_on = &lv_style_pretty;
+ ext->img_knob_off = NULL;
+ ext->img_knob_on = NULL;
/*The signal and design functions are not copied so set them here*/
lv_obj_set_signal_cb(new_sw, lv_sw_signal);
+ lv_obj_set_design_cb(new_sw, lv_sw_design);
/*Init the new switch switch*/
if(copy == NULL) {
+ lv_obj_set_click(new_sw, true);
+ lv_obj_set_protect(new_sw, LV_PROTECT_PRESS_LOST);
lv_obj_set_size(new_sw, 2 * LV_DPI / 3, LV_DPI / 3);
- lv_slider_set_knob_in(new_sw, true);
- lv_slider_set_range(new_sw, 0, LV_SW_MAX_VALUE);
+ lv_bar_set_range(new_sw, 0, LV_SW_MAX_VALUE);
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
@@ -93,26 +105,17 @@ lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy)
} else {
/*Let the slider' style*/
}
-
}
/*Copy an existing switch*/
else {
lv_sw_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
ext->style_knob_off = copy_ext->style_knob_off;
ext->style_knob_on = copy_ext->style_knob_on;
-#if LV_USE_ANIMATION
- ext->anim_time = copy_ext->anim_time;
-#endif
-
- if(lv_sw_get_state(new_sw))
- lv_slider_set_style(new_sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_on);
- else
- lv_slider_set_style(new_sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_off);
-
- /*Refresh the style with new signal function*/
- lv_obj_refresh_style(new_sw);
}
+ /*Refresh the style with new signal function*/
+ lv_obj_refresh_style(new_sw);
+
LV_LOG_INFO("switch created");
return new_sw;
@@ -129,12 +132,15 @@ lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_sw_on(lv_obj_t * sw, lv_anim_enable_t anim)
{
+ LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION == 0
anim = LV_ANIM_OFF;
#endif
lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
- lv_slider_set_value(sw, LV_SW_MAX_VALUE, anim);
- lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_on);
+ ext->state = 1;
+ lv_bar_set_value(sw, LV_SW_MAX_VALUE, anim);
+ lv_obj_invalidate(sw);
}
/**
@@ -144,12 +150,15 @@ void lv_sw_on(lv_obj_t * sw, lv_anim_enable_t anim)
*/
void lv_sw_off(lv_obj_t * sw, lv_anim_enable_t anim)
{
+ LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION == 0
anim = LV_ANIM_OFF;
#endif
lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
- lv_slider_set_value(sw, 0, anim);
- lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_off);
+ ext->state = 0;
+ lv_bar_set_value(sw, 0, anim);
+ lv_obj_invalidate(sw);
}
/**
@@ -160,6 +169,8 @@ void lv_sw_off(lv_obj_t * sw, lv_anim_enable_t anim)
*/
bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim)
{
+ LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION == 0
anim = LV_ANIM_OFF;
#endif
@@ -173,6 +184,40 @@ bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim)
return !state;
}
+/**
+ * Set an image to display on the knob of the switch when it's in OFF state
+ * @param sw pointer to a switch object
+ * @param img_src pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
+ */
+void lv_sw_set_knob_off_img(lv_obj_t * sw, const void * img_src)
+{
+ LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
+ lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
+
+ ext->img_knob_off = img_src;
+ lv_obj_refresh_ext_draw_pad(sw);
+ lv_obj_invalidate(sw);
+}
+
+/**
+ * Set an image to display on the knob of the switch when it's in ON state
+ * @param sw pointer to a switch object
+ * @param img_src pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
+ */
+void lv_sw_set_knob_on_img(lv_obj_t * sw, const void * img_src)
+{
+ LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
+ lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
+
+ ext->img_knob_on = img_src;
+ lv_obj_refresh_ext_draw_pad(sw);
+ lv_obj_invalidate(sw);
+}
+
/**
* Set a style of a switch
* @param sw pointer to a switch object
@@ -181,37 +226,60 @@ bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim)
*/
void lv_sw_set_style(lv_obj_t * sw, lv_sw_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
switch(type) {
- case LV_SLIDER_STYLE_BG: lv_slider_set_style(sw, LV_SLIDER_STYLE_BG, style); break;
- case LV_SLIDER_STYLE_INDIC: lv_bar_set_style(sw, LV_SLIDER_STYLE_INDIC, style); break;
+ case LV_SW_STYLE_BG: lv_bar_set_style(sw, LV_BAR_STYLE_BG, style); break;
+ case LV_SW_STYLE_INDIC: lv_bar_set_style(sw, LV_BAR_STYLE_INDIC, style); break;
case LV_SW_STYLE_KNOB_OFF:
ext->style_knob_off = style;
- if(lv_sw_get_state(sw) == 0) lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, style);
+ lv_obj_refresh_ext_draw_pad(sw);
+ lv_obj_invalidate(sw);
break;
case LV_SW_STYLE_KNOB_ON:
ext->style_knob_on = style;
- if(lv_sw_get_state(sw) != 0) lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, style);
+ lv_obj_refresh_ext_draw_pad(sw);
+ lv_obj_invalidate(sw);
break;
}
}
-void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time)
-{
-#if LV_USE_ANIMATION
- lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
- ext->anim_time = anim_time;
-#else
- (void)sw;
- (void)anim_time;
-#endif
-}
-
/*=====================
* Getter functions
*====================*/
+/**
+ * Get an image to display on the knob of the switch when it's in OFF state
+ * @param sw pointer to a switch object
+ * @return the image source: pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
+ */
+const void * lv_slider_get_knob_off_img(lv_obj_t * sw, const void * img_src)
+{
+ LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
+ lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
+
+ return ext->img_knob_off;
+}
+
+/**
+ * Get an image to display on the knob of the switch when it's in ON state
+ * @param sw pointer to a switch object
+ * @return the image source: pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
+ */
+const void * lv_slider_get_knob_on_img(lv_obj_t * sw, const void * img_src)
+{
+ LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
+ lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
+
+ return ext->img_knob_on;
+}
+
/**
* Get a style of a switch
* @param sw pointer to a switch object
@@ -220,12 +288,14 @@ void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time)
*/
const lv_style_t * lv_sw_get_style(const lv_obj_t * sw, lv_sw_style_t type)
{
+ LV_ASSERT_OBJ(sw, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
switch(type) {
- case LV_SW_STYLE_BG: style = lv_slider_get_style(sw, LV_SLIDER_STYLE_BG); break;
- case LV_SW_STYLE_INDIC: style = lv_slider_get_style(sw, LV_SLIDER_STYLE_INDIC); break;
+ case LV_SW_STYLE_BG: style = lv_bar_get_style(sw, LV_BAR_STYLE_BG); break;
+ case LV_SW_STYLE_INDIC: style = lv_bar_get_style(sw, LV_BAR_STYLE_INDIC); break;
case LV_SW_STYLE_KNOB_OFF: style = ext->style_knob_off; break;
case LV_SW_STYLE_KNOB_ON: style = ext->style_knob_on; break;
default: style = NULL; break;
@@ -234,22 +304,90 @@ const lv_style_t * lv_sw_get_style(const lv_obj_t * sw, lv_sw_style_t type)
return style;
}
-uint16_t lv_sw_get_anim_time(const lv_obj_t * sw)
-{
-
-#if LV_USE_ANIMATION
- lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
- return ext->anim_time;
-#else
- (void)sw; /*Unused*/
- return 0;
-#endif
-}
-
/**********************
* STATIC FUNCTIONS
**********************/
+/**
+ * Handle the drawing related tasks of the sliders
+ * @param sw pointer to an object
+ * @param clip_area the object will be drawn only in this area
+ * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
+ * (return 'true' if yes)
+ * LV_DESIGN_DRAW: draw the object (always return 'true')
+ * LV_DESIGN_DRAW_POST: drawing after every children are drawn
+ * @param return an element of `lv_design_res_t`
+ */
+static lv_design_res_t lv_sw_design(lv_obj_t * sw, const lv_area_t * clip_area, lv_design_mode_t mode)
+{
+ /*Return false if the object is not covers the mask_p area*/
+ if(mode == LV_DESIGN_COVER_CHK) {
+ return LV_DESIGN_RES_NOT_COVER;
+ }
+ /*Draw the object*/
+ else if(mode == LV_DESIGN_DRAW_MAIN) {
+ /*The ancestor design function will draw the background and the indicator.
+ * It also sets ext->bar.indic_area*/
+ ancestor_design(sw, clip_area, mode);
+
+ lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
+ lv_opa_t opa_scale = lv_obj_get_opa_scale(sw);
+ const lv_style_t * style_knob = lv_sw_get_style(sw, ext->state ?
+ LV_SW_STYLE_KNOB_ON : LV_SW_STYLE_KNOB_OFF);
+
+ const lv_style_t * style_indic = lv_sw_get_style(sw, LV_SW_STYLE_INDIC);
+
+ lv_coord_t objw = lv_obj_get_width(sw);
+ lv_coord_t objh = lv_obj_get_height(sw);
+ lv_coord_t indic_maxw = objw - style_indic->body.padding.left - style_indic->body.padding.right;
+ lv_coord_t knob_size = objh;
+
+ lv_coord_t indic_p = (lv_area_get_width(&ext->bar.indic_area) * 256) / (indic_maxw);
+ lv_area_t knob_area;
+ knob_area.x2 = ext->bar.indic_area.x2;
+ knob_area.x2 += (knob_size * (256 - indic_p)) >> 8;
+ if(knob_area.x2 < sw->coords.x1 + knob_size) knob_area.x2 = sw->coords.x1 + knob_size;
+ knob_area.x1 = knob_area.x2 - knob_size;
+ knob_area.y1 = sw->coords.y1;
+ knob_area.y2 = sw->coords.y2;
+
+ knob_area.x1 -= style_knob->body.padding.left;
+ knob_area.x2 += style_knob->body.padding.right;
+ knob_area.y1 -= style_knob->body.padding.top;
+ knob_area.y2 += style_knob->body.padding.bottom;
+
+ lv_draw_rect(&knob_area, clip_area, style_knob, opa_scale);
+
+ const void * img = ext->state ? ext->img_knob_on : ext->img_knob_off;
+
+ if(img) {
+ lv_res_t res;
+ lv_img_header_t info;
+ res = lv_img_decoder_get_info(img, &info);
+ if(res == LV_RES_OK) {
+ lv_coord_t x_ofs = knob_area.x1 + (lv_area_get_width(&knob_area) - info.w) / 2;
+ lv_coord_t y_ofs = knob_area.y1 + (lv_area_get_height(&knob_area) - info.h) / 2;
+ lv_area_t a;
+ a.x1 = x_ofs;
+ a.y1 = y_ofs;
+ a.x2 = info.w - 1 + x_ofs;
+ a.y2 = info.h - 1 + y_ofs;
+
+ lv_draw_img(&a, clip_area, img, style_knob, 0, NULL, LV_IMG_ZOOM_NONE, false, opa_scale);
+ } else {
+ LV_LOG_WARN("lv_slider_design: can't get knob image info")
+ }
+ }
+ }
+ /*Post draw when the children are drawn*/
+ else if(mode == LV_DESIGN_DRAW_POST) {
+ return ancestor_design(sw, clip_area, mode);
+ }
+
+ return LV_DESIGN_RES_OK;
+}
+
+
/**
* Signal function of the switch
* @param sw pointer to a switch object
@@ -261,25 +399,11 @@ static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
{
lv_sw_ext_t * ext = lv_obj_get_ext_attr(sw);
- /*Save the current (old) value before slider signal modifies it. It will be required in the
- * later calculations*/
- int16_t old_val;
- if(sign == LV_SIGNAL_PRESSING)
- old_val = ext->slider.drag_value;
- else
- old_val = lv_slider_get_value(sw);
-
- /*Don't let the slider to call the action. Switch handles it differently*/
- lv_event_cb_t event_cb = sw->event_cb;
- sw->event_cb = NULL;
-
lv_res_t res;
/* Include the ancient signal function */
-
res = ancestor_signal(sw, sign, param);
if(res != LV_RES_OK) return res;
-
- sw->event_cb = event_cb;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
@@ -297,37 +421,42 @@ static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
} else if(sign == LV_SIGNAL_PRESSING) {
/*See if the switch was slid (moved at least a little)*/
lv_indev_t * indev = lv_indev_get_act();
+ lv_point_t p;
if(indev) {
- lv_point_t p = {0, 0};
lv_indev_get_point(indev, &p);
- if(LV_MATH_ABS(p.x - ext->start_x) > LV_INDEV_DEF_DRAG_LIMIT) ext->slided = 1;
- }
+ if(LV_MATH_ABS(p.x - ext->start_x) > indev->driver.drag_limit) ext->slided = 1;
- /*If didn't slide then revert the min/max value. So click without slide won't move the
- * switch as a slider*/
- if(ext->slided == 0) {
- if(lv_sw_get_state(sw))
- ext->slider.drag_value = LV_SW_MAX_VALUE;
- else
- ext->slider.drag_value = 0;
- }
+ /*If slid set the value accordingly*/
+ if(ext->slided) {
+ lv_coord_t w = lv_obj_get_width(sw);
+ const lv_style_t * indic_style = lv_sw_get_style(sw, LV_SW_STYLE_INDIC);
+ int16_t new_val = 0;
- /*If explicitly changed (by slide) don't need to be toggled on release*/
- int16_t threshold = LV_SW_MAX_VALUE / 2;
- if((old_val < threshold && ext->slider.drag_value > threshold) ||
- (old_val > threshold && ext->slider.drag_value < threshold)) {
- ext->changed = 1;
+ lv_coord_t indic_w = w - indic_style->body.padding.left - indic_style->body.padding.right;
+ int32_t range = ext->bar.max_value - ext->bar.min_value;
+ new_val = p.x - (sw->coords.x1 + indic_style->body.padding.left); /*Make the point relative to the indicator*/
+ new_val = (new_val * range) / indic_w;
+ new_val += ext->bar.min_value;
+
+ if(new_val < ext->bar.min_value) new_val = ext->bar.min_value;
+ else if(new_val > ext->bar.max_value) new_val = ext->bar.max_value;
+
+ /*If explicitly changed (by slide) don't need to be toggled on release*/
+ int16_t threshold = LV_SW_MAX_VALUE / 2;
+ if((new_val < threshold && ext->bar.cur_value > threshold) ||
+ (new_val > threshold && ext->bar.cur_value < threshold)) {
+ ext->changed = 1;
+ }
+
+ if(new_val != ext->bar.cur_value) {
+ ext->bar.cur_value = new_val;
+ lv_obj_invalidate(sw);
+ }
+ }
}
} else if(sign == LV_SIGNAL_PRESS_LOST) {
- if(lv_sw_get_state(sw)) {
- lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_on);
- lv_slider_set_value(sw, LV_SW_MAX_VALUE, LV_ANIM_ON);
- if(res != LV_RES_OK) return res;
- } else {
- lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB, ext->style_knob_off);
- lv_slider_set_value(sw, 0, LV_ANIM_ON);
- if(res != LV_RES_OK) return res;
- }
+ if(lv_sw_get_state(sw)) lv_sw_on(sw, LV_ANIM_ON);
+ else lv_sw_off(sw, LV_ANIM_ON);
} else if(sign == LV_SIGNAL_RELEASED) {
/*If not dragged then toggle the switch*/
if(ext->changed == 0) {
@@ -345,7 +474,7 @@ static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
}
/*If the switch was dragged then calculate the new state based on the current position*/
else {
- int16_t v = lv_slider_get_value(sw);
+ int16_t v = lv_bar_get_value(sw);
int32_t state;
if(v > LV_SW_MAX_VALUE / 2) {
lv_sw_on(sw, LV_ANIM_ON);
@@ -361,26 +490,78 @@ static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
char c = *((char *)param);
uint32_t state;
if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
- lv_slider_set_value(sw, LV_SW_MAX_VALUE, true);
+ lv_bar_set_value(sw, LV_SW_MAX_VALUE, LV_ANIM_ON);
state = 1;
res = lv_event_send(sw, LV_EVENT_VALUE_CHANGED, &state);
if(res != LV_RES_OK) return res;
} else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
- lv_slider_set_value(sw, 0, true);
+ lv_bar_set_value(sw, 0, LV_ANIM_ON);
state = 0;
res = lv_event_send(sw, LV_EVENT_VALUE_CHANGED, &state);
if(res != LV_RES_OK) return res;
}
- } else if(sign == LV_SIGNAL_GET_EDITABLE) {
+ }
+ else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
+ const lv_style_t * bg_style = lv_sw_get_style(sw, LV_SW_STYLE_BG);
+ const lv_style_t * indic_style = lv_sw_get_style(sw, LV_SW_STYLE_INDIC);
+ const lv_style_t * knob_on_style = lv_sw_get_style(sw, LV_SW_STYLE_KNOB_OFF);
+ const lv_style_t * knob_off_style = lv_sw_get_style(sw, LV_SW_STYLE_KNOB_ON);
+ /* The smaller size is the knob diameter*/
+ lv_coord_t knob_on_size = LV_MATH_MIN(lv_obj_get_width(sw), lv_obj_get_height(sw)) >> 1;
+ knob_on_size += LV_MATH_MAX(
+ LV_MATH_MAX(knob_on_style->body.padding.left, knob_on_style->body.padding.right),
+ LV_MATH_MAX(knob_on_style->body.padding.bottom, knob_on_style->body.padding.top));
+
+ knob_on_size += knob_on_style->body.shadow.width + knob_on_style->body.shadow.spread;
+ knob_on_size += LV_MATH_MAX(LV_MATH_ABS(knob_on_style->body.shadow.offset.x), LV_MATH_ABS(knob_on_style->body.shadow.offset.y));
+
+ if(ext->img_knob_on) {
+ lv_img_header_t info;
+ lv_res_t res;
+ res = lv_img_decoder_get_info(ext->img_knob_on, &info);
+ if(res == LV_RES_OK) {
+ knob_on_size = LV_MATH_MAX(knob_on_size, info.w / 2);
+ knob_on_size = LV_MATH_MAX(knob_on_size, info.h / 2);
+ } else {
+ LV_LOG_WARN("slider signal (LV_SIGNAL_REFR_EXT_DRAW_PAD): can't get knob image info")
+ }
+ }
+
+ lv_coord_t knob_off_size = LV_MATH_MIN(lv_obj_get_width(sw), lv_obj_get_height(sw)) >> 1;
+ knob_off_size += LV_MATH_MAX(
+ LV_MATH_MAX(knob_off_style->body.padding.left, knob_off_style->body.padding.right),
+ LV_MATH_MAX(knob_off_style->body.padding.bottom, knob_off_style->body.padding.top));
+
+ knob_off_size += knob_off_style->body.shadow.width + knob_off_style->body.shadow.spread;
+ knob_off_size += LV_MATH_MAX(LV_MATH_ABS(knob_off_style->body.shadow.offset.x), LV_MATH_ABS(knob_off_style->body.shadow.offset.y));
+
+ if(ext->img_knob_off) {
+ lv_img_header_t info;
+ lv_res_t res;
+ res = lv_img_decoder_get_info(ext->img_knob_off, &info);
+ if(res == LV_RES_OK) {
+ knob_off_size = LV_MATH_MAX(knob_on_size, info.w / 2);
+ knob_off_size = LV_MATH_MAX(knob_on_size, info.h / 2);
+ } else {
+ LV_LOG_WARN("slider signal (LV_SIGNAL_REFR_EXT_DRAW_PAD): can't get knob image info")
+ }
+ }
+
+ lv_coord_t bg_size = bg_style->body.shadow.width + bg_style->body.shadow.spread;
+ bg_size += LV_MATH_MAX(LV_MATH_ABS(bg_style->body.shadow.offset.x), LV_MATH_ABS(bg_style->body.shadow.offset.y));
+
+ lv_coord_t indic_size = indic_style->body.shadow.width + indic_style->body.shadow.spread;
+ indic_size += LV_MATH_MAX(LV_MATH_ABS(indic_style->body.shadow.offset.x), LV_MATH_ABS(indic_style->body.shadow.offset.y));
+
+ sw->ext_draw_pad = LV_MATH_MAX(sw->ext_draw_pad, knob_on_size);
+ sw->ext_draw_pad = LV_MATH_MAX(sw->ext_draw_pad, knob_off_size);
+ sw->ext_draw_pad = LV_MATH_MAX(sw->ext_draw_pad, bg_size);
+ sw->ext_draw_pad = LV_MATH_MAX(sw->ext_draw_pad, indic_size);
+
+ }
+ else if(sign == LV_SIGNAL_GET_EDITABLE) {
bool * editable = (bool *)param;
*editable = false; /*The ancestor slider is editable the switch is not*/
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_sw";
}
return res;
diff --git a/src/lv_objx/lv_sw.h b/src/lv_objx/lv_sw.h
index f4b44aeb1..da988b0c8 100644
--- a/src/lv_objx/lv_sw.h
+++ b/src/lv_objx/lv_sw.h
@@ -27,7 +27,7 @@ extern "C" {
#endif
#include "../lv_core/lv_obj.h"
-#include "lv_slider.h"
+#include "lv_bar.h"
/*********************
* DEFINES
@@ -40,16 +40,16 @@ extern "C" {
/*Data of switch*/
typedef struct
{
- lv_slider_ext_t slider; /*Ext. of ancestor*/
+ lv_bar_ext_t bar; /*Ext. of ancestor*/
/*New data for this type */
const lv_style_t * style_knob_off; /**< Style of the knob when the switch is OFF*/
const lv_style_t * style_knob_on; /**< Style of the knob when the switch is ON (NULL to use the same as OFF)*/
+ const void * img_knob_off; /**< Image to display when the switch is OFF*/
+ const void * img_knob_on; /**< Image to display when the switch is ON*/
lv_coord_t start_x;
- uint8_t changed : 1; /*Indicates the switch state explicitly changed by drag*/
- uint8_t slided : 1;
-#if LV_USE_ANIMATION
- uint16_t anim_time; /*switch animation time */
-#endif
+ uint8_t changed :1; /*Indicates the switch state explicitly changed by drag*/
+ uint8_t slided :1;
+ uint8_t state :1; /*The current state*/
} lv_sw_ext_t;
/**
@@ -102,12 +102,20 @@ void lv_sw_off(lv_obj_t * sw, lv_anim_enable_t anim);
bool lv_sw_toggle(lv_obj_t * sw, lv_anim_enable_t anim);
/**
- * Set a style of a switch
+ * Set an image to display on the knob of the switch when it's in OFF state
* @param sw pointer to a switch object
- * @param type which style should be set
- * @param style pointer to a style
+ * @param img_src pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
*/
-void lv_sw_set_style(lv_obj_t * sw, lv_sw_style_t type, const lv_style_t * style);
+void lv_sw_set_knob_off_img(lv_obj_t * sw, const void * img_src);
+
+/**
+ * Set an image to display on the knob of the switch when it's in ON state
+ * @param sw pointer to a switch object
+ * @param img_src pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
+ */
+void lv_sw_set_knob_on_img(lv_obj_t * sw, const void * img_src);
/**
* Set the animation time of the switch
@@ -115,7 +123,18 @@ void lv_sw_set_style(lv_obj_t * sw, lv_sw_style_t type, const lv_style_t * style
* @param anim_time animation time
* @return style pointer to a style
*/
-void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time);
+static inline void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time)
+{
+ lv_bar_set_anim_time(sw, anim_time);
+}
+/**
+ * Set a style of a switch
+ * @param sw pointer to a switch object
+ * @param type which style should be set
+ * @param style pointer to a style
+ */
+void lv_sw_set_style(lv_obj_t * sw, lv_sw_style_t type, const lv_style_t * style);
+
/*=====================
* Getter functions
@@ -128,7 +147,32 @@ void lv_sw_set_anim_time(lv_obj_t * sw, uint16_t anim_time);
*/
static inline bool lv_sw_get_state(const lv_obj_t * sw)
{
- return lv_bar_get_value(sw) < LV_SW_MAX_VALUE / 2 ? false : true;
+ lv_sw_ext_t * ext = (lv_sw_ext_t *)lv_obj_get_ext_attr(sw);
+ return ext->state ? true : false;
+}
+/**
+ * Get an image to display on the knob of the switch when it's in OFF state
+ * @param sw pointer to a switch object
+ * @return the image source: pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
+ */
+const void * lv_slider_get_knob_off_img(lv_obj_t * sw, const void * img_src);
+
+/**
+ * Get an image to display on the knob of the switch when it's in ON state
+ * @param sw pointer to a switch object
+ * @return the image source: pointer to an `lv_img_dsc_t` variable or a path to an image
+ * (not an `lv_img` object)
+ */
+const void * lv_slider_get_knob_on_img(lv_obj_t * sw, const void * img_src);
+/**
+ * Get the animation time of the switch
+ * @param sw pointer to a switch object
+ * @return style pointer to a style
+ */
+static inline uint16_t lv_sw_get_anim_time(const lv_obj_t * sw)
+{
+ return lv_bar_get_anim_time(sw);
}
/**
@@ -139,12 +183,7 @@ static inline bool lv_sw_get_state(const lv_obj_t * sw)
*/
const lv_style_t * lv_sw_get_style(const lv_obj_t * sw, lv_sw_style_t type);
-/**
- * Get the animation time of the switch
- * @param sw pointer to a switch object
- * @return style pointer to a style
- */
-uint16_t lv_sw_get_anim_time(const lv_obj_t * sw);
+
/**********************
* MACROS
diff --git a/src/lv_objx/lv_ta.c b/src/lv_objx/lv_ta.c
index 48188dcd1..66e174502 100644
--- a/src/lv_objx/lv_ta.c
+++ b/src/lv_objx/lv_ta.c
@@ -9,6 +9,7 @@
#include "lv_ta.h"
#if LV_USE_TA != 0
#include
+#include "../lv_core/lv_debug.h"
#include "../lv_core/lv_group.h"
#include "../lv_core/lv_refr.h"
#include "../lv_draw/lv_draw.h"
@@ -20,8 +21,9 @@
/*********************
* DEFINES
*********************/
-/*Test configuration*/
+#define LV_OBJX_NAME "lv_ta"
+/*Test configuration*/
#ifndef LV_TA_DEF_CURSOR_BLINK_TIME
#define LV_TA_DEF_CURSOR_BLINK_TIME 400 /*ms*/
#endif
@@ -40,8 +42,8 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_ta_design(lv_obj_t * ta, const lv_area_t * mask, lv_design_mode_t mode);
-static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_ta_design(lv_obj_t * ta, const lv_area_t * clip_area, lv_design_mode_t mode);
+static lv_design_res_t lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param);
static lv_res_t lv_ta_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
#if LV_USE_ANIMATION
@@ -85,7 +87,7 @@ lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor object*/
lv_obj_t * new_ta = lv_page_create(par, copy);
- lv_mem_assert(new_ta);
+ LV_ASSERT_MEM(new_ta);
if(new_ta == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_ta);
@@ -95,8 +97,11 @@ lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy)
/*Allocate the object type specific extended data*/
lv_ta_ext_t * ext = lv_obj_allocate_ext_attr(new_ta, sizeof(lv_ta_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_ta);
+ return NULL;
+ }
ext->cursor.state = 1;
ext->pwd_mode = 0;
@@ -173,7 +178,7 @@ lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy)
if(copy_ext->pwd_tmp) {
uint16_t len = lv_mem_get_size(copy_ext->pwd_tmp);
ext->pwd_tmp = lv_mem_alloc(len);
- lv_mem_assert(ext->pwd_tmp);
+ LV_ASSERT_MEM(ext->pwd_tmp);
if(ext->pwd_tmp == NULL) return NULL;
memcpy(ext->pwd_tmp, copy_ext->pwd_tmp, len);
@@ -224,6 +229,8 @@ lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_ta_add_char(lv_obj_t * ta, uint32_t c)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
uint32_t letter_buf[2];
@@ -267,7 +274,7 @@ void lv_ta_add_char(lv_obj_t * ta, uint32_t c)
if(ext->pwd_mode != 0) {
ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(ext->pwd_tmp) + 2); /*+2: the new char + \0 */
- lv_mem_assert(ext->pwd_tmp);
+ LV_ASSERT_MEM(ext->pwd_tmp);
if(ext->pwd_tmp == NULL) return;
lv_txt_ins(ext->pwd_tmp, ext->cursor.pos, (const char *)letter_buf);
@@ -312,6 +319,9 @@ void lv_ta_add_char(lv_obj_t * ta, uint32_t c)
*/
void lv_ta_add_text(lv_obj_t * ta, const char * txt)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+ LV_ASSERT_NULL(txt);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
ta_insert_replace = NULL;
@@ -348,7 +358,7 @@ void lv_ta_add_text(lv_obj_t * ta, const char * txt)
if(ext->pwd_mode != 0) {
ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(ext->pwd_tmp) + strlen(txt) + 1);
- lv_mem_assert(ext->pwd_tmp);
+ LV_ASSERT_MEM(ext->pwd_tmp);
if(ext->pwd_tmp == NULL) return;
lv_txt_ins(ext->pwd_tmp, ext->cursor.pos, txt);
@@ -391,6 +401,8 @@ void lv_ta_add_text(lv_obj_t * ta, const char * txt)
*/
void lv_ta_del_char(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
uint16_t cur_pos = ext->cursor.pos;
@@ -427,7 +439,7 @@ void lv_ta_del_char(lv_obj_t * ta)
lv_txt_cut(ext->pwd_tmp, ext->cursor.pos - 1, lv_txt_encoded_size(&label_txt[byte_pos]));
ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(ext->pwd_tmp) + 1);
- lv_mem_assert(ext->pwd_tmp);
+ LV_ASSERT_MEM(ext->pwd_tmp);
if(ext->pwd_tmp == NULL) return;
}
@@ -445,6 +457,8 @@ void lv_ta_del_char(lv_obj_t * ta)
*/
void lv_ta_del_char_forward(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
uint16_t cp = lv_ta_get_cursor_pos(ta);
lv_ta_set_cursor_pos(ta, cp + 1);
if(cp != lv_ta_get_cursor_pos(ta)) lv_ta_del_char(ta);
@@ -461,6 +475,9 @@ void lv_ta_del_char_forward(lv_obj_t * ta)
*/
void lv_ta_set_text(lv_obj_t * ta, const char * txt)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+ LV_ASSERT_NULL(txt);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
/*Clear the existing selection*/
@@ -489,7 +506,7 @@ void lv_ta_set_text(lv_obj_t * ta, const char * txt)
if(ext->pwd_mode != 0) {
ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(txt) + 1);
- lv_mem_assert(ext->pwd_tmp);
+ LV_ASSERT_MEM(ext->pwd_tmp);
if(ext->pwd_tmp == NULL) return;
strcpy(ext->pwd_tmp, txt);
@@ -526,6 +543,9 @@ void lv_ta_set_text(lv_obj_t * ta, const char * txt)
*/
void lv_ta_set_placeholder_text(lv_obj_t * ta, const char * txt)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+ LV_ASSERT_NULL(txt);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
/*Create the placeholder label only when it is needed*/
@@ -541,6 +561,9 @@ void lv_ta_set_placeholder_text(lv_obj_t * ta, const char * txt)
lv_label_set_text(ext->placeholder, txt);
+ /*Refresh the placeholder's align*/
+ lv_ta_set_text_align(ta, lv_label_get_align(ext->label));
+
placeholder_update(ta);
}
@@ -553,6 +576,8 @@ void lv_ta_set_placeholder_text(lv_obj_t * ta, const char * txt)
*/
void lv_ta_set_cursor_pos(lv_obj_t * ta, int16_t pos)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
if(ext->cursor.pos == pos) return;
@@ -629,6 +654,8 @@ void lv_ta_set_cursor_pos(lv_obj_t * ta, int16_t pos)
*/
void lv_ta_set_cursor_type(lv_obj_t * ta, lv_cursor_type_t cur_type)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
if(ext->cursor.type == cur_type) return;
@@ -644,6 +671,8 @@ void lv_ta_set_cursor_type(lv_obj_t * ta, lv_cursor_type_t cur_type)
*/
void lv_ta_set_cursor_click_pos(lv_obj_t * ta, bool en)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
ext->cursor.click_pos = en ? 1 : 0;
}
@@ -655,15 +684,17 @@ void lv_ta_set_cursor_click_pos(lv_obj_t * ta, bool en)
*/
void lv_ta_set_pwd_mode(lv_obj_t * ta, bool en)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
if(ext->pwd_mode == en) return;
/*Pwd mode is now enabled*/
if(ext->pwd_mode == 0 && en != false) {
char * txt = lv_label_get_text(ext->label);
- uint16_t len = strlen(txt);
+ size_t len = strlen(txt);
ext->pwd_tmp = lv_mem_alloc(len + 1);
- lv_mem_assert(ext->pwd_tmp);
+ LV_ASSERT_MEM(ext->pwd_tmp);
if(ext->pwd_tmp == NULL) return;
strcpy(ext->pwd_tmp, txt);
@@ -699,6 +730,8 @@ void lv_ta_set_pwd_mode(lv_obj_t * ta, bool en)
*/
void lv_ta_set_one_line(lv_obj_t * ta, bool en)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
if(ext->one_line == en) return;
@@ -740,16 +773,20 @@ void lv_ta_set_one_line(lv_obj_t * ta, bool en)
*/
void lv_ta_set_text_align(lv_obj_t * ta, lv_label_align_t align)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
lv_obj_t * label = lv_ta_get_label(ta);
if(!ext->one_line) {
lv_label_set_align(label, align);
+ if(ext->placeholder) lv_label_set_align(ext->placeholder, align);
} else {
/*Normal left align. Just let the text expand*/
if(align == LV_LABEL_ALIGN_LEFT) {
lv_label_set_long_mode(label, LV_LABEL_LONG_EXPAND);
lv_page_set_scrl_fit2(ta, LV_FIT_TIGHT, LV_FIT_FLOOD);
lv_label_set_align(label, align);
+ if(ext->placeholder) lv_label_set_align(ext->placeholder, align);
}
/*Else use fix label width equal to the Text area width*/
@@ -757,6 +794,7 @@ void lv_ta_set_text_align(lv_obj_t * ta, lv_label_align_t align)
lv_label_set_long_mode(label, LV_LABEL_LONG_CROP);
lv_page_set_scrl_fit2(ta, LV_FIT_FLOOD, LV_FIT_FLOOD);
lv_label_set_align(label, align);
+ if(ext->placeholder) lv_label_set_align(ext->placeholder, align);
lv_obj_set_width(label, lv_page_get_fit_width(ta));
}
@@ -772,6 +810,8 @@ void lv_ta_set_text_align(lv_obj_t * ta, lv_label_align_t align)
*/
void lv_ta_set_accepted_chars(lv_obj_t * ta, const char * list)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
ext->accapted_chars = list;
@@ -784,6 +824,8 @@ void lv_ta_set_accepted_chars(lv_obj_t * ta, const char * list)
*/
void lv_ta_set_max_length(lv_obj_t * ta, uint16_t num)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
ext->max_length = num;
@@ -799,6 +841,8 @@ void lv_ta_set_max_length(lv_obj_t * ta, uint16_t num)
*/
void lv_ta_set_insert_replace(lv_obj_t * ta, const char * txt)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
(void)ta; /*Unused*/
ta_insert_replace = txt;
}
@@ -811,6 +855,8 @@ void lv_ta_set_insert_replace(lv_obj_t * ta, const char * txt)
*/
void lv_ta_set_style(lv_obj_t * ta, lv_ta_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
switch(type) {
@@ -835,6 +881,8 @@ void lv_ta_set_style(lv_obj_t * ta, lv_ta_style_t type, const lv_style_t * style
*/
void lv_ta_set_text_sel(lv_obj_t * ta, bool en)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
#if LV_LABEL_TEXT_SEL
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
@@ -854,6 +902,8 @@ void lv_ta_set_text_sel(lv_obj_t * ta, bool en)
*/
void lv_ta_set_pwd_show_time(lv_obj_t * ta, uint16_t time)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION == 0
time = 0;
#endif
@@ -869,6 +919,8 @@ void lv_ta_set_pwd_show_time(lv_obj_t * ta, uint16_t time)
*/
void lv_ta_set_cursor_blink_time(lv_obj_t * ta, uint16_t time)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION == 0
time = 0;
#endif
@@ -912,6 +964,8 @@ void lv_ta_set_cursor_blink_time(lv_obj_t * ta, uint16_t time)
*/
const char * lv_ta_get_text(const lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
const char * txt;
@@ -931,6 +985,8 @@ const char * lv_ta_get_text(const lv_obj_t * ta)
*/
const char * lv_ta_get_placeholder_text(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
const char * txt = NULL;
@@ -947,6 +1003,8 @@ const char * lv_ta_get_placeholder_text(lv_obj_t * ta)
*/
lv_obj_t * lv_ta_get_label(const lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->label;
}
@@ -958,6 +1016,8 @@ lv_obj_t * lv_ta_get_label(const lv_obj_t * ta)
*/
uint16_t lv_ta_get_cursor_pos(const lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->cursor.pos;
}
@@ -969,6 +1029,8 @@ uint16_t lv_ta_get_cursor_pos(const lv_obj_t * ta)
*/
lv_cursor_type_t lv_ta_get_cursor_type(const lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->cursor.type;
}
@@ -980,6 +1042,8 @@ lv_cursor_type_t lv_ta_get_cursor_type(const lv_obj_t * ta)
*/
bool lv_ta_get_cursor_click_pos(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->cursor.click_pos ? true : false;
}
@@ -991,6 +1055,8 @@ bool lv_ta_get_cursor_click_pos(lv_obj_t * ta)
*/
bool lv_ta_get_pwd_mode(const lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->pwd_mode == 0 ? false : true;
}
@@ -1002,6 +1068,8 @@ bool lv_ta_get_pwd_mode(const lv_obj_t * ta)
*/
bool lv_ta_get_one_line(const lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->one_line == 0 ? false : true;
}
@@ -1013,6 +1081,8 @@ bool lv_ta_get_one_line(const lv_obj_t * ta)
*/
const char * lv_ta_get_accepted_chars(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->accapted_chars;
@@ -1025,6 +1095,8 @@ const char * lv_ta_get_accepted_chars(lv_obj_t * ta)
*/
uint16_t lv_ta_get_max_length(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->max_length;
}
@@ -1037,6 +1109,8 @@ uint16_t lv_ta_get_max_length(lv_obj_t * ta)
*/
const lv_style_t * lv_ta_get_style(const lv_obj_t * ta, lv_ta_style_t type)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
@@ -1061,11 +1135,13 @@ const lv_style_t * lv_ta_get_style(const lv_obj_t * ta, lv_ta_style_t type)
*/
bool lv_ta_text_is_selected(const lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
#if LV_LABEL_TEXT_SEL
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if((lv_label_get_text_sel_start(ext->label) == LV_LABEL_TEXT_SEL_OFF ||
- lv_label_get_text_sel_end(ext->label) == LV_LABEL_TEXT_SEL_OFF)) {
+ if((lv_label_get_text_sel_start(ext->label) == LV_DRAW_LABEL_NO_TXT_SEL ||
+ lv_label_get_text_sel_end(ext->label) == LV_DRAW_LABEL_NO_TXT_SEL)) {
return true;
} else {
return false;
@@ -1083,6 +1159,8 @@ bool lv_ta_text_is_selected(const lv_obj_t * ta)
*/
bool lv_ta_get_text_sel_en(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
#if LV_LABEL_TEXT_SEL
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->text_sel_en;
@@ -1099,6 +1177,8 @@ bool lv_ta_get_text_sel_en(lv_obj_t * ta)
*/
uint16_t lv_ta_get_pwd_show_time(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->pwd_show_time;
@@ -1111,6 +1191,8 @@ uint16_t lv_ta_get_pwd_show_time(lv_obj_t * ta)
*/
uint16_t lv_ta_get_cursor_blink_time(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
return ext->cursor.blink_time;
}
@@ -1125,13 +1207,15 @@ uint16_t lv_ta_get_cursor_blink_time(lv_obj_t * ta)
*/
void lv_ta_clear_selection(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
#if LV_LABEL_TEXT_SEL
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
- if(lv_label_get_text_sel_start(ext->label) != LV_LABEL_TEXT_SEL_OFF ||
- lv_label_get_text_sel_end(ext->label) != LV_LABEL_TEXT_SEL_OFF) {
- lv_label_set_text_sel_start(ext->label, LV_LABEL_TEXT_SEL_OFF);
- lv_label_set_text_sel_end(ext->label, LV_LABEL_TEXT_SEL_OFF);
+ if(lv_label_get_text_sel_start(ext->label) != LV_DRAW_LABEL_NO_TXT_SEL ||
+ lv_label_get_text_sel_end(ext->label) != LV_DRAW_LABEL_NO_TXT_SEL) {
+ lv_label_set_text_sel_start(ext->label, LV_DRAW_LABEL_NO_TXT_SEL);
+ lv_label_set_text_sel_end(ext->label, LV_DRAW_LABEL_NO_TXT_SEL);
}
#else
(void)ta; /*Unused*/
@@ -1144,6 +1228,8 @@ void lv_ta_clear_selection(lv_obj_t * ta)
*/
void lv_ta_cursor_right(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
uint16_t cp = lv_ta_get_cursor_pos(ta);
cp++;
lv_ta_set_cursor_pos(ta, cp);
@@ -1155,6 +1241,8 @@ void lv_ta_cursor_right(lv_obj_t * ta)
*/
void lv_ta_cursor_left(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
uint16_t cp = lv_ta_get_cursor_pos(ta);
if(cp > 0) {
cp--;
@@ -1168,6 +1256,8 @@ void lv_ta_cursor_left(lv_obj_t * ta)
*/
void lv_ta_cursor_down(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
lv_point_t pos;
@@ -1198,6 +1288,8 @@ void lv_ta_cursor_down(lv_obj_t * ta)
*/
void lv_ta_cursor_up(lv_obj_t * ta)
{
+ LV_ASSERT_OBJ(ta, LV_OBJX_NAME);
+
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
lv_point_t pos;
@@ -1225,48 +1317,48 @@ void lv_ta_cursor_up(lv_obj_t * ta)
/**
* Handle the drawing related tasks of the text areas
* @param ta pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW_MAIN: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_ta_design(lv_obj_t * ta, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_ta_design(lv_obj_t * ta, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
/*Return false if the object is not covers the mask_p area*/
- return ancestor_design(ta, mask, mode);
+ return ancestor_design(ta, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_MAIN) {
/*Draw the object*/
- ancestor_design(ta, mask, mode);
+ ancestor_design(ta, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_POST) {
- ancestor_design(ta, mask, mode);
+ ancestor_design(ta, clip_area, mode);
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
* An extended scrollable design of the page. Calls the normal design function and draws a cursor.
* @param scrl pointer to the scrollable part of the Text area
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW_MAIN: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
* @return return true/false, depends on 'mode'
*/
-static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * clip_area, lv_design_mode_t mode)
{
if(mode == LV_DESIGN_COVER_CHK) {
/*Return false if the object is not covers the mask_p area*/
- return scrl_design(scrl, mask, mode);
+ return scrl_design(scrl, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_MAIN) {
/*Draw the object*/
- scrl_design(scrl, mask, mode);
+ scrl_design(scrl, clip_area, mode);
} else if(mode == LV_DESIGN_DRAW_POST) {
- scrl_design(scrl, mask, mode);
+ scrl_design(scrl, clip_area, mode);
/*Draw the cursor*/
lv_obj_t * ta = lv_obj_get_parent(scrl);
@@ -1293,28 +1385,27 @@ static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * mask, lv_
lv_opa_t opa_scale = lv_obj_get_opa_scale(ta);
if(ext->cursor.type == LV_CURSOR_LINE) {
- lv_draw_rect(&cur_area, mask, &cur_style, opa_scale);
+ lv_draw_rect(&cur_area, clip_area, &cur_style, opa_scale);
} else if(ext->cursor.type == LV_CURSOR_BLOCK) {
- lv_draw_rect(&cur_area, mask, &cur_style, opa_scale);
+ lv_draw_rect(&cur_area, clip_area, &cur_style, opa_scale);
char letter_buf[8] = {0};
memcpy(letter_buf, &txt[ext->cursor.txt_byte_pos], lv_txt_encoded_size(&txt[ext->cursor.txt_byte_pos]));
cur_area.x1 += cur_style.body.padding.left;
cur_area.y1 += cur_style.body.padding.top;
- lv_draw_label(&cur_area, mask, &cur_style, opa_scale, letter_buf, LV_TXT_FLAG_NONE, 0,
- LV_LABEL_TEXT_SEL_OFF, LV_LABEL_TEXT_SEL_OFF, NULL);
+ lv_draw_label(&cur_area, clip_area, &cur_style, opa_scale, letter_buf, LV_TXT_FLAG_NONE, NULL, NULL, NULL, lv_obj_get_base_dir(ta));
} else if(ext->cursor.type == LV_CURSOR_OUTLINE) {
cur_style.body.opa = LV_OPA_TRANSP;
if(cur_style.body.border.width == 0) cur_style.body.border.width = 1; /*Be sure the border will be drawn*/
- lv_draw_rect(&cur_area, mask, &cur_style, opa_scale);
+ lv_draw_rect(&cur_area, clip_area, &cur_style, opa_scale);
} else if(ext->cursor.type == LV_CURSOR_UNDERLINE) {
- lv_draw_rect(&cur_area, mask, &cur_style, opa_scale);
+ lv_draw_rect(&cur_area, clip_area, &cur_style, opa_scale);
}
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -1331,6 +1422,7 @@ static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(ta, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
if(sign == LV_SIGNAL_CLEANUP) {
@@ -1346,6 +1438,7 @@ static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
/*In one line mode refresh the Text Area height because 'vpad' can modify it*/
const lv_style_t * style_label = lv_obj_get_style(ext->label);
lv_coord_t font_h = lv_font_get_line_height(style_label->text.font);
+ lv_obj_set_height(ext->label, font_h);
lv_obj_set_height(ta, font_h + style_ta->body.padding.top + style_ta->body.padding.bottom +
style_scrl->body.padding.top + style_scrl->body.padding.bottom);
} else {
@@ -1411,13 +1504,6 @@ static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
} else if(sign == LV_SIGNAL_GET_EDITABLE) {
bool * editable = (bool *)param;
*editable = true;
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_ta";
} else if(sign == LV_SIGNAL_DEFOCUS) {
lv_cursor_type_t cur_type;
cur_type = lv_ta_get_cursor_type(ta);
@@ -1461,6 +1547,7 @@ static lv_res_t lv_ta_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void
/* Include the ancient signal function */
res = scrl_signal(scrl, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
lv_obj_t * ta = lv_obj_get_parent(scrl);
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
@@ -1704,6 +1791,11 @@ static void refr_cursor_area(lv_obj_t * ta)
cur_area.x2 = letter_pos.x + cur_style.body.padding.right + letter_w;
cur_area.y2 = letter_pos.y + cur_style.body.padding.bottom + letter_h + (cur_style.line.width >> 1) +
(cur_style.line.width & 0x1);
+ } else if(ext->cursor.type == LV_CURSOR_NONE) {
+ cur_area.x1 = letter_pos.x;
+ cur_area.y1 = letter_pos.y;
+ lv_area_set_width(&cur_area, 0);
+ lv_area_set_height(&cur_area, 0);
}
/*Save the new area*/
@@ -1771,69 +1863,69 @@ static void update_cursor_position_on_click(lv_obj_t * ta, lv_signal_t sign, lv_
lv_indev_get_vect(click_source, &vect_act);
if(point_act.x < 0 || point_act.y < 0) return; /*Ignore event from keypad*/
- lv_point_t relative_position;
- relative_position.x = point_act.x - label_coords.x1;
- relative_position.y = point_act.y - label_coords.y1;
+ lv_point_t rel_pos;
+ rel_pos.x = point_act.x - label_coords.x1;
+ rel_pos.y = point_act.y - label_coords.y1;
lv_coord_t label_width = lv_obj_get_width(ext->label);
- uint16_t index_of_char_at_position;
+ uint16_t char_id_at_click;
#if LV_LABEL_TEXT_SEL
lv_label_ext_t * ext_label = lv_obj_get_ext_attr(ext->label);
bool click_outside_label;
/*Check if the click happened on the left side of the area outside the label*/
- if(relative_position.x < 0) {
- index_of_char_at_position = 0;
+ if(rel_pos.x < 0) {
+ char_id_at_click = 0;
click_outside_label = true;
}
/*Check if the click happened on the right side of the area outside the label*/
- else if(relative_position.x >= label_width) {
- index_of_char_at_position = LV_TA_CURSOR_LAST;
+ else if(rel_pos.x >= label_width) {
+ char_id_at_click = LV_TA_CURSOR_LAST;
click_outside_label = true;
} else {
- index_of_char_at_position = lv_label_get_letter_on(ext->label, &relative_position);
- click_outside_label = !lv_label_is_char_under_pos(ext->label, &relative_position);
+ char_id_at_click = lv_label_get_letter_on(ext->label, &rel_pos);
+ click_outside_label = !lv_label_is_char_under_pos(ext->label, &rel_pos);
}
if(ext->text_sel_en) {
if(!ext->text_sel_in_prog && !click_outside_label && sign == LV_SIGNAL_PRESSED) {
/*Input device just went down. Store the selection start position*/
- ext->tmp_sel_start = index_of_char_at_position;
- ext->tmp_sel_end = LV_LABEL_TEXT_SEL_OFF;
+ ext->sel.start = char_id_at_click;
+ ext->sel.end = LV_LABEL_TEXT_SEL_OFF;
ext->text_sel_in_prog = 1;
lv_obj_set_drag(lv_page_get_scrl(ta), false);
} else if(ext->text_sel_in_prog && sign == LV_SIGNAL_PRESSING) {
/*Input device may be moving. Store the end position */
- ext->tmp_sel_end = index_of_char_at_position;
+ ext->sel.end = char_id_at_click;
} else if(ext->text_sel_in_prog && (sign == LV_SIGNAL_PRESS_LOST || sign == LV_SIGNAL_RELEASED)) {
/*Input device is released. Check if anything was selected.*/
lv_obj_set_drag(lv_page_get_scrl(ta), true);
}
}
- if(ext->text_sel_in_prog || sign == LV_SIGNAL_PRESSED) lv_ta_set_cursor_pos(ta, index_of_char_at_position);
+ if(ext->text_sel_in_prog || sign == LV_SIGNAL_PRESSED) lv_ta_set_cursor_pos(ta, char_id_at_click);
if(ext->text_sel_in_prog) {
/*If the selected area has changed then update the real values and*/
- /*invalidate the text area.*/
- if(ext->tmp_sel_start > ext->tmp_sel_end) {
- if(ext_label->txt_sel_start != ext->tmp_sel_end || ext_label->txt_sel_end != ext->tmp_sel_start) {
- ext_label->txt_sel_start = ext->tmp_sel_end;
- ext_label->txt_sel_end = ext->tmp_sel_start;
+ /*Invalidate the text area.*/
+ if(ext->sel.start > ext->sel.end) {
+ if(ext_label->txt_sel.start != ext->sel.end || ext_label->txt_sel.end != ext->sel.start) {
+ ext_label->txt_sel.start = ext->sel.end;
+ ext_label->txt_sel.end = ext->sel.start;
lv_obj_invalidate(ta);
}
- } else if(ext->tmp_sel_start < ext->tmp_sel_end) {
- if(ext_label->txt_sel_start != ext->tmp_sel_start || ext_label->txt_sel_end != ext->tmp_sel_end) {
- ext_label->txt_sel_start = ext->tmp_sel_start;
- ext_label->txt_sel_end = ext->tmp_sel_end;
+ } else if(ext->sel.start < ext->sel.end) {
+ if(ext_label->txt_sel.start != ext->sel.start || ext_label->txt_sel.end != ext->sel.end) {
+ ext_label->txt_sel.start = ext->sel.start;
+ ext_label->txt_sel.end = ext->sel.end;
lv_obj_invalidate(ta);
}
} else {
- if(ext_label->txt_sel_start != LV_LABEL_TEXT_SEL_OFF || ext_label->txt_sel_end != LV_LABEL_TEXT_SEL_OFF) {
- ext_label->txt_sel_start = LV_LABEL_TEXT_SEL_OFF;
- ext_label->txt_sel_end = LV_LABEL_TEXT_SEL_OFF;
+ if(ext_label->txt_sel.start != LV_DRAW_LABEL_NO_TXT_SEL || ext_label->txt_sel.end != LV_DRAW_LABEL_NO_TXT_SEL) {
+ ext_label->txt_sel.start = LV_DRAW_LABEL_NO_TXT_SEL;
+ ext_label->txt_sel.end = LV_DRAW_LABEL_NO_TXT_SEL;
lv_obj_invalidate(ta);
}
}
@@ -1844,17 +1936,17 @@ static void update_cursor_position_on_click(lv_obj_t * ta, lv_signal_t sign, lv_
}
#else
/*Check if the click happened on the left side of the area outside the label*/
- if(relative_position.x < 0) {
- index_of_char_at_position = 0;
+ if(rel_pos.x < 0) {
+ char_id_at_click = 0;
}
/*Check if the click happened on the right side of the area outside the label*/
- else if(relative_position.x >= label_width) {
- index_of_char_at_position = LV_TA_CURSOR_LAST;
+ else if(rel_pos.x >= label_width) {
+ char_id_at_click = LV_TA_CURSOR_LAST;
} else {
- index_of_char_at_position = lv_label_get_letter_on(ext->label, &relative_position);
+ char_id_at_click = lv_label_get_letter_on(ext->label, &rel_pos);
}
- if(sign == LV_SIGNAL_PRESSED) lv_ta_set_cursor_pos(ta, index_of_char_at_position);
+ if(sign == LV_SIGNAL_PRESSED) lv_ta_set_cursor_pos(ta, char_id_at_click);
#endif
}
diff --git a/src/lv_objx/lv_ta.h b/src/lv_objx/lv_ta.h
index 4d3a4a4e3..afbb94bc2 100644
--- a/src/lv_objx/lv_ta.h
+++ b/src/lv_objx/lv_ta.h
@@ -39,6 +39,8 @@ extern "C" {
*********************/
#define LV_TA_CURSOR_LAST (0x7FFF) /*Put the cursor after the last character*/
+LV_EXPORT_CONST_INT(LV_TA_CURSOR_LAST);
+
/**********************
* TYPEDEFS
**********************/
@@ -80,8 +82,7 @@ typedef struct
uint8_t click_pos : 1; /*1: Enable positioning the cursor by clicking the text area*/
} cursor;
#if LV_LABEL_TEXT_SEL
- uint16_t tmp_sel_start; /*Temporary value*/
- uint16_t tmp_sel_end; /*Temporary value*/
+ lv_draw_label_txt_sel_t sel; /*Temporary values for text selection*/
uint8_t text_sel_in_prog : 1; /*User is in process of selecting */
uint8_t text_sel_en : 1; /*Text can be selected on this text area*/
#endif
diff --git a/src/lv_objx/lv_table.c b/src/lv_objx/lv_table.c
index ab0e47879..a7ff1ffef 100644
--- a/src/lv_objx/lv_table.c
+++ b/src/lv_objx/lv_table.c
@@ -9,6 +9,7 @@
#include "lv_table.h"
#if LV_USE_TABLE != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_misc/lv_txt.h"
#include "../lv_misc/lv_math.h"
#include "../lv_draw/lv_draw_label.h"
@@ -17,6 +18,7 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_table"
/**********************
* TYPEDEFS
@@ -25,7 +27,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
-static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv_design_mode_t mode);
+static lv_design_res_t lv_table_design(lv_obj_t * table, const lv_area_t * clip_area, lv_design_mode_t mode);
static lv_res_t lv_table_signal(lv_obj_t * table, lv_signal_t sign, void * param);
static lv_coord_t get_row_height(lv_obj_t * table, uint16_t row_id);
static void refr_size(lv_obj_t * table);
@@ -56,13 +58,17 @@ lv_obj_t * lv_table_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of table*/
lv_obj_t * new_table = lv_obj_create(par, copy);
- lv_mem_assert(new_table);
+ LV_ASSERT_MEM(new_table);
if(new_table == NULL) return NULL;
/*Allocate the table type specific extended data*/
lv_table_ext_t * ext = lv_obj_allocate_ext_attr(new_table, sizeof(lv_table_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_table);
+ return NULL;
+ }
+
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_table);
if(ancestor_scrl_design == NULL) ancestor_scrl_design = lv_obj_get_design_cb(new_table);
@@ -132,6 +138,9 @@ lv_obj_t * lv_table_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const char * txt)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+ LV_ASSERT_NULL(txt);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_set_cell_value: invalid row or column");
@@ -146,14 +155,23 @@ void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const
}
/*Initialize the format byte*/
else {
- format.s.align = LV_LABEL_ALIGN_LEFT;
+ lv_bidi_dir_t base_dir = lv_obj_get_base_dir(table);
+ if(base_dir == LV_BIDI_DIR_LTR) format.s.align = LV_LABEL_ALIGN_LEFT;
+ else if(base_dir == LV_BIDI_DIR_RTL) format.s.align = LV_LABEL_ALIGN_RIGHT;
+ else if(base_dir == LV_BIDI_DIR_AUTO)
+#if LV_USE_BIDI
+ format.s.align = lv_bidi_detect_base_dir(txt);
+#else
+ format.s.align = LV_LABEL_ALIGN_LEFT;
+#endif
format.s.right_merge = 0;
format.s.type = 0;
format.s.crop = 0;
}
ext->cell_data[cell] = lv_mem_realloc(ext->cell_data[cell], strlen(txt) + 2); /*+1: trailing '\0; +1: format byte*/
- strcpy(ext->cell_data[cell] + 1, txt); /*Leave the format byte*/
+ strcpy(ext->cell_data[cell] + 1, txt); /*+1 to skip the format byte*/
+
ext->cell_data[cell][0] = format.format_byte;
refr_size(table);
}
@@ -165,6 +183,8 @@ void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const
*/
void lv_table_set_row_cnt(lv_obj_t * table, uint16_t row_cnt)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
uint16_t old_row_cnt = ext->row_cnt;
ext->row_cnt = row_cnt;
@@ -193,6 +213,7 @@ void lv_table_set_row_cnt(lv_obj_t * table, uint16_t row_cnt)
*/
void lv_table_set_col_cnt(lv_obj_t * table, uint16_t col_cnt)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
if(col_cnt >= LV_TABLE_COL_MAX) {
LV_LOG_WARN("lv_table_set_col_cnt: too many columns. Must be < LV_TABLE_COL_MAX.");
@@ -227,6 +248,8 @@ void lv_table_set_col_cnt(lv_obj_t * table, uint16_t col_cnt)
*/
void lv_table_set_col_width(lv_obj_t * table, uint16_t col_id, lv_coord_t w)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
if(col_id >= LV_TABLE_COL_MAX) {
LV_LOG_WARN("lv_table_set_col_width: too big 'col_id'. Must be < LV_TABLE_COL_MAX.");
return;
@@ -246,6 +269,8 @@ void lv_table_set_col_width(lv_obj_t * table, uint16_t col_id, lv_coord_t w)
*/
void lv_table_set_cell_align(lv_obj_t * table, uint16_t row, uint16_t col, lv_label_align_t align)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_set_cell_align: invalid row or column");
@@ -274,6 +299,8 @@ void lv_table_set_cell_align(lv_obj_t * table, uint16_t row, uint16_t col, lv_la
*/
void lv_table_set_cell_type(lv_obj_t * table, uint16_t row, uint16_t col, uint8_t type)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_set_cell_type: invalid row or column");
@@ -305,6 +332,8 @@ void lv_table_set_cell_type(lv_obj_t * table, uint16_t row, uint16_t col, uint8_
*/
void lv_table_set_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col, bool crop)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_set_cell_crop: invalid row or column");
@@ -333,6 +362,8 @@ void lv_table_set_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col, bool c
*/
void lv_table_set_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col, bool en)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_set_cell_merge_right: invalid row or column");
@@ -362,6 +393,8 @@ void lv_table_set_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col,
*/
void lv_table_set_style(lv_obj_t * table, lv_table_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
switch(type) {
@@ -401,6 +434,8 @@ void lv_table_set_style(lv_obj_t * table, lv_table_style_t type, const lv_style_
*/
const char * lv_table_get_cell_value(lv_obj_t * table, uint16_t row, uint16_t col)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_set_cell_value: invalid row or column");
@@ -420,6 +455,8 @@ const char * lv_table_get_cell_value(lv_obj_t * table, uint16_t row, uint16_t co
*/
uint16_t lv_table_get_row_cnt(lv_obj_t * table)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
return ext->row_cnt;
}
@@ -431,6 +468,8 @@ uint16_t lv_table_get_row_cnt(lv_obj_t * table)
*/
uint16_t lv_table_get_col_cnt(lv_obj_t * table)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
return ext->col_cnt;
}
@@ -443,6 +482,8 @@ uint16_t lv_table_get_col_cnt(lv_obj_t * table)
*/
lv_coord_t lv_table_get_col_width(lv_obj_t * table, uint16_t col_id)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
if(col_id >= LV_TABLE_COL_MAX) {
LV_LOG_WARN("lv_table_set_col_width: too big 'col_id'. Must be < LV_TABLE_COL_MAX.");
return 0;
@@ -462,6 +503,8 @@ lv_coord_t lv_table_get_col_width(lv_obj_t * table, uint16_t col_id)
*/
lv_label_align_t lv_table_get_cell_align(lv_obj_t * table, uint16_t row, uint16_t col)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_set_cell_align: invalid row or column");
@@ -487,6 +530,8 @@ lv_label_align_t lv_table_get_cell_align(lv_obj_t * table, uint16_t row, uint16_
*/
lv_label_align_t lv_table_get_cell_type(lv_obj_t * table, uint16_t row, uint16_t col)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_get_cell_type: invalid row or column");
@@ -512,6 +557,8 @@ lv_label_align_t lv_table_get_cell_type(lv_obj_t * table, uint16_t row, uint16_t
*/
lv_label_align_t lv_table_get_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_get_cell_crop: invalid row or column");
@@ -537,6 +584,8 @@ lv_label_align_t lv_table_get_cell_crop(lv_obj_t * table, uint16_t row, uint16_t
*/
bool lv_table_get_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
if(row >= ext->row_cnt || col >= ext->col_cnt) {
LV_LOG_WARN("lv_table_get_cell_merge_right: invalid row or column");
@@ -562,6 +611,8 @@ bool lv_table_get_cell_merge_right(lv_obj_t * table, uint16_t row, uint16_t col)
*/
const lv_style_t * lv_table_get_style(const lv_obj_t * table, lv_table_style_t type)
{
+ LV_ASSERT_OBJ(table, LV_OBJX_NAME);
+
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
const lv_style_t * style = NULL;
@@ -584,22 +635,22 @@ const lv_style_t * lv_table_get_style(const lv_obj_t * table, lv_table_style_t t
/**
* Handle the drawing related tasks of the tables
* @param table pointer to an object
- * @param mask the object will be drawn only in this area
+ * @param clip_area the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
* LV_DESIGN_DRAW: draw the object (always return 'true')
* LV_DESIGN_DRAW_POST: drawing after every children are drawn
- * @param return true/false, depends on 'mode'
+ * @param return an element of `lv_design_res_t`
*/
-static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv_design_mode_t mode)
+static lv_design_res_t lv_table_design(lv_obj_t * table, const lv_area_t * clip_area, lv_design_mode_t mode)
{
/*Return false if the object is not covers the mask_p area*/
if(mode == LV_DESIGN_COVER_CHK) {
- return false;
+ return LV_DESIGN_RES_NOT_COVER;
}
/*Draw the object*/
else if(mode == LV_DESIGN_DRAW_MAIN) {
- ancestor_scrl_design(table, mask, mode);
+ ancestor_scrl_design(table, clip_area, mode);
lv_table_ext_t * ext = lv_obj_get_ext_attr(table);
const lv_style_t * bg_style = lv_obj_get_style(table);
@@ -654,7 +705,7 @@ static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv_design_
}
}
- lv_draw_rect(&cell_area, mask, cell_style, opa_scale);
+ lv_draw_rect(&cell_area, clip_area, cell_style, opa_scale);
if(ext->cell_data[cell]) {
@@ -688,10 +739,10 @@ static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv_design_
lv_area_t label_mask;
bool label_mask_ok;
- label_mask_ok = lv_area_intersect(&label_mask, mask, &cell_area);
+ label_mask_ok = lv_area_intersect(&label_mask, clip_area, &cell_area);
if(label_mask_ok) {
lv_draw_label(&txt_area, &label_mask, cell_style, opa_scale, ext->cell_data[cell] + 1,
- txt_flags, NULL, -1, -1, NULL);
+ txt_flags, NULL, NULL, NULL, lv_obj_get_base_dir(table));
}
/*Draw lines after '\n's*/
lv_point_t p1;
@@ -708,7 +759,7 @@ static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv_design_
p1.y = txt_area.y1 + txt_size.y + cell_style->text.line_space / 2;
p2.y = txt_area.y1 + txt_size.y + cell_style->text.line_space / 2;
- lv_draw_line(&p1, &p2, mask, cell_style, opa_scale);
+ lv_draw_line(&p1, &p2, clip_area, cell_style, opa_scale);
ext->cell_data[cell][i] = '\n';
}
@@ -724,7 +775,7 @@ static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv_design_
else if(mode == LV_DESIGN_DRAW_POST) {
}
- return true;
+ return LV_DESIGN_RES_OK;
}
/**
@@ -741,6 +792,7 @@ static lv_res_t lv_table_signal(lv_obj_t * table, lv_signal_t sign, void * param
/* Include the ancient signal function */
res = ancestor_signal(table, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_CLEANUP) {
/*Free the cell texts*/
@@ -754,13 +806,6 @@ static lv_res_t lv_table_signal(lv_obj_t * table, lv_signal_t sign, void * param
}
if(ext->cell_data != NULL)
lv_mem_free(ext->cell_data);
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_table";
}
return res;
diff --git a/src/lv_objx/lv_tabview.c b/src/lv_objx/lv_tabview.c
index ab0ad28a8..a306a9531 100644
--- a/src/lv_objx/lv_tabview.c
+++ b/src/lv_objx/lv_tabview.c
@@ -10,6 +10,7 @@
#if LV_USE_TABVIEW != 0
#include "lv_btnm.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_misc/lv_anim.h"
#include "../lv_core/lv_disp.h"
@@ -17,6 +18,8 @@
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_tabview"
+
#if LV_USE_ANIMATION
#ifndef LV_TABVIEW_DEF_ANIM_TIME
#define LV_TABVIEW_DEF_ANIM_TIME 300 /*Animation time of focusing to the a list element [ms] (0: no animation) */
@@ -34,21 +37,21 @@
* STATIC PROTOTYPES
**********************/
static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * param);
-static lv_res_t tabpage_signal(lv_obj_t * tab_page, lv_signal_t sign, void * param);
-static lv_res_t tabpage_scrl_signal(lv_obj_t * tab_scrl, lv_signal_t sign, void * param);
+static lv_res_t tabview_scrl_signal(lv_obj_t * tabview_scrl, lv_signal_t sign, void * param);
-static void tabpage_pressed_handler(lv_obj_t * tabview, lv_obj_t * tabpage);
-static void tabpage_pressing_handler(lv_obj_t * tabview, lv_obj_t * tabpage);
-static void tabpage_press_lost_handler(lv_obj_t * tabview, lv_obj_t * tabpage);
static void tab_btnm_event_cb(lv_obj_t * tab_btnm, lv_event_t event);
static void tabview_realign(lv_obj_t * tabview);
+static void refr_indic_size(lv_obj_t * tabview);
+static void refr_btns_size(lv_obj_t * tabview);
+static void refr_content_size(lv_obj_t * tabview);
+static void refr_align(lv_obj_t * tabview);
/**********************
* STATIC VARIABLES
**********************/
static lv_signal_cb_t ancestor_signal;
+static lv_signal_cb_t ancestor_scrl_signal;
static lv_signal_cb_t page_signal;
-static lv_signal_cb_t page_scrl_signal;
static const char * tab_def[] = {""};
/**********************
@@ -71,20 +74,19 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of tab*/
lv_obj_t * new_tabview = lv_obj_create(par, copy);
- lv_mem_assert(new_tabview);
+ LV_ASSERT_MEM(new_tabview);
if(new_tabview == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_tabview);
/*Allocate the tab type specific extended data*/
lv_tabview_ext_t * ext = lv_obj_allocate_ext_attr(new_tabview, sizeof(lv_tabview_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_tabview);
+ return NULL;
+ }
/*Initialize the allocated 'ext' */
- ext->drag_hor = 0;
- ext->draging = 0;
- ext->scroll_ver = 0;
- ext->slide_enable = 1;
ext->tab_cur = 0;
ext->point_last.x = 0;
ext->point_last.y = 0;
@@ -95,7 +97,6 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
#if LV_USE_ANIMATION
ext->anim_time = LV_TABVIEW_DEF_ANIM_TIME;
#endif
- ext->btns_hide = 0;
/*The signal and design functions are not copied so set them here*/
lv_obj_set_signal_cb(new_tabview, lv_tabview_signal);
@@ -103,7 +104,7 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
/*Init the new tab tab*/
if(copy == NULL) {
ext->tab_name_ptr = lv_mem_alloc(sizeof(char *));
- lv_mem_assert(ext->tab_name_ptr);
+ LV_ASSERT_MEM(ext->tab_name_ptr);
if(ext->tab_name_ptr == NULL) return NULL;
ext->tab_name_ptr[0] = "";
ext->tab_cnt = 0;
@@ -112,25 +113,26 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
* Don't use `par` directly because if the tabview is created on a page it is moved to the
* scrollable so the parent has changed */
lv_obj_set_size(new_tabview, lv_obj_get_width_fit(lv_obj_get_parent(new_tabview)),
- lv_obj_get_height_fit(lv_obj_get_parent(new_tabview)));
+ lv_obj_get_height_fit(lv_obj_get_parent(new_tabview)));
- ext->content = lv_cont_create(new_tabview, NULL);
+ ext->content = lv_page_create(new_tabview, NULL);
ext->btns = lv_btnm_create(new_tabview, NULL);
ext->indic = lv_obj_create(ext->btns, NULL);
- lv_obj_set_height(ext->btns, 3 * LV_DPI / 4);
+ if(ancestor_scrl_signal == NULL) ancestor_scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(ext->content));
+ lv_obj_set_signal_cb(lv_page_get_scrl(ext->content), tabview_scrl_signal);
+
lv_btnm_set_map(ext->btns, tab_def);
lv_obj_set_event_cb(ext->btns, tab_btnm_event_cb);
- lv_obj_set_width(ext->indic, LV_DPI);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
lv_obj_set_click(ext->indic, false);
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_cont_set_style(ext->content, LV_CONT_STYLE_MAIN, &lv_style_transp_tight);
- lv_obj_set_height(ext->content, lv_obj_get_height(new_tabview) - lv_obj_get_height(ext->btns));
- lv_obj_align(ext->content, ext->btns, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
+ lv_page_set_style(ext->content, LV_PAGE_STYLE_BG, &lv_style_transp_tight);
+ lv_page_set_style(ext->content, LV_PAGE_STYLE_SCRL, &lv_style_transp_tight);
+ lv_page_set_scrl_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_FLOOD);
+ lv_page_set_scrl_layout(ext->content, LV_LAYOUT_ROW_T);
+ lv_page_set_sb_mode(ext->content, LV_SB_MODE_OFF);
+ lv_obj_set_drag_dir(lv_page_get_scrl(ext->content), LV_DRAG_DIR_ONE);
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
@@ -144,7 +146,7 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_TGL_PR, th->style.tabview.btn.tgl_pr);
} else {
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BG, &lv_style_plain);
- lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_BG, &lv_style_transp);
+ lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_BTN_BG, &lv_style_pretty);//transp);
lv_tabview_set_style(new_tabview, LV_TABVIEW_STYLE_INDIC, &lv_style_plain_color);
}
}
@@ -155,13 +157,13 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
ext->point_last.y = 0;
ext->btns = lv_btnm_create(new_tabview, copy_ext->btns);
ext->indic = lv_obj_create(ext->btns, copy_ext->indic);
- ext->content = lv_cont_create(new_tabview, copy_ext->content);
+ ext->content = lv_page_create(new_tabview, copy_ext->content);
#if LV_USE_ANIMATION
ext->anim_time = copy_ext->anim_time;
#endif
ext->tab_name_ptr = lv_mem_alloc(sizeof(char *));
- lv_mem_assert(ext->tab_name_ptr);
+ LV_ASSERT_MEM(ext->tab_name_ptr);
if(ext->tab_name_ptr == NULL) return NULL;
ext->tab_name_ptr[0] = "";
lv_btnm_set_map(ext->btns, ext->tab_name_ptr);
@@ -181,6 +183,8 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
lv_obj_refresh_style(new_tabview);
}
+ tabview_realign(new_tabview);
+
LV_LOG_INFO("tab view created");
return new_tabview;
@@ -188,11 +192,13 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
/**
* Delete all children of the scrl object, without deleting scrl child.
- * @param obj pointer to an object
+ * @param tabview pointer to an object
*/
-void lv_tabview_clean(lv_obj_t * obj)
+void lv_tabview_clean(lv_obj_t * tabview)
{
- lv_obj_t * scrl = lv_page_get_scrl(obj);
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
+ lv_obj_t * scrl = lv_page_get_scrl(tabview);
lv_obj_clean(scrl);
}
@@ -208,24 +214,25 @@ void lv_tabview_clean(lv_obj_t * obj)
*/
lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+ LV_ASSERT_STR(name);
+
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
/*Create the container page*/
lv_obj_t * h = lv_page_create(ext->content, NULL);
lv_obj_set_size(h, lv_obj_get_width(tabview), lv_obj_get_height(ext->content));
lv_page_set_sb_mode(h, LV_SB_MODE_AUTO);
- lv_page_set_style(h, LV_PAGE_STYLE_BG, &lv_style_transp);
+ lv_page_set_style(h, LV_PAGE_STYLE_BG, &lv_style_transp_tight);
lv_page_set_style(h, LV_PAGE_STYLE_SCRL, &lv_style_transp);
+ lv_page_set_scroll_propagation(h, true);
if(page_signal == NULL) page_signal = lv_obj_get_signal_cb(h);
- if(page_scrl_signal == NULL) page_scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(h));
- lv_obj_set_signal_cb(h, tabpage_signal);
- lv_obj_set_signal_cb(lv_page_get_scrl(h), tabpage_scrl_signal);
/*Extend the button matrix map with the new name*/
char * name_dm;
name_dm = lv_mem_alloc(strlen(name) + 1); /*+1 for the the closing '\0' */
- lv_mem_assert(name_dm);
+ LV_ASSERT_MEM(name_dm);
if(name_dm == NULL) return NULL;
strcpy(name_dm, name);
@@ -234,15 +241,15 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
switch(ext->btns_pos) {
case LV_TABVIEW_BTNS_POS_TOP:
case LV_TABVIEW_BTNS_POS_BOTTOM:
- ext->tab_name_ptr = lv_mem_realloc(ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt + 1));
+ ext->tab_name_ptr = lv_mem_realloc((void*)ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt + 1));
break;
case LV_TABVIEW_BTNS_POS_LEFT:
case LV_TABVIEW_BTNS_POS_RIGHT:
- ext->tab_name_ptr = lv_mem_realloc(ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt * 2));
+ ext->tab_name_ptr = lv_mem_realloc((void*)ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt * 2));
break;
}
- lv_mem_assert(ext->tab_name_ptr);
+ LV_ASSERT_MEM(ext->tab_name_ptr);
if(ext->tab_name_ptr == NULL) return NULL;
/* FIXME: It is not possible yet to switch tab button position from/to top/bottom from/to left/right at runtime.
@@ -250,22 +257,35 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
* to LV_TABVIEW_BTNS_POS_TOP or LV_TABVIEW_BTNS_POS_BOTTOM.
*/
switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- ext->tab_name_ptr[ext->tab_cnt - 1] = name_dm;
- ext->tab_name_ptr[ext->tab_cnt] = "";
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- if(ext->tab_cnt == 1) {
- ext->tab_name_ptr[0] = name_dm;
- ext->tab_name_ptr[1] = "";
- } else {
- ext->tab_name_ptr[ext->tab_cnt * 2 - 3] = "\n";
- ext->tab_name_ptr[ext->tab_cnt * 2 - 2] = name_dm;
- ext->tab_name_ptr[ext->tab_cnt * 2 - 1] = "";
- }
- break;
+ default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
+ case LV_TABVIEW_BTNS_POS_NONE:
+ case LV_TABVIEW_BTNS_POS_TOP:
+ case LV_TABVIEW_BTNS_POS_BOTTOM:
+ ext->tab_name_ptr = lv_mem_realloc(ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt + 1));
+
+ LV_ASSERT_MEM(ext->tab_name_ptr);
+ if(ext->tab_name_ptr == NULL) return NULL;
+
+ ext->tab_name_ptr[ext->tab_cnt - 1] = name_dm;
+ ext->tab_name_ptr[ext->tab_cnt] = "";
+
+ break;
+ case LV_TABVIEW_BTNS_POS_LEFT:
+ case LV_TABVIEW_BTNS_POS_RIGHT:
+ ext->tab_name_ptr = lv_mem_realloc(ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt * 2));
+
+ LV_ASSERT_MEM(ext->tab_name_ptr);
+ if(ext->tab_name_ptr == NULL) return NULL;
+
+ if(ext->tab_cnt == 1) {
+ ext->tab_name_ptr[0] = name_dm;
+ ext->tab_name_ptr[1] = "";
+ } else {
+ ext->tab_name_ptr[ext->tab_cnt * 2 - 3] = "\n";
+ ext->tab_name_ptr[ext->tab_cnt * 2 - 2] = name_dm;
+ ext->tab_name_ptr[ext->tab_cnt * 2 - 1] = "";
+ }
+ break;
}
/* The button matrix's map still points to the old `tab_name_ptr` which might be freed by
@@ -276,38 +296,8 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
lv_btnm_set_map(ext->btns, ext->tab_name_ptr);
lv_btnm_set_btn_ctrl(ext->btns, ext->tab_cur, LV_BTNM_CTRL_NO_REPEAT);
- /*Modify the indicator size*/
- const lv_style_t * style_tabs = lv_obj_get_style(ext->btns);
- lv_coord_t indic_size;
- lv_coord_t max_h, btn_h, act_y;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- indic_size = (lv_obj_get_width(tabview) - style_tabs->body.padding.inner * (ext->tab_cnt - 1) -
- style_tabs->body.padding.left - style_tabs->body.padding.right) /
- ext->tab_cnt;
- lv_obj_set_width(ext->indic, indic_size);
- lv_obj_set_x(ext->indic, indic_size * ext->tab_cur + style_tabs->body.padding.inner * ext->tab_cur +
- style_tabs->body.padding.left);
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- max_h = lv_obj_get_height(ext->btns) - style_tabs->body.padding.top - style_tabs->body.padding.bottom;
- btn_h = max_h - ((ext->tab_cnt - 1) * style_tabs->body.padding.inner);
- btn_h = btn_h / ext->tab_cnt;
- btn_h--; /*-1 because e.g. height = 100 means 101 pixels (0..100)*/
- act_y = style_tabs->body.padding.top + ext->tab_cur * (btn_h + style_tabs->body.padding.inner);
-
- lv_obj_set_height(ext->indic, btn_h);
- lv_obj_set_y(ext->indic, act_y);
- break;
- }
-
/*Set the first btn as active*/
- if(ext->tab_cnt == 1) {
- ext->tab_cur = 0;
- }
+ if(ext->tab_cnt == 1) ext->tab_cur = 0;
tabview_realign(tabview); /*Set the size of the pages, tab buttons and indicator*/
@@ -328,12 +318,15 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
*/
void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t anim)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION == 0
anim = LV_ANIM_OFF;
#endif
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- const lv_style_t * style = lv_obj_get_style(ext->content);
+ const lv_style_t * cont_style = lv_obj_get_style(ext->content);
+ const lv_style_t * cont_scrl_style = lv_obj_get_style(lv_page_get_scrl(ext->content));
if(id >= ext->tab_cnt) id = ext->tab_cnt - 1;
@@ -341,32 +334,36 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
ext->tab_cur = id;
+ if(lv_obj_get_base_dir(tabview) == LV_BIDI_DIR_RTL) {
+ id = (ext->tab_cnt - (id + 1));
+ }
+
lv_coord_t cont_x;
switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- cont_x = -(lv_obj_get_width(tabview) * id + style->body.padding.inner * id + style->body.padding.left);
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- cont_x = -((lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns)) * id + style->body.padding.inner * id +
- style->body.padding.left) +
- lv_obj_get_width(ext->btns);
- break;
- case LV_TABVIEW_BTNS_POS_RIGHT:
- cont_x = -((lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns)) * id + style->body.padding.inner * id +
- style->body.padding.left);
- break;
+ default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
+ case LV_TABVIEW_BTNS_POS_NONE:
+ case LV_TABVIEW_BTNS_POS_TOP:
+ case LV_TABVIEW_BTNS_POS_BOTTOM:
+ cont_x = -(lv_obj_get_width(tabview) * id + cont_scrl_style->body.padding.inner * id + cont_scrl_style->body.padding.left);
+ break;
+ case LV_TABVIEW_BTNS_POS_LEFT:
+ case LV_TABVIEW_BTNS_POS_RIGHT:
+ cont_x = -((lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns)) * id + cont_scrl_style->body.padding.inner * id +
+ cont_scrl_style->body.padding.left);
+ break;
}
+ cont_x += cont_style->body.padding.left;
+
if(anim == LV_ANIM_OFF || lv_tabview_get_anim_time(tabview) == 0) {
- lv_obj_set_x(ext->content, cont_x);
+ lv_obj_set_x(lv_page_get_scrl(ext->content), cont_x);
}
#if LV_USE_ANIMATION
else {
lv_anim_t a;
- a.var = ext->content;
- a.start = lv_obj_get_x(ext->content);
+ a.var = lv_page_get_scrl(ext->content);
+ a.start = lv_obj_get_x(lv_page_get_scrl(ext->content));
a.end = cont_x;
a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_x;
a.path_cb = lv_anim_path_linear;
@@ -384,19 +381,22 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
/*Move the indicator*/
const lv_style_t * tabs_style = lv_obj_get_style(ext->btns);
lv_coord_t indic_size;
- lv_coord_t indic_pos;
+ lv_coord_t indic_pos = 0; /*silence uninitialized variable warning*/;
switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- indic_size = lv_obj_get_width(ext->indic);
- indic_pos = indic_size * id + tabs_style->body.padding.inner * id + tabs_style->body.padding.left;
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- indic_size = lv_obj_get_height(ext->indic);
- indic_pos = tabs_style->body.padding.top + id * (indic_size + tabs_style->body.padding.inner);
- break;
+ default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
+ case LV_TABVIEW_BTNS_POS_NONE:
+ break;
+ case LV_TABVIEW_BTNS_POS_TOP:
+ case LV_TABVIEW_BTNS_POS_BOTTOM:
+ indic_size = lv_obj_get_width(ext->indic);
+ indic_pos = indic_size * id + tabs_style->body.padding.inner * id + tabs_style->body.padding.left;
+ break;
+ case LV_TABVIEW_BTNS_POS_LEFT:
+ case LV_TABVIEW_BTNS_POS_RIGHT:
+ indic_size = lv_obj_get_height(ext->indic);
+ indic_pos = tabs_style->body.padding.top + id * (indic_size + tabs_style->body.padding.inner);
+ break;
}
#if LV_USE_ANIMATION
@@ -404,10 +404,12 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
#endif
{
switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM: lv_obj_set_x(ext->indic, indic_pos); break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_set_y(ext->indic, indic_pos); break;
+ default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
+ case LV_TABVIEW_BTNS_POS_NONE: break;
+ case LV_TABVIEW_BTNS_POS_TOP:
+ case LV_TABVIEW_BTNS_POS_BOTTOM: lv_obj_set_x(ext->indic, indic_pos); break;
+ case LV_TABVIEW_BTNS_POS_LEFT:
+ case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_set_y(ext->indic, indic_pos); break;
}
}
#if LV_USE_ANIMATION
@@ -416,18 +418,21 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
a.var = ext->indic;
switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- a.start = lv_obj_get_x(ext->indic);
- a.end = indic_pos;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_x;
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- a.start = lv_obj_get_y(ext->indic);
- a.end = indic_pos;
- a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
- break;
+ default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
+ case LV_TABVIEW_BTNS_POS_NONE:
+ break;
+ case LV_TABVIEW_BTNS_POS_TOP:
+ case LV_TABVIEW_BTNS_POS_BOTTOM:
+ a.start = lv_obj_get_x(ext->indic);
+ a.end = indic_pos;
+ a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_x;
+ break;
+ case LV_TABVIEW_BTNS_POS_LEFT:
+ case LV_TABVIEW_BTNS_POS_RIGHT:
+ a.start = lv_obj_get_y(ext->indic);
+ a.end = indic_pos;
+ a.exec_cb = (lv_anim_exec_xcb_t)lv_obj_set_y;
+ break;
}
a.path_cb = lv_anim_path_linear;
@@ -445,17 +450,6 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
lv_btnm_set_btn_ctrl(ext->btns, ext->tab_cur, LV_BTNM_CTRL_TGL_STATE);
}
-/**
- * Enable horizontal sliding with touch pad
- * @param tabview pointer to Tab view object
- * @param en true: enable sliding; false: disable sliding
- */
-void lv_tabview_set_sliding(lv_obj_t * tabview, bool en)
-{
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- ext->slide_enable = en == false ? 0 : 1;
-}
-
/**
* Set the animation time of tab view when a new tab is loaded
* @param tabview pointer to Tab view object
@@ -463,6 +457,8 @@ void lv_tabview_set_sliding(lv_obj_t * tabview, bool en)
*/
void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
ext->anim_time = anim_time;
@@ -480,33 +476,27 @@ void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time)
*/
void lv_tabview_set_style(lv_obj_t * tabview, lv_tabview_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
switch(type) {
- case LV_TABVIEW_STYLE_BG: lv_obj_set_style(tabview, style); break;
- case LV_TABVIEW_STYLE_BTN_BG:
- lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BG, style);
- tabview_realign(tabview);
- break;
- case LV_TABVIEW_STYLE_BTN_REL:
- lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_REL, style);
- tabview_realign(tabview);
- break;
- case LV_TABVIEW_STYLE_BTN_PR: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_PR, style); break;
- case LV_TABVIEW_STYLE_BTN_TGL_REL: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_REL, style); break;
- case LV_TABVIEW_STYLE_BTN_TGL_PR: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_PR, style); break;
- case LV_TABVIEW_STYLE_INDIC:
- lv_obj_set_style(ext->indic, style);
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM: lv_obj_set_height(ext->indic, style->body.padding.inner); break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_set_width(ext->indic, style->body.padding.inner); break;
- }
-
- tabview_realign(tabview);
- break;
+ case LV_TABVIEW_STYLE_BG: lv_obj_set_style(tabview, style); break;
+ case LV_TABVIEW_STYLE_BTN_BG:
+ lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BG, style);
+ tabview_realign(tabview);
+ break;
+ case LV_TABVIEW_STYLE_BTN_REL:
+ lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_REL, style);
+ tabview_realign(tabview);
+ break;
+ case LV_TABVIEW_STYLE_BTN_PR: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_PR, style); break;
+ case LV_TABVIEW_STYLE_BTN_TGL_REL: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_REL, style); break;
+ case LV_TABVIEW_STYLE_BTN_TGL_PR: lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_PR, style); break;
+ case LV_TABVIEW_STYLE_INDIC:
+ lv_obj_set_style(ext->indic, style);
+ tabview_realign(tabview);
+ break;
}
}
@@ -517,25 +507,22 @@ void lv_tabview_set_style(lv_obj_t * tabview, lv_tabview_style_t type, const lv_
*/
void lv_tabview_set_btns_pos(lv_obj_t * tabview, lv_tabview_btns_pos_t btns_pos)
{
+ if(btns_pos != LV_TABVIEW_BTNS_POS_NONE &&
+ btns_pos != LV_TABVIEW_BTNS_POS_TOP &&
+ btns_pos != LV_TABVIEW_BTNS_POS_BOTTOM &&
+ btns_pos != LV_TABVIEW_BTNS_POS_LEFT &&
+ btns_pos != LV_TABVIEW_BTNS_POS_RIGHT) {
+ LV_LOG_WARN("lv_tabview_set_btns_pos: unexpected button position");
+ return;
+ }
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
ext->btns_pos = btns_pos;
tabview_realign(tabview);
}
-/**
- * Set whether tab buttons are hidden
- * @param tabview pointer to a tab view object
- * @param en whether tab buttons are hidden
- */
-void lv_tabview_set_btns_hidden(lv_obj_t * tabview, bool en)
-{
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- ext->btns_hide = en;
- tabview_realign(tabview);
-}
-
/*=====================
* Getter functions
*====================*/
@@ -547,6 +534,8 @@ void lv_tabview_set_btns_hidden(lv_obj_t * tabview, bool en)
*/
uint16_t lv_tabview_get_tab_act(const lv_obj_t * tabview)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
return ext->tab_cur;
}
@@ -558,6 +547,8 @@ uint16_t lv_tabview_get_tab_act(const lv_obj_t * tabview)
*/
uint16_t lv_tabview_get_tab_count(const lv_obj_t * tabview)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
return ext->tab_cnt;
}
@@ -570,13 +561,16 @@ uint16_t lv_tabview_get_tab_count(const lv_obj_t * tabview)
*/
lv_obj_t * lv_tabview_get_tab(const lv_obj_t * tabview, uint16_t id)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
+ lv_obj_t * content_scrl = lv_page_get_scrl(ext->content);
uint16_t i = 0;
- lv_obj_t * page = lv_obj_get_child_back(ext->content, NULL);
+ lv_obj_t * page = lv_obj_get_child_back(content_scrl, NULL);
while(page != NULL && i != id) {
- i++;
- page = lv_obj_get_child_back(ext->content, page);
+ if(lv_obj_get_signal_cb(page) == page_signal) i++;
+ page = lv_obj_get_child_back(content_scrl, page);
}
if(i == id) return page;
@@ -584,17 +578,6 @@ lv_obj_t * lv_tabview_get_tab(const lv_obj_t * tabview, uint16_t id)
return NULL;
}
-/**
- * Get horizontal sliding is enabled or not
- * @param tabview pointer to Tab view object
- * @return true: enable sliding; false: disable sliding
- */
-bool lv_tabview_get_sliding(const lv_obj_t * tabview)
-{
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- return ext->slide_enable ? true : false;
-}
-
/**
* Get the animation time of tab view when a new tab is loaded
* @param tabview pointer to Tab view object
@@ -602,6 +585,8 @@ bool lv_tabview_get_sliding(const lv_obj_t * tabview)
*/
uint16_t lv_tabview_get_anim_time(const lv_obj_t * tabview)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
return ext->anim_time;
@@ -619,17 +604,19 @@ uint16_t lv_tabview_get_anim_time(const lv_obj_t * tabview)
*/
const lv_style_t * lv_tabview_get_style(const lv_obj_t * tabview, lv_tabview_style_t type)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
switch(type) {
- case LV_TABVIEW_STYLE_BG: style = lv_obj_get_style(tabview); break;
- case LV_TABVIEW_STYLE_BTN_BG: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BG); break;
- case LV_TABVIEW_STYLE_BTN_REL: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_REL); break;
- case LV_TABVIEW_STYLE_BTN_PR: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_PR); break;
- case LV_TABVIEW_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_REL); break;
- case LV_TABVIEW_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_PR); break;
- default: style = NULL; break;
+ case LV_TABVIEW_STYLE_BG: style = lv_obj_get_style(tabview); break;
+ case LV_TABVIEW_STYLE_BTN_BG: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BG); break;
+ case LV_TABVIEW_STYLE_BTN_REL: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_REL); break;
+ case LV_TABVIEW_STYLE_BTN_PR: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_PR); break;
+ case LV_TABVIEW_STYLE_BTN_TGL_REL: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_REL); break;
+ case LV_TABVIEW_STYLE_BTN_TGL_PR: style = lv_btnm_get_style(ext->btns, LV_BTNM_STYLE_BTN_TGL_PR); break;
+ default: style = NULL; break;
}
return style;
@@ -641,22 +628,12 @@ const lv_style_t * lv_tabview_get_style(const lv_obj_t * tabview, lv_tabview_sty
*/
lv_tabview_btns_pos_t lv_tabview_get_btns_pos(const lv_obj_t * tabview)
{
+ LV_ASSERT_OBJ(tabview, LV_OBJX_NAME);
+
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
return ext->btns_pos;
}
-/**
- * Get whether tab buttons are hidden
- * @param tabview pointer to a tab view object
- * @return whether tab buttons are hidden
- */
-bool lv_tabview_get_btns_hidden(const lv_obj_t * tabview)
-{
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
-
- return ext->btns_hide;
-}
-
/**********************
* STATIC FUNCTIONS
**********************/
@@ -675,6 +652,7 @@ static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * p
/* Include the ancient signal function */
res = ancestor_signal(tabview, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
if(sign == LV_SIGNAL_CLEANUP) {
@@ -687,7 +665,7 @@ static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * p
ext->content = NULL;
} else if(sign == LV_SIGNAL_CORD_CHG) {
if(ext->content != NULL && (lv_obj_get_width(tabview) != lv_area_get_width(param) ||
- lv_obj_get_height(tabview) != lv_area_get_height(param))) {
+ lv_obj_get_height(tabview) != lv_area_get_height(param))) {
tabview_realign(tabview);
}
} else if(sign == LV_SIGNAL_RELEASED) {
@@ -697,7 +675,7 @@ static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * p
lv_indev_t * indev = lv_indev_get_act();
lv_indev_type_t indev_type = lv_indev_get_type(indev);
if(indev_type == LV_INDEV_TYPE_KEYPAD ||
- (indev_type == LV_INDEV_TYPE_ENCODER && lv_group_get_editing(lv_obj_get_group(tabview)))) {
+ (indev_type == LV_INDEV_TYPE_ENCODER && lv_group_get_editing(lv_obj_get_group(tabview)))) {
lv_event_send(ext->btns, LV_EVENT_CLICKED, lv_event_get_data());
}
#endif
@@ -710,227 +688,95 @@ static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * p
if(sign == LV_SIGNAL_FOCUS) {
lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
+ /*If not focused by an input device assume the last input device*/
+ if(indev_type == LV_INDEV_TYPE_NONE) {
+ indev_type = lv_indev_get_type(lv_indev_get_next(NULL));
+ }
+
/*With ENCODER select the first button only in edit mode*/
if(indev_type == LV_INDEV_TYPE_ENCODER) {
#if LV_USE_GROUP
lv_group_t * g = lv_obj_get_group(tabview);
if(lv_group_get_editing(g)) {
- lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btns);
- btnm_ext->btn_id_pr = 0;
- lv_obj_invalidate(ext->btns);
+ lv_btnm_set_pressed(ext->btns, ext->tab_cur);
}
#endif
} else {
- lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btns);
- btnm_ext->btn_id_pr = 0;
- lv_obj_invalidate(ext->btns);
+ lv_btnm_set_pressed(ext->btns, ext->tab_cur);
}
}
} else if(sign == LV_SIGNAL_GET_EDITABLE) {
bool * editable = (bool *)param;
*editable = true;
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_tabview";
}
+
return res;
}
/**
- * Signal function of a tab's page
+ * Signal function of a tab views main scrollable area
* @param tab pointer to a tab page object
* @param sign a signal type from lv_signal_t enum
* @param param pointer to a signal specific variable
* @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
*/
-static lv_res_t tabpage_signal(lv_obj_t * tab_page, lv_signal_t sign, void * param)
+static lv_res_t tabview_scrl_signal(lv_obj_t * tabview_scrl, lv_signal_t sign, void * param)
{
lv_res_t res;
/* Include the ancient signal function */
- res = page_signal(tab_page, sign, param);
+ res = ancestor_scrl_signal(tabview_scrl, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, "");
- lv_obj_t * cont = lv_obj_get_parent(tab_page);
+ lv_obj_t * cont = lv_obj_get_parent(tabview_scrl);
lv_obj_t * tabview = lv_obj_get_parent(cont);
- if(lv_tabview_get_sliding(tabview) == false) return res;
+ if(sign == LV_SIGNAL_DRAG_THROW_BEGIN) {
+ lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- if(sign == LV_SIGNAL_PRESSED) {
- tabpage_pressed_handler(tabview, tab_page);
- } else if(sign == LV_SIGNAL_PRESSING) {
- tabpage_pressing_handler(tabview, tab_page);
- } else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
- tabpage_press_lost_handler(tabview, tab_page);
- }
+ lv_indev_t * indev = lv_indev_get_act();
+ lv_point_t point_act;
+ lv_indev_get_point(indev, &point_act);
+ lv_point_t vect;
+ lv_indev_get_vect(indev, &vect);
+ lv_coord_t x_predict = 0;
- return res;
-}
-/**
- * Signal function of the tab page's scrollable object
- * @param tab_scrl pointer to a tab page's scrollable object
- * @param sign a signal type from lv_signal_t enum
- * @param param pointer to a signal specific variable
- * @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
- */
-static lv_res_t tabpage_scrl_signal(lv_obj_t * tab_scrl, lv_signal_t sign, void * param)
-{
- lv_res_t res;
-
- /* Include the ancient signal function */
- res = page_scrl_signal(tab_scrl, sign, param);
- if(res != LV_RES_OK) return res;
-
- lv_obj_t * tab_page = lv_obj_get_parent(tab_scrl);
- lv_obj_t * cont = lv_obj_get_parent(tab_page);
- lv_obj_t * tabview = lv_obj_get_parent(cont);
-
- if(lv_tabview_get_sliding(tabview) == false) return res;
-
- if(sign == LV_SIGNAL_PRESSED) {
- tabpage_pressed_handler(tabview, tab_page);
- } else if(sign == LV_SIGNAL_PRESSING) {
- tabpage_pressing_handler(tabview, tab_page);
- } else if(sign == LV_SIGNAL_RELEASED || sign == LV_SIGNAL_PRESS_LOST) {
- tabpage_press_lost_handler(tabview, tab_page);
- }
-
- return res;
-}
-
-/**
- * Called when a tab's page or scrollable object is pressed
- * @param tabview pointer to the btn view object
- * @param tabpage pointer to the page of a btn
- */
-static void tabpage_pressed_handler(lv_obj_t * tabview, lv_obj_t * tabpage)
-{
- (void)tabpage;
-
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- lv_indev_t * indev = lv_indev_get_act();
- lv_indev_get_point(indev, &ext->point_last);
-}
-
-/**
- * Called when a tab's page or scrollable object is being pressed
- * @param tabview pointer to the btn view object
- * @param tabpage pointer to the page of a btn
- */
-static void tabpage_pressing_handler(lv_obj_t * tabview, lv_obj_t * tabpage)
-{
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- lv_indev_t * indev = lv_indev_get_act();
- lv_point_t point_act;
- lv_indev_get_point(indev, &point_act);
- lv_coord_t x_diff = point_act.x - ext->point_last.x;
- lv_coord_t y_diff = point_act.y - ext->point_last.y;
-
- if(!ext->scroll_ver && (x_diff >= LV_INDEV_DEF_DRAG_LIMIT || x_diff <= -LV_INDEV_DEF_DRAG_LIMIT)) {
- ext->draging = 1;
- /*Check if the page is on the edge */
- if((lv_page_on_edge(tabpage, LV_PAGE_EDGE_LEFT) && x_diff > 0) ||
- (lv_page_on_edge(tabpage, LV_PAGE_EDGE_RIGHT) && x_diff < 0)) {
- if(ext->drag_hor == 0) {
- ext->point_last.x = point_act.x;
- ext->point_last.y = point_act.y;
- }
- ext->drag_hor = 1;
- lv_obj_set_drag(lv_page_get_scrl(tabpage), false);
-
- } else if(ext->drag_hor == 0) {
- ext->drag_hor = 0;
+ while(vect.x != 0) {
+ x_predict += vect.x;
+ vect.x = vect.x * (100 - LV_INDEV_DEF_DRAG_THROW) / 100;
}
- } else if(y_diff >= LV_INDEV_DEF_DRAG_LIMIT || y_diff <= -LV_INDEV_DEF_DRAG_LIMIT) {
- ext->drag_hor = 0;
- ext->draging = 1;
- ext->scroll_ver = 1;
- } else
- ext->draging = 0;
- if(ext->drag_hor) {
- lv_obj_set_x(ext->content, lv_obj_get_x(ext->content) + point_act.x - ext->point_last.x);
- ext->point_last.x = point_act.x;
- ext->point_last.y = point_act.y;
+ res = lv_indev_finish_drag(indev);
+ if(res != LV_RES_OK) return res;
+ lv_obj_t * tab_page = lv_tabview_get_tab(tabview, ext->tab_cur);
+ lv_coord_t page_x1 = tab_page->coords.x1 - tabview->coords.x1 + x_predict;
+ lv_coord_t page_x2 = page_x1 + lv_obj_get_width(tabview);
+ lv_coord_t treshold = lv_obj_get_width(tabview) / 2;
- /*Move the indicator*/
- const lv_style_t * tabs_style = lv_obj_get_style(ext->btns);
- lv_coord_t indic_size;
- lv_coord_t p;
- lv_coord_t indic_y;
- const lv_style_t * indic_style;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- indic_size = lv_obj_get_width(ext->indic);
- indic_style = lv_obj_get_style(ext->indic);
- p = ((tabpage->coords.x1 - tabview->coords.x1) * (indic_size + tabs_style->body.padding.inner)) /
- lv_obj_get_width(tabview);
-
- lv_obj_set_x(ext->indic, indic_size * ext->tab_cur + tabs_style->body.padding.inner * ext->tab_cur +
- indic_style->body.padding.left - p);
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- indic_size = lv_obj_get_height(ext->indic);
- indic_y = tabs_style->body.padding.top + ext->tab_cur * (indic_size + tabs_style->body.padding.inner);
- lv_obj_set_y(ext->indic, indic_y);
- break;
+ lv_bidi_dir_t base_dir = lv_obj_get_base_dir(tabview);
+ int16_t tab_cur = ext->tab_cur;
+ if(page_x1 > treshold) {
+ if(base_dir != LV_BIDI_DIR_RTL) tab_cur--;
+ else tab_cur ++;
+ } else if(page_x2 < treshold) {
+ if(base_dir != LV_BIDI_DIR_RTL) tab_cur++;
+ else tab_cur --;
}
+
+ if(tab_cur > ext->tab_cnt - 1) tab_cur = ext->tab_cnt - 1;
+ if(tab_cur < 0) tab_cur = 0;
+
+ uint32_t id_prev = lv_tabview_get_tab_act(tabview);
+ lv_tabview_set_tab_act(tabview, tab_cur, LV_ANIM_ON);
+ uint32_t id_new = lv_tabview_get_tab_act(tabview);
+
+ if(id_prev != id_new) res = lv_event_send(tabview, LV_EVENT_VALUE_CHANGED, &id_new);
+ if(res != LV_RES_OK) return res;
+
}
-}
-
-/**
- * Called when a tab's page or scrollable object is released or the press is lost
- * @param tabview pointer to the btn view object
- * @param tabpage pointer to the page of a btn
- */
-static void tabpage_press_lost_handler(lv_obj_t * tabview, lv_obj_t * tabpage)
-{
- lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- ext->drag_hor = 0;
- ext->draging = 0;
- ext->scroll_ver = 0;
-
- lv_obj_set_drag(lv_page_get_scrl(tabpage), true);
-
- lv_indev_t * indev = lv_indev_get_act();
- lv_point_t point_act;
- lv_indev_get_point(indev, &point_act);
- lv_point_t vect;
- lv_indev_get_vect(indev, &vect);
- lv_coord_t x_predict = 0;
-
- while(vect.x != 0) {
- x_predict += vect.x;
- vect.x = vect.x * (100 - LV_INDEV_DEF_DRAG_THROW) / 100;
- }
-
- lv_coord_t page_x1 = tabpage->coords.x1 - tabview->coords.x1 + x_predict;
- lv_coord_t page_x2 = page_x1 + lv_obj_get_width(tabpage);
- lv_coord_t treshold = lv_obj_get_width(tabview) / 2;
-
- uint16_t tab_cur = ext->tab_cur;
- if(page_x1 > treshold) {
- if(tab_cur != 0) tab_cur--;
- } else if(page_x2 < treshold) {
- if(tab_cur < ext->tab_cnt - 1) tab_cur++;
- }
-
- uint32_t id_prev = lv_tabview_get_tab_act(tabview);
- lv_tabview_set_tab_act(tabview, tab_cur, LV_ANIM_ON);
- uint32_t id_new = lv_tabview_get_tab_act(tabview);
-
- lv_res_t res = LV_RES_OK;
- if(id_prev != id_new) res = lv_event_send(tabview, LV_EVENT_VALUE_CHANGED, &id_new);
-
- if(res != LV_RES_OK) return;
+ return res;
}
/**
@@ -968,147 +814,183 @@ static void tabview_realign(lv_obj_t * tabview)
{
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
- lv_obj_set_width(ext->btns, lv_obj_get_width(tabview));
+ refr_btns_size(tabview);
+ refr_content_size(tabview);
+ refr_indic_size(tabview);
- if(ext->btns_hide) {
- lv_obj_set_hidden(ext->btns, true);
- lv_obj_set_hidden(ext->indic, true);
- lv_obj_set_height(ext->content, lv_obj_get_height(tabview));
- lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- } else if(ext->tab_cnt != 0) {
- lv_obj_set_hidden(ext->btns, false);
- lv_obj_set_hidden(ext->indic, false);
-
- const lv_style_t * style_btn_bg = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_BG);
- const lv_style_t * style_btn_rel = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_REL);
-
- /*Set the indicator width/height*/
- lv_coord_t indic_size;
- lv_coord_t max_h;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- indic_size = (lv_obj_get_width(tabview) - style_btn_bg->body.padding.inner * (ext->tab_cnt - 1) -
- style_btn_bg->body.padding.left - style_btn_bg->body.padding.right) /
- ext->tab_cnt;
- lv_obj_set_width(ext->indic, indic_size);
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- lv_obj_set_height(ext->btns, lv_obj_get_height(tabview));
-
- max_h =
- lv_obj_get_height(ext->btns) - style_btn_bg->body.padding.top - style_btn_bg->body.padding.bottom;
- indic_size = max_h - ((ext->tab_cnt - 1) * style_btn_bg->body.padding.inner);
- indic_size = indic_size / ext->tab_cnt;
- indic_size--; /*-1 because e.g. height = 100 means 101 pixels (0..100)*/
- lv_obj_set_height(ext->indic, indic_size);
- break;
- }
-
- /*Set the tabs height/width*/
- lv_coord_t btns_size;
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- btns_size = lv_font_get_line_height(style_btn_rel->text.font) + style_btn_rel->body.padding.top +
- style_btn_rel->body.padding.bottom + style_btn_bg->body.padding.top +
- style_btn_bg->body.padding.bottom;
- lv_obj_set_height(ext->btns, btns_size);
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- btns_size = lv_font_get_glyph_width(style_btn_rel->text.font, 'A', '\0') +
- style_btn_rel->body.padding.left + style_btn_rel->body.padding.right +
- style_btn_bg->body.padding.left + style_btn_bg->body.padding.right;
- lv_obj_set_width(ext->btns, btns_size);
- break;
- }
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- lv_obj_set_height(ext->content, lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_set_height(ext->content, lv_obj_get_height(tabview)); break;
- }
-
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- lv_obj_align(ext->content, ext->btns, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_obj_set_height(ext->content, lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
- break;
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- lv_obj_align(ext->btns, ext->content, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
-
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_obj_set_height(ext->content, lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, lv_obj_get_width(ext->btns), 0);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
-
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_obj_set_width(ext->content, lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns));
-
- lv_obj_set_height(ext->btns, lv_obj_get_height(tabview));
- lv_obj_set_width(ext->indic, style_btn_bg->body.padding.inner);
- break;
- case LV_TABVIEW_BTNS_POS_RIGHT:
- lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
- lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, 0, 0);
- lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
-
- lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
- lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
- lv_obj_set_width(ext->content, lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns));
-
- lv_obj_set_height(ext->btns, lv_obj_get_height(tabview));
- lv_obj_set_width(ext->indic, style_btn_bg->body.padding.inner);
- break;
- }
- }
-
- lv_obj_t * pages = lv_obj_get_child(ext->content, NULL);
- while(pages != NULL) {
- if(lv_obj_get_signal_cb(pages) == tabpage_signal) { /*Be sure adjust only the pages (user can other things)*/
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP:
- case LV_TABVIEW_BTNS_POS_BOTTOM:
- lv_obj_set_size(pages, lv_obj_get_width(tabview), lv_obj_get_height(ext->content));
- break;
- case LV_TABVIEW_BTNS_POS_LEFT:
- case LV_TABVIEW_BTNS_POS_RIGHT:
- lv_obj_set_size(pages, lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns),
- lv_obj_get_height(ext->content));
- break;
- }
- }
- pages = lv_obj_get_child(ext->content, pages);
- }
-
- if(!ext->btns_hide) {
- switch(ext->btns_pos) {
- case LV_TABVIEW_BTNS_POS_TOP: lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); break;
- case LV_TABVIEW_BTNS_POS_BOTTOM: lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0); break;
- case LV_TABVIEW_BTNS_POS_LEFT: lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_RIGHT, 0, 0); break;
- case LV_TABVIEW_BTNS_POS_RIGHT: lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0); break;
- }
- }
+ refr_align(tabview);
lv_tabview_set_tab_act(tabview, ext->tab_cur, LV_ANIM_OFF);
}
+
+
+
+static void refr_indic_size(lv_obj_t * tabview)
+{
+ lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
+
+ const lv_style_t * style_btn_bg = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_BG);
+ const lv_style_t * style_indic = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_INDIC);
+
+ if(style_indic == NULL) style_indic = &lv_style_plain_color;
+
+
+ /*Set the indicator width/height*/
+ lv_coord_t indic_w;
+ lv_coord_t indic_h;
+ lv_coord_t max_h;
+
+ switch(ext->btns_pos) {
+ default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
+ case LV_TABVIEW_BTNS_POS_NONE:
+ lv_obj_set_hidden(ext->indic, true);
+ indic_w = 0;
+ indic_h = 0;
+ break;
+ case LV_TABVIEW_BTNS_POS_TOP:
+ case LV_TABVIEW_BTNS_POS_BOTTOM:
+ lv_obj_set_hidden(ext->indic, false);
+ if(ext->tab_cnt) {
+ indic_h = style_indic->body.padding.inner;
+ indic_w = (lv_obj_get_width(tabview) - style_btn_bg->body.padding.inner * (ext->tab_cnt - 1) -
+ style_btn_bg->body.padding.left - style_btn_bg->body.padding.right) /
+ ext->tab_cnt;
+ } else {
+ indic_w = 0;
+ indic_h = 0;
+ }
+ break;
+ case LV_TABVIEW_BTNS_POS_LEFT:
+ case LV_TABVIEW_BTNS_POS_RIGHT:
+ lv_obj_set_hidden(ext->indic, false);
+ if(ext->tab_cnt) {
+ indic_w = style_indic->body.padding.inner;
+ max_h = lv_obj_get_height(ext->btns) - style_btn_bg->body.padding.top - style_btn_bg->body.padding.bottom;
+ indic_h= max_h - ((ext->tab_cnt - 1) * style_btn_bg->body.padding.inner);
+ indic_h = indic_h / ext->tab_cnt;
+ indic_h--; /*-1 because e.g. height = 100 means 101 pixels (0..100)*/
+ } else {
+ indic_w = 0;
+ indic_h = 0;
+ }
+ break;
+ }
+
+ lv_obj_set_width(ext->indic, indic_w);
+ lv_obj_set_height(ext->indic, indic_h);
+}
+
+
+static void refr_btns_size(lv_obj_t * tabview)
+{
+ lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
+ const lv_style_t * style_btn_bg = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_BG);
+ const lv_style_t * style_btn_rel = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_REL);
+
+
+ /*Set the tabs height/width*/
+ lv_coord_t btns_w;
+ lv_coord_t btns_h;
+
+ switch(ext->btns_pos) {
+ default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
+ case LV_TABVIEW_BTNS_POS_NONE:
+ btns_w = 0;
+ btns_h = 0;
+ lv_obj_set_hidden(ext->btns, true);
+ break;
+ case LV_TABVIEW_BTNS_POS_TOP:
+ case LV_TABVIEW_BTNS_POS_BOTTOM:
+ lv_obj_set_hidden(ext->btns, false);
+ btns_h = lv_font_get_line_height(style_btn_rel->text.font) + style_btn_rel->body.padding.top +
+ style_btn_rel->body.padding.bottom + style_btn_bg->body.padding.top +
+ style_btn_bg->body.padding.bottom;
+ btns_w = lv_obj_get_width(tabview);
+
+ break;
+ case LV_TABVIEW_BTNS_POS_LEFT:
+ case LV_TABVIEW_BTNS_POS_RIGHT:
+ lv_obj_set_hidden(ext->btns, false);
+ btns_w = lv_font_get_glyph_width(style_btn_rel->text.font, 'A', '\0') +
+ style_btn_rel->body.padding.left + style_btn_rel->body.padding.right +
+ style_btn_bg->body.padding.left + style_btn_bg->body.padding.right;
+ btns_h = lv_obj_get_height(tabview);
+ break;
+ }
+
+ lv_obj_set_size(ext->btns, btns_w, btns_h);
+}
+
+static void refr_content_size(lv_obj_t * tabview)
+{
+ lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
+ const lv_style_t * style_cont = lv_obj_get_style(ext->content);
+ lv_coord_t cont_w;
+ lv_coord_t cont_h;
+
+ switch(ext->btns_pos) {
+ default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
+ case LV_TABVIEW_BTNS_POS_NONE:
+ cont_w = lv_obj_get_width(tabview);
+ cont_h = lv_obj_get_height(tabview);
+ break;
+ case LV_TABVIEW_BTNS_POS_TOP:
+ case LV_TABVIEW_BTNS_POS_BOTTOM:
+ cont_w = lv_obj_get_width(tabview);
+ cont_h = lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns);
+ break;
+ case LV_TABVIEW_BTNS_POS_LEFT:
+ case LV_TABVIEW_BTNS_POS_RIGHT:
+ cont_w = lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns);
+ cont_h = lv_obj_get_height(tabview);
+ break;
+ }
+
+ lv_obj_set_size(ext->content, cont_w, cont_h);
+
+
+ /*Refresh the size of the tab pages too. `ext->content` has a layout to align the pages*/
+ cont_h -= style_cont->body.padding.top + style_cont->body.padding.bottom;
+ lv_obj_t * content_scrl = lv_page_get_scrl(ext->content);
+ lv_obj_t * pages = lv_obj_get_child(content_scrl, NULL);
+ while(pages != NULL) {
+ /*Be sure adjust only the pages (user can other things)*/
+ if(lv_obj_get_signal_cb(pages) == page_signal) {
+ lv_obj_set_size(pages, cont_w, cont_h);
+ }
+ pages = lv_obj_get_child(content_scrl, pages);
+ }
+}
+
+static void refr_align(lv_obj_t * tabview)
+{
+ lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
+
+ switch(ext->btns_pos) {
+ default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
+ case LV_TABVIEW_BTNS_POS_NONE:
+ lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+ break;
+ case LV_TABVIEW_BTNS_POS_TOP:
+ lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+ lv_obj_align(ext->content, ext->btns, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
+ lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
+ break;
+ case LV_TABVIEW_BTNS_POS_BOTTOM:
+ lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+ lv_obj_align(ext->btns, ext->content, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
+ lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+ break;
+ case LV_TABVIEW_BTNS_POS_LEFT:
+ lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+ lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, lv_obj_get_width(ext->btns), 0);
+ lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
+ break;
+ case LV_TABVIEW_BTNS_POS_RIGHT:
+ lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
+ lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+ lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
+ break;
+ }
+}
#endif
diff --git a/src/lv_objx/lv_tabview.h b/src/lv_objx/lv_tabview.h
index 419a0bb70..e1383140b 100644
--- a/src/lv_objx/lv_tabview.h
+++ b/src/lv_objx/lv_tabview.h
@@ -43,7 +43,13 @@ extern "C" {
**********************/
/** Position of tabview buttons. */
-enum { LV_TABVIEW_BTNS_POS_TOP, LV_TABVIEW_BTNS_POS_BOTTOM, LV_TABVIEW_BTNS_POS_LEFT, LV_TABVIEW_BTNS_POS_RIGHT };
+enum {
+ LV_TABVIEW_BTNS_POS_NONE,
+ LV_TABVIEW_BTNS_POS_TOP,
+ LV_TABVIEW_BTNS_POS_BOTTOM,
+ LV_TABVIEW_BTNS_POS_LEFT,
+ LV_TABVIEW_BTNS_POS_RIGHT
+};
typedef uint8_t lv_tabview_btns_pos_t;
/*Data of tab*/
@@ -53,7 +59,7 @@ typedef struct
/*New data for this type */
lv_obj_t * btns;
lv_obj_t * indic;
- lv_obj_t * content; /*A rectangle to show the current tab*/
+ lv_obj_t * content; /*A background page which holds tab's pages*/
const char ** tab_name_ptr;
lv_point_t point_last;
uint16_t tab_cur;
@@ -61,12 +67,7 @@ typedef struct
#if LV_USE_ANIMATION
uint16_t anim_time;
#endif
- uint8_t slide_enable : 1; /*1: enable horizontal sliding by touch pad*/
- uint8_t draging : 1;
- uint8_t drag_hor : 1;
- uint8_t scroll_ver : 1;
- uint8_t btns_hide : 1;
- lv_tabview_btns_pos_t btns_pos : 2;
+ lv_tabview_btns_pos_t btns_pos : 3;
} lv_tabview_ext_t;
enum {
@@ -94,9 +95,9 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy);
/**
* Delete all children of the scrl object, without deleting scrl child.
- * @param obj pointer to an object
+ * @param tabview pointer to an object
*/
-void lv_tabview_clean(lv_obj_t * obj);
+void lv_tabview_clean(lv_obj_t * tabview);
/*======================
* Add/remove functions
@@ -122,13 +123,6 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name);
*/
void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t anim);
-/**
- * Enable horizontal sliding with touch pad
- * @param tabview pointer to Tab view object
- * @param en true: enable sliding; false: disable sliding
- */
-void lv_tabview_set_sliding(lv_obj_t * tabview, bool en);
-
/**
* Set the animation time of tab view when a new tab is loaded
* @param tabview pointer to Tab view object
@@ -151,13 +145,6 @@ void lv_tabview_set_style(lv_obj_t * tabview, lv_tabview_style_t type, const lv_
*/
void lv_tabview_set_btns_pos(lv_obj_t * tabview, lv_tabview_btns_pos_t btns_pos);
-/**
- * Set whether tab buttons are hidden
- * @param tabview pointer to a tab view object
- * @param en whether tab buttons are hidden
- */
-void lv_tabview_set_btns_hidden(lv_obj_t * tabview, bool en);
-
/*=====================
* Getter functions
*====================*/
@@ -183,13 +170,6 @@ uint16_t lv_tabview_get_tab_count(const lv_obj_t * tabview);
*/
lv_obj_t * lv_tabview_get_tab(const lv_obj_t * tabview, uint16_t id);
-/**
- * Get horizontal sliding is enabled or not
- * @param tabview pointer to Tab view object
- * @return true: enable sliding; false: disable sliding
- */
-bool lv_tabview_get_sliding(const lv_obj_t * tabview);
-
/**
* Get the animation time of tab view when a new tab is loaded
* @param tabview pointer to Tab view object
@@ -211,13 +191,6 @@ const lv_style_t * lv_tabview_get_style(const lv_obj_t * tabview, lv_tabview_sty
*/
lv_tabview_btns_pos_t lv_tabview_get_btns_pos(const lv_obj_t * tabview);
-/**
- * Get whether tab buttons are hidden
- * @param tabview pointer to a tab view object
- * @return whether tab buttons are hidden
- */
-bool lv_tabview_get_btns_hidden(const lv_obj_t * tabview);
-
/**********************
* MACROS
**********************/
diff --git a/src/lv_objx/lv_tileview.c b/src/lv_objx/lv_tileview.c
index ae86ea7dd..a8e6598bc 100644
--- a/src/lv_objx/lv_tileview.c
+++ b/src/lv_objx/lv_tileview.c
@@ -11,11 +11,15 @@
#include
#include "lv_cont.h"
+#include "../lv_misc/lv_math.h"
+#include "../lv_core/lv_debug.h"
#include "../lv_themes/lv_theme.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_tileview"
+
#if LV_USE_ANIMATION
#ifndef LV_TILEVIEW_DEF_ANIM_TIME
#define LV_TILEVIEW_DEF_ANIM_TIME 300 /*Animation time loading a tile [ms] (0: no animation) */
@@ -34,7 +38,6 @@
**********************/
static lv_res_t lv_tileview_signal(lv_obj_t * tileview, lv_signal_t sign, void * param);
static lv_res_t lv_tileview_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
-static void tileview_scrl_event_cb(lv_obj_t * scrl, lv_event_t event);
static void drag_end_handler(lv_obj_t * tileview);
static bool set_valid_drag_dirs(lv_obj_t * tileview);
@@ -65,18 +68,22 @@ lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor of tileview*/
lv_obj_t * new_tileview = lv_page_create(par, copy);
- lv_mem_assert(new_tileview);
+ LV_ASSERT_MEM(new_tileview);
if(new_tileview == NULL) return NULL;
/*Allocate the tileview type specific extended data*/
lv_tileview_ext_t * ext = lv_obj_allocate_ext_attr(new_tileview, sizeof(lv_tileview_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_tileview);
+ return NULL;
+ }
+
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_tileview);
if(ancestor_scrl_signal == NULL) ancestor_scrl_signal = lv_obj_get_signal_cb(lv_page_get_scrl(new_tileview));
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(new_tileview);
- /*Initialize the allocated 'ext' */
+ /*Initialize the allocated 'ext' */
#if LV_USE_ANIMATION
ext->anim_time = LV_TILEVIEW_DEF_ANIM_TIME;
#endif
@@ -95,11 +102,10 @@ lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy)
* Don't use `par` directly because if the tileview is created on a page it is moved to the
* scrollable so the parent has changed */
lv_obj_set_size(new_tileview, lv_obj_get_width_fit(lv_obj_get_parent(new_tileview)),
- lv_obj_get_height_fit(lv_obj_get_parent(new_tileview)));
-
- lv_obj_set_drag_throw(lv_page_get_scrl(new_tileview), false);
+ lv_obj_get_height_fit(lv_obj_get_parent(new_tileview)));
+ lv_obj_set_drag_dir(lv_page_get_scrl(new_tileview), LV_DRAG_DIR_ONE);
+ lv_obj_set_drag_throw(lv_page_get_scrl(new_tileview), true);
lv_page_set_scrl_fit(new_tileview, LV_FIT_TIGHT);
- lv_obj_set_event_cb(ext->page.scrl, tileview_scrl_event_cb);
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
@@ -142,16 +148,10 @@ lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy)
*/
void lv_tileview_add_element(lv_obj_t * tileview, lv_obj_t * element)
{
- /* Let the objects event to propagate to the scrollable part of the tileview.
- * It is required the handle dargging of the tileview with the element.*/
- element->parent_event = 1;
- lv_obj_set_drag_parent(element, true);
+ LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
+ LV_ASSERT_NULL(tileview);
- /* When adding a new element the coordinates may shift.
- * For example y=1 can become y=1 if an element is added to the top.
- * So be sure the current tile is correctly shown*/
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- lv_tileview_set_tile_act(tileview, ext->act_id.x, ext->act_id.y, false);
+ lv_page_glue_obj(element, true);
}
/*=====================
@@ -161,20 +161,25 @@ void lv_tileview_add_element(lv_obj_t * tileview, lv_obj_t * element)
/**
* Set the valid position's indices. The scrolling will be possible only to these positions.
* @param tileview pointer to a Tileview object
- * @param valid_pos array width the indices. E.g. `lv_point_t p[] = {{0,0}, {1,0}, {1,1}`. Only the
- * pointer is saved so can't be a local variable.
+ * @param valid_pos array width the indices. E.g. `lv_point_t p[] = {{0,0}, {1,0}, {1,1}`.
+ * Only the pointer is saved so can't be a local variable.
* @param valid_pos_cnt numner of elements in `valid_pos` array
*/
-void lv_tileview_set_valid_positions(lv_obj_t * tileview, const lv_point_t * valid_pos, uint16_t valid_pos_cnt)
+void lv_tileview_set_valid_positions(lv_obj_t * tileview, const lv_point_t valid_pos[], uint16_t valid_pos_cnt)
{
+ LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
+ LV_ASSERT_NULL(valid_pos);
+
lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
ext->valid_pos = valid_pos;
ext->valid_pos_cnt = valid_pos_cnt;
+ set_valid_drag_dirs(tileview);
+
/*If valid pos. is selected do nothing*/
uint16_t i;
for(i = 0; i < valid_pos_cnt; i++) {
- if(valid_pos->x == ext->act_id.x && valid_pos->y == ext->act_id.y) {
+ if(valid_pos[i].x == ext->act_id.x && valid_pos[i].y == ext->act_id.y) {
return;
}
}
@@ -194,6 +199,8 @@ void lv_tileview_set_valid_positions(lv_obj_t * tileview, const lv_point_t * val
*/
void lv_tileview_set_tile_act(lv_obj_t * tileview, lv_coord_t x, lv_coord_t y, lv_anim_enable_t anim)
{
+ LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
+
#if LV_USE_ANIMATION == 0
anim = LV_ANIM_OFF;
#endif
@@ -253,6 +260,8 @@ void lv_tileview_set_tile_act(lv_obj_t * tileview, lv_coord_t x, lv_coord_t y, l
lv_res_t res = LV_RES_OK;
res = lv_event_send(tileview, LV_EVENT_VALUE_CHANGED, &tile_id);
if(res != LV_RES_OK) return; /*Prevent the tile loading*/
+
+ set_valid_drag_dirs(tileview);
}
/**
@@ -263,9 +272,10 @@ void lv_tileview_set_tile_act(lv_obj_t * tileview, lv_coord_t x, lv_coord_t y, l
*/
void lv_tileview_set_style(lv_obj_t * tileview, lv_tileview_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
switch(type) {
- case LV_TILEVIEW_STYLE_MAIN: lv_obj_set_style(tileview, style); break;
+ case LV_TILEVIEW_STYLE_MAIN: lv_obj_set_style(tileview, style); break;
}
}
@@ -276,6 +286,19 @@ void lv_tileview_set_style(lv_obj_t * tileview, lv_tileview_style_t type, const
/*
* New object specific "get" functions come here
*/
+/**
+* Get the tile to be shown
+* @param tileview pointer to a tileview object
+* @param x column id (0, 1, 2...)
+* @param y line id (0, 1, 2...)
+*/
+void lv_tileview_get_tile_act(lv_obj_t * tileview, lv_coord_t *x, lv_coord_t *y)
+{
+ lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
+
+ *x = ext->act_id.x;
+ *y = ext->act_id.y;
+}
/**
* Get style of a tileview.
@@ -285,10 +308,12 @@ void lv_tileview_set_style(lv_obj_t * tileview, lv_tileview_style_t type, const
*/
const lv_style_t * lv_tileview_get_style(const lv_obj_t * tileview, lv_tileview_style_t type)
{
+ LV_ASSERT_OBJ(tileview, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
switch(type) {
- case LV_TILEVIEW_STYLE_MAIN: style = lv_obj_get_style(tileview); break;
- default: style = NULL;
+ case LV_TILEVIEW_STYLE_MAIN: style = lv_obj_get_style(tileview); break;
+ default: style = NULL;
}
return style;
@@ -320,16 +345,10 @@ static lv_res_t lv_tileview_signal(lv_obj_t * tileview, lv_signal_t sign, void *
/* Include the ancient signal function */
res = ancestor_signal(tileview, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
if(sign == LV_SIGNAL_CLEANUP) {
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_tileview";
}
return res;
@@ -354,135 +373,55 @@ static lv_res_t lv_tileview_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void
lv_obj_t * tileview = lv_obj_get_parent(scrl);
const lv_style_t * style_bg = lv_tileview_get_style(tileview, LV_TILEVIEW_STYLE_MAIN);
+ if(sign == LV_SIGNAL_DRAG_BEGIN) {
+ set_valid_drag_dirs(tileview);
+ }
+ else if(sign == LV_SIGNAL_DRAG_THROW_BEGIN) {
+ drag_end_handler(tileview);
+
+ res = lv_indev_finish_drag(lv_indev_get_act());
+ if(res != LV_RES_OK) return res;
+ }
/*Apply constraint on moving of the tileview*/
- if(sign == LV_SIGNAL_CORD_CHG) {
+ else if(sign == LV_SIGNAL_CORD_CHG) {
lv_indev_t * indev = lv_indev_get_act();
if(indev) {
lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- /*Set horizontal drag constraint if no vertical constraint an dragged to valid x
- * direction */
- if(ext->drag_ver == 0 &&
- ((ext->drag_right_en && indev->proc.types.pointer.drag_sum.x <= -LV_INDEV_DEF_DRAG_LIMIT) ||
- (ext->drag_left_en && indev->proc.types.pointer.drag_sum.x >= LV_INDEV_DEF_DRAG_LIMIT))) {
- ext->drag_hor = 1;
- }
- /*Set vertical drag constraint if no horizontal constraint an dragged to valid y
- * direction */
- if(ext->drag_hor == 0 &&
- ((ext->drag_bottom_en && indev->proc.types.pointer.drag_sum.y <= -LV_INDEV_DEF_DRAG_LIMIT) ||
- (ext->drag_top_en && indev->proc.types.pointer.drag_sum.y >= LV_INDEV_DEF_DRAG_LIMIT))) {
- ext->drag_ver = 1;
- }
-
-#if LV_USE_ANIMATION
- if(ext->drag_hor) {
- ext->page.edge_flash.top_ip = 0;
- ext->page.edge_flash.bottom_ip = 0;
- }
-
- if(ext->drag_ver) {
- ext->page.edge_flash.right_ip = 0;
- ext->page.edge_flash.left_ip = 0;
- }
-#endif
-
lv_coord_t x = lv_obj_get_x(scrl);
lv_coord_t y = lv_obj_get_y(scrl);
lv_coord_t h = lv_obj_get_height(tileview);
lv_coord_t w = lv_obj_get_width(tileview);
- if(ext->drag_top_en == 0) {
- if(y > -(ext->act_id.y * h) && indev->proc.types.pointer.vect.y > 0 && ext->drag_hor == 0) {
-#if LV_USE_ANIMATION
- if(ext->page.edge_flash.enabled && ext->page.edge_flash.left_ip == 0 &&
- ext->page.edge_flash.right_ip == 0 && ext->page.edge_flash.top_ip == 0 &&
- ext->page.edge_flash.bottom_ip == 0) {
- ext->page.edge_flash.top_ip = 1;
- lv_page_start_edge_flash(tileview);
- }
-#endif
-
- lv_obj_set_y(scrl, -ext->act_id.y * h + style_bg->body.padding.top);
- }
- }
- if(ext->drag_bottom_en == 0 && indev->proc.types.pointer.vect.y < 0 && ext->drag_hor == 0) {
- if(y < -(ext->act_id.y * h)) {
-#if LV_USE_ANIMATION
- if(ext->page.edge_flash.enabled && ext->page.edge_flash.left_ip == 0 &&
- ext->page.edge_flash.right_ip == 0 && ext->page.edge_flash.top_ip == 0 &&
- ext->page.edge_flash.bottom_ip == 0) {
- ext->page.edge_flash.bottom_ip = 1;
- lv_page_start_edge_flash(tileview);
- }
-#endif
- }
-
+ if(!ext->drag_top_en && y > -(ext->act_id.y * h) && indev->proc.types.pointer.vect.y > 0) {
+ lv_page_start_edge_flash(tileview, LV_PAGE_EDGE_TOP);
lv_obj_set_y(scrl, -ext->act_id.y * h + style_bg->body.padding.top);
}
- if(ext->drag_left_en == 0) {
- if(x > -(ext->act_id.x * w) && indev->proc.types.pointer.vect.x > 0 && ext->drag_ver == 0) {
-#if LV_USE_ANIMATION
- if(ext->page.edge_flash.enabled && ext->page.edge_flash.left_ip == 0 &&
- ext->page.edge_flash.right_ip == 0 && ext->page.edge_flash.top_ip == 0 &&
- ext->page.edge_flash.bottom_ip == 0) {
- ext->page.edge_flash.left_ip = 1;
- lv_page_start_edge_flash(tileview);
- }
-#endif
-
- lv_obj_set_x(scrl, -ext->act_id.x * w + style_bg->body.padding.left);
- }
+ if(!ext->drag_bottom_en && indev->proc.types.pointer.vect.y < 0 && y < -(ext->act_id.y * h)) {
+ lv_page_start_edge_flash(tileview, LV_PAGE_EDGE_BOTTOM);
+ lv_obj_set_y(scrl, -ext->act_id.y * h + style_bg->body.padding.top);
}
- if(ext->drag_right_en == 0 && indev->proc.types.pointer.vect.x < 0 && ext->drag_ver == 0) {
- if(x < -(ext->act_id.x * w)) {
-#if LV_USE_ANIMATION
- if(ext->page.edge_flash.enabled && ext->page.edge_flash.left_ip == 0 &&
- ext->page.edge_flash.right_ip == 0 && ext->page.edge_flash.top_ip == 0 &&
- ext->page.edge_flash.bottom_ip == 0) {
- ext->page.edge_flash.right_ip = 1;
- lv_page_start_edge_flash(tileview);
- }
-#endif
- }
+ if(!ext->drag_left_en && x > -(ext->act_id.x * w) && indev->proc.types.pointer.vect.x > 0) {
+ lv_page_start_edge_flash(tileview, LV_PAGE_EDGE_LEFT);
+ lv_obj_set_x(scrl, -ext->act_id.x * w + style_bg->body.padding.left);
+ }
+
+ if(!ext->drag_right_en && indev->proc.types.pointer.vect.x < 0 && x < -(ext->act_id.x * w)) {
+ lv_page_start_edge_flash(tileview, LV_PAGE_EDGE_RIGHT);
lv_obj_set_x(scrl, -ext->act_id.x * w + style_bg->body.padding.top);
}
/*Apply the drag constraints*/
- if(ext->drag_ver == 0)
+ lv_drag_dir_t drag_dir = indev->proc.types.pointer.drag_dir;
+ if(drag_dir == LV_DRAG_DIR_HOR)
lv_obj_set_y(scrl, -ext->act_id.y * lv_obj_get_height(tileview) + style_bg->body.padding.top);
- if(ext->drag_hor == 0)
+ else if(drag_dir == LV_DRAG_DIR_VER)
lv_obj_set_x(scrl, -ext->act_id.x * lv_obj_get_width(tileview) + style_bg->body.padding.left);
}
}
return res;
}
-static void tileview_scrl_event_cb(lv_obj_t * scrl, lv_event_t event)
-{
- lv_obj_t * tileview = lv_obj_get_parent(scrl);
-
- /*Initialize some variables on PRESS*/
- if(event == LV_EVENT_PRESSED) {
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- ext->drag_hor = 0;
- ext->drag_ver = 0;
- set_valid_drag_dirs(tileview);
- }
- /*Animate the tabview to the correct location on RELEASE*/
- else if(event == LV_EVENT_PRESS_LOST || event == LV_EVENT_RELEASED) {
- /* If the element was dragged and it moved the tileview finish the drag manually to
- * let the tileview to finish the move.*/
- lv_indev_t * indev = lv_indev_get_act();
- lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
- if(lv_indev_is_dragging(indev) && (ext->drag_hor || ext->drag_ver)) {
- indev->proc.types.pointer.drag_in_prog = 0;
- }
-
- drag_end_handler(tileview);
- }
-}
-
/**
* Called when the user releases an element of the tileview after dragging it.
* @param tileview pointer to a tileview object
@@ -499,8 +438,9 @@ static void drag_end_handler(lv_obj_t * tileview)
p.x = -(scrl->coords.x1 - lv_obj_get_width(tileview) / 2);
p.y = -(scrl->coords.y1 - lv_obj_get_height(tileview) / 2);
+ lv_drag_dir_t drag_dir = indev->proc.types.pointer.drag_dir;
/*From the drag vector (drag throw) predict the end position*/
- if(ext->drag_hor) {
+ if(drag_dir & LV_DRAG_DIR_HOR) {
lv_point_t vect;
lv_indev_get_vect(indev, &vect);
lv_coord_t predict = 0;
@@ -511,7 +451,8 @@ static void drag_end_handler(lv_obj_t * tileview)
}
p.x -= predict;
- } else if(ext->drag_ver) {
+
+ } else if(drag_dir & LV_DRAG_DIR_VER) {
lv_point_t vect;
lv_indev_get_vect(indev, &vect);
lv_coord_t predict = 0;
diff --git a/src/lv_objx/lv_tileview.h b/src/lv_objx/lv_tileview.h
index 9852f6ff5..aca10f76a 100644
--- a/src/lv_objx/lv_tileview.h
+++ b/src/lv_objx/lv_tileview.h
@@ -46,8 +46,6 @@ typedef struct
uint8_t drag_bottom_en : 1;
uint8_t drag_left_en : 1;
uint8_t drag_right_en : 1;
- uint8_t drag_hor : 1;
- uint8_t drag_ver : 1;
} lv_tileview_ext_t;
/*Styles*/
@@ -86,11 +84,11 @@ void lv_tileview_add_element(lv_obj_t * tileview, lv_obj_t * element);
/**
* Set the valid position's indices. The scrolling will be possible only to these positions.
* @param tileview pointer to a Tileview object
- * @param valid_pos array width the indices. E.g. `lv_point_t p[] = {{0,0}, {1,0}, {1,1}`. Only the
- * pointer is saved so can't be a local variable.
+ * @param valid_pos array width the indices. E.g. `lv_point_t p[] = {{0,0}, {1,0}, {1,1}`.
+ * Only the pointer is saved so can't be a local variable.
* @param valid_pos_cnt numner of elements in `valid_pos` array
*/
-void lv_tileview_set_valid_positions(lv_obj_t * tileview, const lv_point_t * valid_pos, uint16_t valid_pos_cnt);
+void lv_tileview_set_valid_positions(lv_obj_t * tileview, const lv_point_t valid_pos[], uint16_t valid_pos_cnt);
/**
* Set the tile to be shown
@@ -132,7 +130,13 @@ void lv_tileview_set_style(lv_obj_t * tileview, lv_tileview_style_t type, const
/*=====================
* Getter functions
*====================*/
-
+/**
+* Get the tile to be shown
+* @param tileview pointer to a tileview object
+* @param x column id (0, 1, 2...)
+* @param y line id (0, 1, 2...)
+*/
+void lv_tileview_get_tile_act(lv_obj_t * tileview, lv_coord_t *x, lv_coord_t *y);
/**
* Get the scroll propagation property
* @param tileview pointer to a Tileview
diff --git a/src/lv_objx/lv_win.c b/src/lv_objx/lv_win.c
index 946c8a8f8..e0be314f6 100644
--- a/src/lv_objx/lv_win.c
+++ b/src/lv_objx/lv_win.c
@@ -9,12 +9,14 @@
#include "lv_win.h"
#if LV_USE_WIN != 0
+#include "../lv_core/lv_debug.h"
#include "../lv_themes/lv_theme.h"
#include "../lv_core/lv_disp.h"
/*********************
* DEFINES
*********************/
+#define LV_OBJX_NAME "lv_win"
/**********************
* TYPEDEFS
@@ -51,15 +53,18 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
/*Create the ancestor object*/
lv_obj_t * new_win = lv_obj_create(par, copy);
- lv_mem_assert(new_win);
+ LV_ASSERT_MEM(new_win);
if(new_win == NULL) return NULL;
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(new_win);
/*Allocate the object type specific extended data*/
lv_win_ext_t * ext = lv_obj_allocate_ext_attr(new_win, sizeof(lv_win_ext_t));
- lv_mem_assert(ext);
- if(ext == NULL) return NULL;
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ lv_obj_del(new_win);
+ return NULL;
+ }
ext->page = NULL;
ext->header = NULL;
@@ -94,6 +99,8 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
ext->title = lv_label_create(ext->header, NULL);
lv_label_set_text(ext->title, "My title");
+ lv_obj_set_signal_cb(new_win, lv_win_signal);
+
/*Set the default styles*/
lv_theme_t * th = lv_theme_get_current();
if(th) {
@@ -108,8 +115,6 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
lv_win_set_style(new_win, LV_WIN_STYLE_CONTENT, &lv_style_transp);
lv_win_set_style(new_win, LV_WIN_STYLE_HEADER, &lv_style_plain_color);
}
-
- lv_obj_set_signal_cb(new_win, lv_win_signal);
}
/*Copy an existing object*/
else {
@@ -146,11 +151,13 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
/**
* Delete all children of the scrl object, without deleting scrl child.
- * @param obj pointer to an object
+ * @param win pointer to an object
*/
-void lv_win_clean(lv_obj_t * obj)
+void lv_win_clean(lv_obj_t * win)
{
- lv_obj_t * scrl = lv_page_get_scrl(obj);
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
+ lv_obj_t * scrl = lv_page_get_scrl(win);
lv_obj_clean(scrl);
}
@@ -166,6 +173,9 @@ void lv_win_clean(lv_obj_t * obj)
*/
lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * img_src)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+ LV_ASSERT_NULL(img_src);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
lv_obj_t * btn = lv_btn_create(ext->header, NULL);
@@ -193,6 +203,8 @@ lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * img_src)
*/
void lv_win_close_event_cb(lv_obj_t * btn, lv_event_t event)
{
+ LV_ASSERT_OBJ(btn, "lv_btn");
+
if(event == LV_EVENT_RELEASED) {
lv_obj_t * win = lv_win_get_from_btn(btn);
@@ -207,6 +219,9 @@ void lv_win_close_event_cb(lv_obj_t * btn, lv_event_t event)
*/
void lv_win_set_title(lv_obj_t * win, const char * title)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+ LV_ASSERT_STR(title);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
lv_label_set_text(ext->title, title);
@@ -220,6 +235,8 @@ void lv_win_set_title(lv_obj_t * win, const char * title)
*/
void lv_win_set_btn_size(lv_obj_t * win, lv_coord_t size)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
if(ext->btn_size == size) return;
@@ -228,6 +245,22 @@ void lv_win_set_btn_size(lv_obj_t * win, lv_coord_t size)
lv_win_realign(win);
}
+/**
+ * Set the size of the content area.
+ * @param win pointer to a window object
+ * @param w width
+ * @param h height (the window will be higher with the height of the header)
+ */
+void lv_win_set_content_size(lv_obj_t * win, lv_coord_t w, lv_coord_t h)
+{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
+ lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
+ h += lv_obj_get_height(ext->header);
+
+ lv_obj_set_size(win, w, h);
+}
+
/**
* Set the layout of the window
* @param win pointer to a window object
@@ -235,6 +268,8 @@ void lv_win_set_btn_size(lv_obj_t * win, lv_coord_t size)
*/
void lv_win_set_layout(lv_obj_t * win, lv_layout_t layout)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
lv_page_set_scrl_layout(ext->page, layout);
}
@@ -246,6 +281,8 @@ void lv_win_set_layout(lv_obj_t * win, lv_layout_t layout)
*/
void lv_win_set_sb_mode(lv_obj_t * win, lv_sb_mode_t sb_mode)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
lv_page_set_sb_mode(ext->page, sb_mode);
}
@@ -256,6 +293,8 @@ void lv_win_set_sb_mode(lv_obj_t * win, lv_sb_mode_t sb_mode)
*/
void lv_win_set_anim_time(lv_obj_t * win, uint16_t anim_time)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_page_set_anim_time(lv_win_get_content(win), anim_time);
}
@@ -267,6 +306,8 @@ void lv_win_set_anim_time(lv_obj_t * win, uint16_t anim_time)
*/
void lv_win_set_style(lv_obj_t * win, lv_win_style_t type, const lv_style_t * style)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
switch(type) {
@@ -306,6 +347,8 @@ void lv_win_set_style(lv_obj_t * win, lv_win_style_t type, const lv_style_t * st
*/
void lv_win_set_drag(lv_obj_t * win, bool en)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
lv_obj_t * win_header = ext->header;
lv_obj_set_drag_parent(win_header, en);
@@ -323,6 +366,8 @@ void lv_win_set_drag(lv_obj_t * win, bool en)
*/
const char * lv_win_get_title(const lv_obj_t * win)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
return lv_label_get_text(ext->title);
}
@@ -334,6 +379,8 @@ const char * lv_win_get_title(const lv_obj_t * win)
*/
lv_obj_t * lv_win_get_content(const lv_obj_t * win)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
return ext->page;
}
@@ -345,6 +392,8 @@ lv_obj_t * lv_win_get_content(const lv_obj_t * win)
*/
lv_coord_t lv_win_get_btn_size(const lv_obj_t * win)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
return ext->btn_size;
}
@@ -357,6 +406,8 @@ lv_coord_t lv_win_get_btn_size(const lv_obj_t * win)
*/
lv_obj_t * lv_win_get_from_btn(const lv_obj_t * ctrl_btn)
{
+ LV_ASSERT_OBJ(ctrl_btn, "lv_btn");
+
lv_obj_t * header = lv_obj_get_parent(ctrl_btn);
lv_obj_t * win = lv_obj_get_parent(header);
@@ -370,6 +421,8 @@ lv_obj_t * lv_win_get_from_btn(const lv_obj_t * ctrl_btn)
*/
lv_layout_t lv_win_get_layout(lv_obj_t * win)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
return lv_page_get_scrl_layout(ext->page);
}
@@ -381,6 +434,8 @@ lv_layout_t lv_win_get_layout(lv_obj_t * win)
*/
lv_sb_mode_t lv_win_get_sb_mode(lv_obj_t * win)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
return lv_page_get_sb_mode(ext->page);
}
@@ -392,6 +447,8 @@ lv_sb_mode_t lv_win_get_sb_mode(lv_obj_t * win)
*/
uint16_t lv_win_get_anim_time(const lv_obj_t * win)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
return lv_page_get_anim_time(lv_win_get_content(win));
}
@@ -402,6 +459,8 @@ uint16_t lv_win_get_anim_time(const lv_obj_t * win)
*/
lv_coord_t lv_win_get_width(lv_obj_t * win)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
lv_obj_t * scrl = lv_page_get_scrl(ext->page);
const lv_style_t * style_scrl = lv_obj_get_style(scrl);
@@ -417,6 +476,8 @@ lv_coord_t lv_win_get_width(lv_obj_t * win)
*/
const lv_style_t * lv_win_get_style(const lv_obj_t * win, lv_win_style_t type)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+
const lv_style_t * style = NULL;
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
@@ -445,6 +506,10 @@ const lv_style_t * lv_win_get_style(const lv_obj_t * win, lv_win_style_t type)
*/
void lv_win_focus(lv_obj_t * win, lv_obj_t * obj, lv_anim_enable_t anim_en)
{
+ LV_ASSERT_OBJ(win, LV_OBJX_NAME);
+ LV_ASSERT_OBJ(obj, "");
+
+
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
lv_page_focus(ext->page, obj, anim_en);
}
@@ -467,6 +532,7 @@ static lv_res_t lv_win_signal(lv_obj_t * win, lv_signal_t sign, void * param)
/* Include the ancient signal function */
res = ancestor_signal(win, sign, param);
if(res != LV_RES_OK) return res;
+ if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
if(sign == LV_SIGNAL_CHILD_CHG) { /*Move children to the page*/
@@ -498,13 +564,6 @@ static lv_res_t lv_win_signal(lv_obj_t * win, lv_signal_t sign, void * param)
} else if(sign == LV_SIGNAL_CONTROL) {
/*Forward all the control signals to the page*/
ext->page->signal_cb(ext->page, sign, param);
- } else if(sign == LV_SIGNAL_GET_TYPE) {
- lv_obj_type_t * buf = param;
- uint8_t i;
- for(i = 0; i < LV_MAX_ANCESTOR_NUM - 1; i++) { /*Find the last set data*/
- if(buf->type[i] == NULL) break;
- }
- buf->type[i] = "lv_win";
}
return res;
diff --git a/src/lv_objx/lv_win.h b/src/lv_objx/lv_win.h
index 5cdbd1145..28560cf6c 100644
--- a/src/lv_objx/lv_win.h
+++ b/src/lv_objx/lv_win.h
@@ -91,9 +91,9 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy);
/**
* Delete all children of the scrl object, without deleting scrl child.
- * @param obj pointer to an object
+ * @param win pointer to an object
*/
-void lv_win_clean(lv_obj_t * obj);
+void lv_win_clean(lv_obj_t * win);
/*======================
* Add/remove functions
@@ -132,6 +132,15 @@ void lv_win_set_title(lv_obj_t * win, const char * title);
*/
void lv_win_set_btn_size(lv_obj_t * win, lv_coord_t size);
+
+/**
+ * Set the size of the content area.
+ * @param win pointer to a window object
+ * @param w width
+ * @param h height (the window will be higher with the height of the header)
+ */
+void lv_win_set_content_size(lv_obj_t * win, lv_coord_t w, lv_coord_t h);
+
/**
* Set the layout of the window
* @param win pointer to a window object
diff --git a/src/lv_themes/lv_theme_alien.c b/src/lv_themes/lv_theme_alien.c
index 987a36310..c5c726ec4 100644
--- a/src/lv_themes/lv_theme_alien.c
+++ b/src/lv_themes/lv_theme_alien.c
@@ -85,7 +85,6 @@ static void basic_init(void)
def.body.border.opa = LV_OPA_COVER;
def.body.shadow.color = LV_COLOR_SILVER;
def.body.shadow.width = 0;
- def.body.shadow.type = LV_SHADOW_FULL;
def.text.color = lv_color_hex3(0xDDD);
def.text.font = _font;
@@ -328,6 +327,10 @@ static void slider_init(void)
slider_knob.body.border.width = 1;
slider_knob.body.border.color = LV_COLOR_GRAY;
slider_knob.body.border.opa = LV_OPA_50;
+ slider_knob.body.padding.left = LV_DPI/25;
+ slider_knob.body.padding.right = LV_DPI/25;
+ slider_knob.body.padding.top = LV_DPI/25;
+ slider_knob.body.padding.bottom = LV_DPI/25;
theme.style.slider.bg = &bar_bg;
theme.style.slider.indic = &bar_indic;
@@ -824,7 +827,7 @@ static void win_init(void)
header.body.border.opa = panel.body.border.opa;
header.body.border.width = panel.body.border.width;
header.body.border.color = lv_color_hsv_to_rgb(_hue, 20, 80);
- header.body.border.part = LV_BORDER_BOTTOM;
+ header.body.border.part = LV_BORDER_PART_BOTTOM;
header.text.color = lv_color_hsv_to_rgb(_hue, 5, 100);
header.image.color = lv_color_hsv_to_rgb(_hue, 5, 100);
diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c
index 6d162bf53..a5694bfde 100644
--- a/src/lv_themes/lv_theme_material.c
+++ b/src/lv_themes/lv_theme_material.c
@@ -72,8 +72,8 @@ static void basic_init(void)
panel.body.border.color = lv_color_hex3(0xbbb);
panel.body.border.opa = LV_OPA_COVER;
panel.body.shadow.color = DEF_SHADOW_COLOR;
- panel.body.shadow.type = LV_SHADOW_BOTTOM;
- panel.body.shadow.width = 4;
+ panel.body.shadow.width = 6;
+ panel.body.shadow.offset.y = 2;
panel.body.padding.left = LV_DPI / 8;
panel.body.padding.right = LV_DPI / 8;
panel.body.padding.top = LV_DPI / 8;
@@ -117,8 +117,8 @@ static void btn_init(void)
rel.body.padding.bottom = LV_DPI / 8;
rel.body.padding.inner = LV_DPI / 10;
rel.body.shadow.color = DEF_SHADOW_COLOR;
- rel.body.shadow.type = LV_SHADOW_BOTTOM;
rel.body.shadow.width = 6;
+ rel.body.shadow.offset.y = 2;
rel.text.color = lv_color_hsv_to_rgb(_hue, 5, 95);
rel.image.color = lv_color_hsv_to_rgb(_hue, 5, 95);
@@ -254,6 +254,10 @@ static void slider_init(void)
knob.body.border.width = 0;
knob.body.main_color = theme.style.bar.indic->body.main_color;
knob.body.grad_color = knob.body.main_color;
+ knob.body.padding.left = LV_DPI/25;
+ knob.body.padding.right = LV_DPI/25;
+ knob.body.padding.top = LV_DPI/25;
+ knob.body.padding.bottom = LV_DPI/25;
theme.style.slider.bg = theme.style.bar.bg;
theme.style.slider.indic = theme.style.bar.indic;
@@ -270,11 +274,13 @@ static void sw_init(void)
lv_style_copy(&sw_indic, theme.style.slider.bg);
sw_indic.body.radius = LV_RADIUS_CIRCLE;
+ sw_indic.body.padding.left = 0;
+ sw_indic.body.padding.right = 0;
lv_style_copy(&sw_knob_on, theme.style.slider.knob);
- sw_knob_on.body.shadow.width = 3;
- sw_knob_on.body.shadow.type = LV_SHADOW_BOTTOM;
+ sw_knob_on.body.shadow.width = 5;
sw_knob_on.body.shadow.color = DEF_SHADOW_COLOR;
+ sw_knob_on.body.shadow.offset.y= 3;
lv_style_copy(&sw_knob_off, &sw_knob_on);
sw_knob_off.body.main_color = lv_color_hex(0xfafafa);
@@ -381,7 +387,7 @@ static void calendar_init(void)
week_box.body.padding.right = theme.style.panel->body.padding.right;
week_box.body.border.color = theme.style.panel->body.border.color;
week_box.body.border.width = theme.style.panel->body.border.width;
- week_box.body.border.part = LV_BORDER_LEFT | LV_BORDER_RIGHT;
+ week_box.body.border.part = LV_BORDER_PART_LEFT | LV_BORDER_PART_RIGHT;
week_box.body.radius = 0;
static lv_style_t today_box;
@@ -406,7 +412,6 @@ static void cb_init(void)
#if LV_USE_CB != 0
static lv_style_t rel, pr, tgl_rel, tgl_pr, ina;
lv_style_copy(&rel, theme.style.panel);
- rel.body.shadow.type = LV_SHADOW_BOTTOM;
rel.body.shadow.width = 3;
lv_style_copy(&pr, &rel);
@@ -417,7 +422,6 @@ static void cb_init(void)
lv_style_copy(&tgl_rel, &rel);
tgl_rel.body.main_color = lv_color_hsv_to_rgb(_hue, 75, 85);
tgl_rel.body.grad_color = tgl_rel.body.main_color;
- tgl_rel.body.shadow.type = LV_SHADOW_FULL;
tgl_rel.body.shadow.width = 0;
lv_style_copy(&tgl_pr, &tgl_rel);
@@ -450,7 +454,7 @@ static void btnm_init(void)
bg.text.color = lv_color_hex3(0x555);
lv_style_copy(&rel, theme.style.panel);
- rel.body.border.part = LV_BORDER_FULL | LV_BORDER_INTERNAL;
+ rel.body.border.part = LV_BORDER_PART_FULL | LV_BORDER_PART_INTERNAL;
rel.body.border.width = 1;
rel.body.border.color = lv_color_hex3(0xbbb);
rel.body.opa = LV_OPA_TRANSP;
@@ -541,7 +545,7 @@ static void ta_init(void)
lv_style_copy(&oneline, &def);
oneline.body.opa = LV_OPA_TRANSP;
oneline.body.radius = 0;
- oneline.body.border.part = LV_BORDER_BOTTOM;
+ oneline.body.border.part = LV_BORDER_PART_BOTTOM;
oneline.body.border.width = 3;
oneline.body.border.color = lv_color_hex3(0x333);
oneline.body.border.opa = LV_OPA_COVER;
@@ -584,7 +588,7 @@ static void list_init(void)
rel.body.radius = 10;
rel.body.border.color = lv_color_hex3(0xbbb);
rel.body.border.width = 1;
- rel.body.border.part = LV_BORDER_BOTTOM;
+ rel.body.border.part = LV_BORDER_PART_BOTTOM;
lv_style_copy(&pr, &rel);
pr.glass = 0;
@@ -684,11 +688,12 @@ static void tabview_init(void)
btn_bg.body.radius = 0;
btn_bg.body.border.width = 1;
btn_bg.body.border.color = lv_color_hex3(0x888);
- btn_bg.body.border.part = LV_BORDER_BOTTOM;
+ btn_bg.body.border.part = LV_BORDER_PART_BOTTOM;
btn_bg.body.border.opa = LV_OPA_COVER;
btn_bg.body.shadow.width = 5;
+ btn_bg.body.shadow.spread = 2;
+ btn_bg.body.shadow.offset.y = 1;
btn_bg.body.shadow.color = DEF_SHADOW_COLOR;
- btn_bg.body.shadow.type = LV_SHADOW_BOTTOM;
btn_bg.body.padding.inner = 0;
btn_bg.body.padding.left = 0;
btn_bg.body.padding.right = 0;
@@ -709,7 +714,7 @@ static void tabview_init(void)
pr.body.radius = 0;
pr.body.border.width = 1;
pr.body.border.color = lv_color_hex3(0x888);
- pr.body.border.part = LV_BORDER_BOTTOM;
+ pr.body.border.part = LV_BORDER_PART_BOTTOM;
pr.body.border.opa = LV_OPA_COVER;
pr.text.color = lv_color_hex3(0x111);
@@ -756,6 +761,7 @@ static void table_init(void)
cell.body.padding.right = LV_DPI / 12;
cell.body.padding.top = LV_DPI / 12;
cell.body.padding.bottom = LV_DPI / 12;
+ cell.body.shadow.width = 0;
theme.style.table.bg = &lv_style_transp_tight;
theme.style.table.cell = &cell;
@@ -773,7 +779,7 @@ static void win_init(void)
header.body.radius = 0;
header.body.border.width = 1;
header.body.border.color = lv_color_hex3(0xbbb);
- header.body.border.part = LV_BORDER_BOTTOM;
+ header.body.border.part = LV_BORDER_PART_BOTTOM;
header.body.border.opa = LV_OPA_COVER;
header.body.padding.inner = 0;
header.body.padding.left = 0;
diff --git a/src/lv_themes/lv_theme_mono.c b/src/lv_themes/lv_theme_mono.c
index 9c2e7743f..bea4dced6 100644
--- a/src/lv_themes/lv_theme_mono.c
+++ b/src/lv_themes/lv_theme_mono.c
@@ -61,7 +61,7 @@ static void basic_init(void)
def.body.border.color = LV_COLOR_BLACK;
def.body.border.width = 1;
def.body.border.opa = LV_OPA_COVER;
- def.body.border.part = LV_BORDER_FULL;
+ def.body.border.part = LV_BORDER_PART_FULL;
def.text.font = _font;
def.text.color = LV_COLOR_BLACK;
@@ -76,14 +76,14 @@ static void basic_init(void)
def.image.intense = LV_OPA_TRANSP;
def.image.opa = LV_OPA_COVER;
+ lv_style_copy(&light_plain, &def);
+
lv_style_copy(&scr, &light_plain);
scr.body.padding.bottom = 0;
scr.body.padding.top = 0;
scr.body.padding.left = 0;
scr.body.padding.right = 0;
- lv_style_copy(&light_plain, &def);
-
lv_style_copy(&light_frame, &light_plain);
light_frame.body.radius = LV_DPI / 20;
@@ -127,9 +127,9 @@ static void label_init(void)
{
#if LV_USE_LABEL != 0
- theme.style.label.prim = NULL;
- theme.style.label.sec = NULL;
- theme.style.label.hint = NULL;
+ theme.style.label.prim = &light_plain;
+ theme.style.label.sec = &light_plain;
+ theme.style.label.hint = &light_plain;
#endif
}
@@ -145,7 +145,7 @@ static void img_init(void)
static void line_init(void)
{
#if LV_USE_LINE != 0
- theme.style.line.decor = NULL;
+ theme.style.line.decor = &light_plain;
#endif
}
@@ -157,7 +157,6 @@ static void led_init(void)
led.body.radius = LV_RADIUS_CIRCLE;
led.body.shadow.width = LV_DPI / 8;
led.body.shadow.color = LV_COLOR_BLACK;
- led.body.shadow.type = LV_SHADOW_FULL;
theme.style.led = &led;
#endif
diff --git a/src/lv_themes/lv_theme_nemo.c b/src/lv_themes/lv_theme_nemo.c
index cd4bd002a..36cf8b188 100644
--- a/src/lv_themes/lv_theme_nemo.c
+++ b/src/lv_themes/lv_theme_nemo.c
@@ -87,7 +87,6 @@ static void basic_init(void)
def.body.border.opa = LV_OPA_COVER;
def.body.shadow.color = LV_COLOR_SILVER;
def.body.shadow.width = 0;
- def.body.shadow.type = LV_SHADOW_FULL;
def.text.color = lv_color_hex3(0xDDD);
def.text.font = _font;
@@ -620,7 +619,6 @@ static void list_init(void)
list_rel.text.font = _font;
lv_style_copy(&list_pr, &list_rel);
- list_pr.body.opa = LV_OPA_TRANSP;
list_pr.body.opa = LV_OPA_COVER;
list_pr.body.main_color = lv_color_hsv_to_rgb(_hue, 34, 41);
list_pr.body.grad_color = lv_color_hsv_to_rgb(_hue, 34, 41);
diff --git a/src/lv_themes/lv_theme_night.c b/src/lv_themes/lv_theme_night.c
index c908939cf..6dfbe5324 100644
--- a/src/lv_themes/lv_theme_night.c
+++ b/src/lv_themes/lv_theme_night.c
@@ -115,7 +115,6 @@ static void btn_init(void)
btn_rel.body.padding.right = LV_DPI / 4;
btn_rel.body.padding.top = LV_DPI / 8;
btn_rel.body.padding.bottom = LV_DPI / 8;
- btn_rel.body.shadow.type = LV_SHADOW_BOTTOM;
btn_rel.body.shadow.color = lv_color_hex3(0x111);
btn_rel.body.shadow.width = LV_DPI / 30;
btn_rel.text.color = lv_color_hex3(0xeee);
@@ -218,6 +217,7 @@ static void bar_init(void)
bar_bg.body.padding.top = LV_DPI / 16;
bar_bg.body.padding.bottom = LV_DPI / 16;
bar_bg.body.radius = LV_RADIUS_CIRCLE;
+// bar_bg.body.corner_mask = 1;
lv_style_copy(&bar_indic, &def);
bar_indic.body.main_color = lv_color_hsv_to_rgb(_hue, 80, 70);
@@ -242,6 +242,10 @@ static void slider_init(void)
static lv_style_t slider_knob;
lv_style_copy(&slider_knob, theme.style.btn.rel);
slider_knob.body.radius = LV_RADIUS_CIRCLE;
+ slider_knob.body.padding.left = LV_DPI/25;
+ slider_knob.body.padding.right = LV_DPI/25;
+ slider_knob.body.padding.top = LV_DPI/25;
+ slider_knob.body.padding.bottom = LV_DPI/25;
theme.style.slider.bg = theme.style.bar.bg;
theme.style.slider.indic = theme.style.bar.indic;
@@ -457,7 +461,7 @@ static void btnm_init(void)
btnm_bg.body.border.width = 1;
lv_style_copy(&rel, theme.style.btn.rel);
- rel.body.border.part = LV_BORDER_FULL | LV_BORDER_INTERNAL;
+ rel.body.border.part = LV_BORDER_PART_FULL | LV_BORDER_PART_INTERNAL;
rel.body.border.width = 1;
rel.body.radius = 2;
@@ -572,7 +576,7 @@ static void list_init(void)
lv_style_copy(&list_btn_rel, &bg);
list_btn_rel.body.opa = LV_OPA_TRANSP;
- list_btn_rel.body.border.part = LV_BORDER_BOTTOM;
+ list_btn_rel.body.border.part = LV_BORDER_PART_BOTTOM;
list_btn_rel.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 5);
list_btn_rel.body.border.width = 1;
list_btn_rel.body.radius = LV_DPI / 10;
diff --git a/src/lv_themes/lv_theme_zen.c b/src/lv_themes/lv_theme_zen.c
index 55569993d..879dfc7fb 100644
--- a/src/lv_themes/lv_theme_zen.c
+++ b/src/lv_themes/lv_theme_zen.c
@@ -681,7 +681,7 @@ static void tabview_init(void)
lv_style_copy(&btn_bg, &def);
btn_bg.body.opa = LV_OPA_TRANSP;
btn_bg.body.border.width = 2;
- btn_bg.body.border.part = LV_BORDER_BOTTOM;
+ btn_bg.body.border.part = LV_BORDER_PART_BOTTOM;
btn_bg.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 90);
lv_style_copy(&indic, &def);
@@ -750,7 +750,7 @@ static void win_init(void)
lv_style_copy(&header, &def);
header.body.opa = LV_OPA_TRANSP;
header.body.border.width = 2;
- header.body.border.part = LV_BORDER_BOTTOM;
+ header.body.border.part = LV_BORDER_PART_BOTTOM;
header.body.border.color = lv_color_hsv_to_rgb(_hue, 10, 90);
header.text.color = lv_color_hex3(0x666);
header.image.color = lv_color_hex3(0x666);
diff --git a/src/lv_version.h b/src/lv_version.h
deleted file mode 100644
index c447d5620..000000000
--- a/src/lv_version.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * @file lv_version.h
- *
- */
-
-#ifndef LV_VERSION_H
-#define LV_VERSION_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- * INCLUDES
- *********************/
-/*Current version of LittlevGL*/
-#define LVGL_VERSION_MAJOR 6
-#define LVGL_VERSION_MINOR 0
-#define LVGL_VERSION_PATCH 2
-#define LVGL_VERSION_INFO ""
-
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-/** Gives 1 if the x.y.z version is supported in the current version
- * Usage:
- *
- * - Require v6
- * #if LV_VERSION_CHECK(6,0,0)
- * new_func_in_v6();
- * #endif
- *
- *
- * - Require at least v5.3
- * #if LV_VERSION_CHECK(5,3,0)
- * new_feature_from_v5_3();
- * #endif
- *
- *
- * - Require v5.3.2 bugfixes
- * #if LV_VERSION_CHECK(5,3,2)
- * bugfix_in_v5_3_2();
- * #endif
- *
- * */
-#define LV_VERSION_CHECK(x,y,z) (x == LVGL_VERSION_MAJOR && (y < LVGL_VERSION_MINOR || (y == LVGL_VERSION_MINOR && z <= LVGL_VERSION_PATCH)))
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*LV_VERSION_H*/